命名空间
在 k8s 中,命名空间(Namespace)提供一种机制,将同一集群中的资源划分为相互隔离的组。 同一名字空间内的资源名称要唯一,但跨名字空间时没有这个要求。名字空间作用域仅针对带有名字空间的对象,作用域对集群范围的对象不适用。
大多数 Kubernetes 资源(如 Pod、Service 等)都在某些命名空间中,但是名字空间资源本身并不在名字空间中。
而且底层资源,如节点和持久化卷,不属于任何命名空间。
查看 Kubernetes 资源哪些在命名空间中,哪些不在:
1
2
3
4
5 # 位于名字空间中的资源
kubectl api-resources --namespaced=true
# 不在名字空间中的资源
kubectl api-resources --namespaced=false
初始命名空间
Kubernetes 启动时会创建四个初始命名空间:
- default:默认的命名空间,以便无需创建新的命名空间就可以使用集群。
- kube-node-lease:包含用于与各个节点关联的租约对象。节点租约允许 Kubelet 发送心跳, 由此控制面能够检测到节点故障。
- kube-public:所有的客户端都可以读取该命名空间。这个命名空间主要预留为集群使用,以便某些资源需要在整个集群中可见可读。
- kube-system:用于 Kubernetes 系统创建的对象。
命名空间和 DNS
在创建一个服务时,Kubernetes 会创建一个相应的 DNS 条目。
条目的内容为 <服务名称>.<名字空间名称>.svc.cluster.local
,这意味着对于本地命名空间的服务,可以只使用 <服务名称>
就可以访问到。而对于不同的命名空间,则需要使用使用完全限定域名(FQDN)。
注解
使用 Kubernetes 注解为对象附加任意的非标识的元数据。客户端程序能够获取这些元数据信息。
标签可以用来选择对象和查找满足某些条件的对象集合。 相反,注解不用于标识和选择对象。
1 | metadata: |