英文地址:https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/

Namespaces


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

什么时候使用Multiple Namespaces


Namespaces被用来在一个拥有多个团队或多个项目的很多用户的环境中使用。对于只有几十个用户的集群来讲,你根本就无需创建或考虑使用namespace。当你需要使用namespaces提供的特性的时候,再开始使用namespaces。

命名空间为names提供了作用域(scope)。同一命名空间内的资源的名字必须唯一,但在多个命名空间内则不必如此。

命名空间是一种在多用户之间将集群资源进行隔离的手段。

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

仅仅为了隔离不同的资源,如同一应用的不同版本,这是不必要的。此时,你可以使用labels来区分这些同一命名空间内的资源。

使用Namespaces


关于命名空间的创建和删除,见Admin Guide documentation for namespaces

查看命名空间

你可以使用如下命令来列出集群中的当前的命名空间:

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

Kubernetes在启动时,会初始化下面的3个命名空间:

  • default:没有指定命名空间的对象的默认命名空间
  • kube-system:kubernetes系统创建的对象
  • kube-public:该命名空间会自动创建,且对所有用户可见(包括没有认证的用户)。该命名空间主要为在整个集群中都可以使用的资源而保留的(考虑到在某些情况下,一些资源应该被整个集群可见)。这仅仅是一种惯例,而非约束。

为请求设置命名空间

暂时地设定一个请求的命名空间,使用--namespace参数。

例如:

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

为请求设置默认命名空间

你可以为同一个Context下,设置接下来的kubelet命令全部都使用某一种命名空间:

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

Namespaces和DNS


当你创建了一个Service,它会创建一个与之相应的DNS entry。该entry的格式如<service-name>.<namespace-name>.svc.cluster.local,这表示:如果一个容器仅仅使用<service-name>,它会解析到一个namespace中的service。当你在多命名空间中(如开发、Staging、生产)使用相同的配置的时候就非常有用。如果你想跨命名空间进行访问,你必须使用fully qualified domain name (FQDN)。

并不是所有的对象都在Namespace中


大多数Kubernetes资源(如pods、services、replication controller等)都在命名空间的管理范畴。但命名空间资源自身并不在命名空间中。还有一些低级别的资源,如Nodes和PV等,并不属于任何命名空间。事件是一种例外:它们可能有命名空间,也可能没有,取决于事件是什么样的事件。

results matching ""

    No results matching ""