Dawn's Blogs

分享技术 记录成长

0%

Kubernetes学习 (4) Kubernetes对象之命名空间和注解

命名空间

在 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
2
3
4
metadata:
annotations:
key1: value1
key2: value2