kubernetes 基础 -- 2.5 kubernetes 资源对象之 Label 和 Annotation

文章目录

  • 概念
    • Label
    • Annotation
    • Label Selector
  • 展示
  • 应用

概念

Label

Label(标签)是 Kubernetes 系统中另外一个核心概念。一个 Label 是一个 key=value 的键值对,其中 key 与 value 由用户自己指定。
Label 可以被附加到各种资源对象上,例如Node、Pod、Service、RC 等,一个资源对象可以定义任意数量的 Label,同一个 Label 也可以被添加到任意数量的资源对象上。Label 通常在资源对象定义时确定,也可以在对象创建后动态添加或者删除。

Annotation

Annotation(注解)与 Label 类似,也使用 key/value 键值对的形式进行定义。

不同的是 Label 具有严格的命名规则,它定义的是 Kubernetes 对象的元数据(Metadata),并且用于Label Selector。Annotation则是用户任意定义的附加信息,以便于外部工具查找。在很多时候,Kubernetes 的模块自身会通过 Annotation 标记资源对象的一些特殊信息。

Label Selector

通过 label selector,客户端/用户可以指定一个对象集合,通过 label selector 对对象的集合进行操作;
Label selector 有两种类型:

  • equality-based:可以使用=、==、!=操作符,可以使用逗号分隔多个表达式
  • set-based :可以使用 in、notin、! 操作符,另外还可以没有操作符,直接写出某个 label的 key,表示过滤有某个 key 的object 而不管该 key 的 value 是何值,!表示没有该 label 的object。

展示

查看 master node 的 Label 和 Annotation

$ kubectl describe node master
Name:               master
Roles:              control-plane,master
Labels:             beta.kubernetes.io/arch=amd64
                    beta.kubernetes.io/os=linux
                    kubernetes.io/arch=amd64
                    kubernetes.io/hostname=master
                    kubernetes.io/os=linux
                    node-role.kubernetes.io/control-plane=
                    node-role.kubernetes.io/master=
                    node.kubernetes.io/exclude-from-external-load-balancers=
Annotations:        flannel.alpha.coreos.com/backend-data: {"VNI":1,"VtepMAC":"a2:35:ae:6c:e7:8d"}
                    flannel.alpha.coreos.com/backend-type: vxlan
                    flannel.alpha.coreos.com/kube-subnet-manager: true
                    flannel.alpha.coreos.com/public-ip: 1.2.3.215
                    kubeadm.alpha.kubernetes.io/cri-socket: /var/run/dockershim.sock
                    node.alpha.kubernetes.io/ttl: 0
                    volumes.kubernetes.io/controller-managed-attach-detach: true

例如 Label 信息显示 hostname,平台,node 角色;
Annotations 信息显示 flannel 的 backend-data,backend-type 和 public-ip,使用的 cri-socket。

通过 label 过滤
查看角色为 master 且系统为 linux 的节点。

$ kubectl get node -l node-role.kubernetes.io/master=,kubernetes.io/os=linux
NAME     STATUS   ROLES                  AGE   VERSION
master   Ready    control-plane,master   8d    v1.22.3

应用

kube-controller 进程通过在资源对象 RC上定义的 Label Selector 来筛选要监控的 Pod 副本数量,使 Pod 副本数量始终符合预期。
kube-proxy 进程通过 Service 的 Label Selector 来选择对应的
Pod,自动建立每个 Service 到对应 Pod 的请求转发路由表,从而实现 Service 的智能负载均衡机制。

通过对某些 Node 定义特定的 Label,并且在 Pod 定义文件中使用 NodeSelector 这种标签调度策略,kube-scheduler 进程可以实现 Pod 定向调度的特性。

你可能感兴趣的:(Kubernetes,kubernetes,kubernetes)