Label 和 Selector

发布时间 2023-03-27 22:39:01作者: Yusir-SRE

概念

Label 和 Selector 是 Kubernetes 中用于标识和选择对象的关键概念。

Label 是一组 key-value 对,可以附加到 Kubernetes 对象上,例如 Pod、Service、Deployment 等。Label 通常用来表示某个对象的属性,例如应用名称、版本号等。通过 Label,用户可以方便地对 Kubernetes 对象进行分类和筛选。

Selector 是一种筛选器,用于根据 Label 选择 Kubernetes 对象。用户可以使用 Selector 从 Kubernetes 集群中查找符合特定标准的对象。例如,用户可以使用 Selector 查询所有具有特定 Label 的 Pod 或 Service。

使用说明

  1. 添加一个label
[root@k8s-master01 ~]$ kubectl label node k8s-node01 k8s-node02 my-label=set
  1. 查看label
#查看所有node的label
[root@k8s-master01 ~]$ kubectl get node   --show-labels
NAME           STATUS   ROLES    AGE   VERSION    LABELS
k8s-master01   Ready    <none>   89d   v1.20.15   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-master01,kubernetes.io/os=linux,node.kubernetes.io/node=
k8s-master02   Ready    <none>   89d   v1.20.15   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-master02,kubernetes.io/os=linux,node.kubernetes.io/node=
k8s-master03   Ready    <none>   89d   v1.20.15   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-master03,kubernetes.io/os=linux,node.kubernetes.io/node=
k8s-node01     Ready    <none>   89d   v1.20.15   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node01,kubernetes.io/os=linux,my-label=set,node.kubernetes.io/node=
k8s-node02     Ready    <none>   89d   v1.20.15   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node02,kubernetes.io/os=linux,my-label=daemonset,node.kubernetes.io/node=

#指定节点查看
[root@k8s-master01 ~]$ kubectl get node  -l my-label=set --show-labels|grep my-label
k8s-node01   Ready    <none>   89d   v1.20.15   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node01,kubernetes.io/os=linux,my-label=set,node.kubernetes.io/node=

#批量指定标签查看(label不等于sds跟label等于app跟set的)
[root@k8s-master01 ~]$ kubectl get node -l 'my-label!=sds, my-label in (app, set) '
NAME           STATUS   ROLES    AGE   VERSION
k8s-master03   Ready    <none>   89d   v1.20.15
k8s-node01     Ready    <none>   89d   v1.20.15
  1. 修改label
#指定节点修改
[root@k8s-master01 ~]$ kubectl label node k8s-node01 my-label=app --overwrite
node/k8s-node01 labeled
[root@k8s-master01 ~]$ kubectl get node  -l my-label=app --show-labels|grep my-label
k8s-node01   Ready    <none>   89d   v1.20.15   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node01,kubernetes.io/os=linux,my-label=app,node.kubernetes.io/node=

#批量修改
[root@k8s-master01 ~]$ kubectl label node -l my-label  my-label=sds --overwrite
node/k8s-node01 labeled
node/k8s-node02 labeled
You have new mail in /var/spool/mail/root
  1. 删除label
#指定节点删除
[root@k8s-master01 ~]$ kubectl label node k8s-node01  my-label-
node/k8s-node01 labeled

#批量删除
[root@k8s-master01 ~]$ kubectl label node -l my-label my-label-