--- title: 命名空间 content_template: templates/concept weight: 30 --- {{% capture overview %}} Kubernetes 支持多个虚拟集群,它们底层依赖于同一个物理集群。 这些虚拟集群被称为命名空间。 {{% /capture %}} {{% capture body %}} ## 何时使用多个命名空间 命名空间适用于存在很多跨多个团队或项目的用户的场景。 对于只有几到几十个用户的集群,根本不需要创建或考虑命名空间。当您需要命名空间提供的特性时,请开始使用它们。 命名空间为名称提供了一个范围。 资源的名称需要在命名空间内是惟一的,但不能跨命名空间。命名空间不能嵌套在另外一个命名空间内,而且每个 Kubernetes 资源只能属于一个命名空间。 命名空间是在多个用户之间划分集群资源的一种方法(通过[资源配额](/docs/concepts/policy/resource-quotas/))。 在 Kubernetes 未来版本中,相同命名空间中的对象默认将具有相同的访问控制策略。 不需要使用多个命名空间来分隔轻微不同的资源,例如同一软件的不同版本: 使用[标签](/docs/user-guide/labels)来区分同一命名空间中的不同资源。 ## 使用命名空间 命名空间的创建和删除已在[命名空间的管理指南文档](/docs/admin/namespaces)中进行了描述。 ### 查看命名空间 您可以使用以下命令列出集群中现存的命名空间: ```shell kubectl get namespace ``` ``` NAME STATUS AGE default Active 1d kube-system Active 1d kube-public Active 1d ``` Kubernetes 会创建三个初始命名空间: * `default` 没有指明使用其它命名空间的对象所使用的默认命名空间 * `kube-system` Kubernetes 系统创建对象所使用的命名空间 * `kube-public` 这个命名空间是自动创建的,所有用户(包括未经过身份验证的用户)都可以读取它。这个命名空间主要用于集群使用,以防某些资源在整个集群中应该是可见和可读的。这个命名空间的公共方面只是一种约定,而不是要求。 ### 为请求设置命名空间 要为当前的请求设定一个命名空间,请使用 `--namespace` 参数。 例如: ```shell kubectl run nginx --image=nginx --namespace= kubectl get pods --namespace= ``` ### 设置命名空间首选项 您可以永久保存该上下文中所有后续 kubectl 命令使用的命名空间。 ```shell kubectl config set-context --current --namespace= # Validate it kubectl config view | grep namespace: ``` ## 命名空间和 DNS 当您创建一个[服务](/docs/user-guide/services)时,Kubernetes 会创建一个相应的[DNS 条目](/docs/concepts/services-networking/dns-pod-service/)。 该条目的形式是 `..svc.cluster.local`, 这意味着如果容器只使用 ``,它将被解析到本地命名空间的服务。 这对于跨多个命名空间(如开发、分级和生产)使用相同的配置非常有用。 如果您希望跨命名空间访问,则需要使用完全限定域名(FQDN)。 ## 并非所有对象都在命名空间中 大多数 kubernetes 资源(例如 Pod、服务、副本控制器等)都位于某些命名空间中。 但是命名空间资源本身并不在命名空间中。 而且底层资源,例如[节点](/docs/admin/node)和持久化卷不属于任何命名空间。 查看哪些 Kubernetes 资源在命名空间中,哪些不在命名空间中: ```shell # In a namespace kubectl api-resources --namespaced=true # Not in a namespace kubectl api-resources --namespaced=false ``` {{% /capture %}} {{% capture whatsnext %}} * 了解相关内容 [创建一个新的命名空间](/docs/tasks/administer-cluster/namespaces/#creating-a-new-namespace). * 了解相关内容 [删除一个命名空间](/docs/tasks/administer-cluster/namespaces/#deleting-a-namespace). {{% /capture %}}