概念 - Kubernetes 命名空间

Kubernetes 支持由同一物理集群支持的多个虚拟集群。这些虚拟集群称为命名空间。

  • 何时使用多个命名空间
  • 使用命名空间
  • 命名空间和 DNS
  • 并非所有对象都在命名空间中
  • 下一步怎么做

何时使用多个命名空间

命名空间旨在用于具有多个用户的环境,这些用户分布在多个团队或项目中。对于很自由几到几十个用户的集群,我们根本不需要创建或考虑命名空间。当需要命名空间提供的功能时,请开始使用它们。

命名空间提供了名称范围。资源名称在命名空间内必须唯一,但在各个命名空间之间则可以有相同的名称。命名空间不能彼此嵌套,并且每个 Kubernetes 资源只能位于一个命名空间中。

命名空间是一种在多个用户之间(通过资源配额(敬请期待~~))划分集群资源的方法。

在将来的 Kubernetes 版本中,默认情况下,相同命名空间中的对象将具有相同的访问控制策略。

不必用多个命名空间来分隔稍有不同的资源,例如同一软件的不同版本:使用标签(敬请期待~~)来区分同一命名空间中的资源。

使用命名空间

命名空间的管理指南文档(敬请期待~~)中描述了命名空间的创建及删除。

查看命名空间

我们可以使用以下命令列出集群中的当前命名空间:

kubectl get namespace
NAME          STATUS    AGE
default       Active    1d
kube-system   Active    1d
kube-public   Active    1d
kube-node-lease Active 1d

Kubernetes 从三个初始命名空间开始:

  • default:没有其他命名空间的对象的默认命名空间;
  • kube-system:Kubernetes 系统创建的对象的命名空间;
  • kube-public:该命名空间是自动创建的,并且对所有用户(包括未经身份验证的用户)可读。该命名空间主要保留给集群使用,以防某些资源在整个集群中公开可见。该命名空间的公共方面只是约定俗成,而不是要求。

为请求设置命名空间

要为当前请求设置命名空间,请使用 --namespace 标志。

例如:

kubectl run nginx --image=nginx --namespace=<命名空间名称>
kubectl get pods --namespace=<命名空间名称>

设置命名空间首选项

我们可以为该上下文中的所有后续 kubectl 命令永久保存命名空间。

kubectl config set-context --current --namespace=<命名空间名称>
# 验证一下
kubectl config view --minify | grep namespace:

命名空间和 DNS

创建服务(敬请期待~~)时,它会创建一个相应的 DNS 条目(敬请期待~~)。该项的格式为 <服务名称>.<命名空间名称>.svc.cluster.local,这意味着如果容器仅使用 <服务名称>,它将解析为命名空间本地的服务。这对于在多个命名空间(例如开发、待发及生产)中使用相同的配置很有用。如果要跨命名空间访问,则需要使用完全限定的域名(FQDN)。

并非所有对象都在命名空间中

大多数 Kubernetes 资源(例如 Pod、服务、复制控制器及其他资源)都位于某些命名空间中。但是,命名空间资源本身并不在命名空间中。并且不在任何命名空间中低级资源,例如节点(敬请期待~~)及持久卷。

要查看命名空间中存在及不存在哪些 Kubernetes 资源,请执行以下操作:

# 在命名空间中
kubectl api-resources --namespaced=true

# 不在命名空间中
kubectl api-resources --namespaced=false

下一步怎么做

发布了231 篇原创文章 · 获赞 13 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/stevenchen1989/article/details/105356502