概念

Edit This Page

命名空间

Kubernetes 支持多个虚拟集群,它们底层依赖于同一个物理集群。 这些虚拟集群被称为命名空间。

何时使用多个命名空间

命名空间适用于存在很多跨多个团队或项目的用户的场景。 对于只有几到几十个用户的集群,根本不需要创建或考虑命名空间。

当您需要命名空间提供的特性时,请开始使用它们。

命名空间为名称提供了一个范围。 资源的名称需要在命名空间内是惟一的,但不能跨命名空间。

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

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

不需要使用多个命名空间来分隔轻微不同的资源,例如同一软件的不同版本: 使用标签来区分同一命名空间中的不同资源。

使用命名空间

命名空间的创建和删除已在命名空间的管理指南文档中进行了描述。

查看命名空间

您可以使用以下命令列出集群中现存的命名空间:

$ kubectl get namespaces
NAME          STATUS    AGE
default       Active    1d
kube-system   Active    1d
kube-public   Active    1d

Kubernetes 会创建三个初始命名空间:

为请求设置命名空间

要临时设置请求的命名空间,请使用 --namespace 参数。

例如:

$ kubectl --namespace=<insert-namespace-name-here> run nginx --image=nginx
$ kubectl --namespace=<insert-namespace-name-here> get pods

设置命名空间首选项

您可以永久保存该上下文中所有后续 kubectl 命令使用的命名空间。

$ kubectl config set-context $(kubectl config current-context) --namespace=<insert-namespace-name-here>
# Validate it
$ kubectl config view | grep namespace:

命名空间和 DNS

当您创建一个服务时,Kubernetes 会创建一个相应的DNS 条目

该条目的形式是 <service-name>.<namespace-name>.svc.cluster.local, 这意味着如果容器只使用 <service-name>,它将被解析到本地命名空间的服务。

这对于跨多个命名空间(如开发、分级和生产)使用相同的配置非常有用。 This is useful for using the same configuration across multiple namespaces such as Development, Staging and Production. --> 如果您希望跨命名空间访问,则需要使用完全限定域名(FQDN)。

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

大多数 kubernetes 资源(例如 Pod、服务、副本控制器等)都位于某些命名空间中。 但是命名空间资源本身并不在命名空间中。

而且底层资源,例如节点和持久化卷不属于任何命名空间。

查看哪些 Kubernetes 资源在命名空间中,哪些不在命名空间中:

# In a namespace
$ kubectl api-resources --namespaced=true

# Not in a namespace
$ kubectl api-resources --namespaced=false

反馈