• Namespace(命名空间)
    • 使用多个Namespace的场景
    • 使用Namespace
      • 查看Namespace
      • 为请求设置Namespace
      • 设置Namespace首选项
    • Namespace和DNS
    • 并非所有对象都在Namespace中

    Namespace(命名空间)

    Kubernetes支持在同一物理集群中创建多个虚拟集群。 这些虚拟集群被称为Namespace。

    使用多个Namespace的场景

    Namespace旨在用于这种环境:有许多的用户,这些用户分布在多个团队/项目中。对于只有几个或几十个用户的集群,您根本不需要创建或考虑使用Namespace。 当您需要使用Namespace提供的功能时,再考虑使用Namespace。

    Namespace为Name(名称)提供了范围。在Namespace中,资源的名称必须唯一,但不能跨Namespace。

    Namespace是一种在多种用途之间划分集群资源的方法(通过 resource quota )。

    在未来的Kubernetes版本中,同一Namespace中的对象默认有相同的访问控制策略。

    没有必要使用多个Namespace来分隔稍微不同的资源,例如同一软件的不同版本,可使用 labels 来区分同一Namespace中的资源。

    使用Namespace

    Namespace的创建和删除在 Admin Guide documentation for namespaces 有描述。

    查看Namespace

    可使用如下命令列出集群中当前的Namespace:

    1. $ kubectl get namespaces
    2. NAME STATUS AGE
    3. default Active 1d
    4. kube-system Active 1d

    Kubernetes初始有两个Namespace:

    • default :对于没有其他Namespace的对象的默认Namespace
    • kube-system :由Kubernetes系统所创建的对象的Namespace

    为请求设置Namespace

    要临时设置请求的Namespace,可使用--namespace 标志。

    例如:

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

    设置Namespace首选项

    可在上下文中永久保存所有后续kubectl 命令的Namespace。

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

    Namespace和DNS

    当你创建 Service 时,会创建一个相应的 DNS entry 。此条目的形式为<service-name>.<namespace-name>.svc.cluster.local ,这意味着如果容器只使用<service-name> ,则它将解析为Namespace本地的服务。 这对在多个Namespace(例如Development、Staging以及Production)中使用相同的配置的场景非常有用。 如果要跨越Namespace,请使用完全限定域名(FQDN)。

    译者按:FQDN是fully qualified domain name的缩写,即:完全限定域名

    并非所有对象都在Namespace中

    大多数Kubernetes资源(例如:Pod、Service、Replication Controllers等)都在某些Namespace中。但Namespace资源本身并不在Namespace中。低级资源(例如: nodes 和persistentVolumes)也不在任何Namespace中。事件是一个例外:它们可能有也可能没有Namespace,具体取决于事件的对象。