Kubernetes笔记7-Kubernetes命名空间

在 Kubernetes 中,命名空间提供了一种在单个集群中隔离资源组的机制。资源名称在一个命名空间内必须是唯一的,但跨命名空间不能。基于命名空间的范围仅适用于命名空间对象(例如部署、服务等)而不适用于集群范围的对象(例如 StorageClass、节点、PersistentVolumes 等)

何时使用多个命名空间

命名空间旨在用于多个用户分布在多个团队或项目的环境中。对于拥有几到几十个用户的集群,您根本不需要创建或考虑命名空间。当您需要命名空间提供的功能时开始使用命名空间。

命名空间为名称提供了一个范围。资源名称在一个命名空间内必须是唯一的,但跨命名空间不能。命名空间不能相互嵌套,每个 Kubernetes 资源只能位于一个命名空间中。

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

不必使用多个命名空间来分隔略有不同的资源,例如同一软件的不同版本:使用 标签 区分同一命名空间内的资源。

使用命名空间

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

注意:避免使用前缀创建命名空间kube-,因为它是为 Kubernetes 系统命名空间保留的。

查看命名空间

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

kubectl get namespace

NAME              STATUS   AGE
default           Active   1d
kube-node-lease   Active   1d
kube-public       Active   1d
kube-system       Active   1d

Kubernetes 从四个初始命名空间开始:

  • default 没有其他命名空间的对象的默认命名空间
  • kube-system Kubernetes 系统创建的对象的命名空间
  • kube-public此命名空间是自动创建的,所有用户(包括未通过身份验证的用户)均可读取。此命名空间主要保留供集群使用,以防某些资源在整个集群中应公开可见和可读。这个命名空间的公共方面只是一个约定,而不是一个要求。
  • kube-node-lease该命名空间包含 与每个节点关联的Lease对象。节点租用允许 kubelet 发送 心跳,以便控制平面可以检测节点故障。

为请求设置命名空间

要为当前请求设置命名空间,请使用该--namespace标志。

例如:

kubectl run nginx --image=nginx --namespace=
kubectl get pods --namespace=

设置命名空间首选项

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

kubectl config set-context --current --namespace=
# Validate it
kubectl config view --minify | grep namespace:

命名空间和 DNS

当您创建一个服务时,它会创建一个相应的DNS 条目。此条目的形式为..svc.cluster.local,这意味着如果容器仅使用,它将解析为命名空间本地的服务。这对于跨多个命名空间(例如 Development、Staging 和 Production)使用相同的配置非常有用。如果要跨命名空间访问,则需要使用完全限定域名 (FQDN)。

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

大多数 Kubernetes 资源(例如 pod、服务、复制控制器等)都在一些命名空间中。然而,命名空间资源本身并不在命名空间中。而低级资源,如 节点和persistentVolumes,不在任何命名空间中。

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

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

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

自动贴标(Auto Labelling)

功能状态: Kubernetes 1.21 [beta]

Kubernetes 控制平面设置了一个不可变的 标签 kubernetes.io/metadata.name在所有命名空间上,前提是启用了NamespaceDefaultLabelName 功能门。标签的值是命名空间名称。

参考 kubernetes.io文档

你可能感兴趣的:(Kubernetes笔记7-Kubernetes命名空间)