名称空间(个人翻译)

使用Kubernetes对象3---名称空间(Namespaces)

Kubernetes支持由同一物理集群支持的多个虚拟集群。这些虚拟机群被称作名称空间(Namespaces)。

何时使用多个名称空间

名称空间为拥有多个团队或多个项目的用户的环境所准备。对于只有数十个用户的集群,你不需要创建和考虑名称空间。在需要名称空间的功能时才使用它。

名称空间提供名称的作用域。资源的名称在一个名称空间里必须是唯一的,但在多个名称空间之间不用。

名称空间是在众多用户中分配资源的一种方法(通过资源指标resource quota)。

在未来的Kubernetes版本中,同一名称空间内的对象将会默认拥有相同的访问控制策略。

仅仅区分由微小不同的资源的话没有必要使用多个名称空间,比如相同软件的多个版本:使用labels来区分在同一个名称空间内的资源。

使用名称空间

名称空间的创建和删除在 名称空间管理指导文档(Admin Guide documentation for namespaces)中介绍。

查看名称空间

你可以在集群中通过下面的方式列举当前的名称空间:

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

Kubernetes启动时自带三个最初的名称空间:

  • 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

设置名称空间偏好

你可以永久保存名称空间,以适用于当前环境下的所有后续kubectl命令。

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

名称空间和DNS

当你创建一个服务(Service),会创建一个对应的DNS实体(DNS entry)。该实体的格式是<service-name>.<namespace-name>.svc.cluster.local, 这意味着如果容器仅仅适用<service-name>, 它会指向本地名称空间的服务。这对使用多个名称空间中的相同配置(如Development, Staging和Production)是有帮助的。如果你想要跨名称空间访问,你需要使用完整合格的域名(FQDN)。

不是所有对象都存在名称空间中

大部分Kubernetes资源(如 pods, services, replication controllers等等)都存在于名称空间中。但名称空间资源本身并不存在于名称空间中。并且低层次的资源,如nodes和persistentVolumes不在任何名称空间中。

可以用下面的方式查看哪些Kubernetes资源不在名称空间中:

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

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

猜你喜欢

转载自blog.csdn.net/u014637098/article/details/88795814
今日推荐