Label 和 Selector
概念
Label 和 Selector 是 Kubernetes 中用于标识和选择对象的关键概念。
Label 是一组 key-value 对,可以附加到 Kubernetes 对象上,例如 Pod、Service、Deployment 等。Label 通常用来表示某个对象的属性,例如应用名称、版本号等。通过 Label,用户可以方便地对 Kubernetes 对象进行分类和筛选。
Selector 是一种筛选器,用于根据 Label 选择 Kubernetes 对象。用户可以使用 Selector 从 Kubernetes 集群中查找符合特定标准的对象。例如,用户可以使用 Selector 查询所有具有特定 Label 的 Pod 或 Service。
使用说明
- 添加一个label
[root@k8s-master01 ~]$ kubectl label node k8s-node01 k8s-node02 my-label=set
- 查看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
- 修改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
- 删除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-