讲述标签和标签选择器相关知识,包括定义、如何使用标签和标签选择
器,不同类型的标签选择器等
使用标签标注Kubernetes对象
使用标签选择器筛选kubernetes对象
区别不同类型的标签选择器
目录
1.标签(Label)
2.标签选择器(Label Selector)
1.标签
1.1 label
- 标签(Label)是附在kubernetes对 象(如pod,deployment等)上的键
值对(key-value),可以在创建时指定,也可以在创建后指定。 - Label的值本身不具备具体含义,但可以通过label来筛选对象特定的子集,
便于管理。 - 每一个对象可以有多个标签。
metadata:
annotations:
deployment.kubernetes.io/revision: "1"
creationTimestamp: "2022-01-28T02:12:00Z"
generation: 2
labels: <======
app: mydep
name: mydep
1.2 动机
根据标签进行筛选比如,将所有nginx 的pod 进行升级,或删除。所有xxx日建立的pod 进行回收等等
image.png
1.3 标签的语法
- 标签由一组键值对构成。
- Label key的组成:
Key值必须是唯一的
不得超过63个字符
可以使用前缀,使用/分隔,前缀必须是DNS子域,不得超过253个字符,系统中的自动化组件创建的label必须指定前缀,kubernetes.io/由kubernetes保留
起始必须是字母(大小写都可以)或数字,中间可以有连字符、下划线和点 - Label value的组成:
不得超过63个字符
起始必须是字母(大小写都可以)或数字,中间可以有连字符、下划线和点
1.4 创建时指定标签
- labelpod.yaml文件创建一个pod。
-
在创建时指定两个label
App:busybox
Version:new
image.png
1.5 查看Label
通过命令—show-labels可以查看指定对象的所有label
[root@k8s-master ~]# k get pod --show-labels
NAME READY STATUS RESTARTS AGE LABELS
myapp-pod 1/1 Running 21 12d app=myapp
mydep-65bbdb4c9f-bvwmp 1/1 Running 4 13d app=mydep,pod-template-hash=65bbdb4c9f
mydep-65bbdb4c9f-sswdr 1/1 Running 5 13d app=mydep,pod-template-hash=65bbdb4c9f
mydep-65bbdb4c9f-swgvz 1/1 Running 4 13d app=mydep,pod-template-hash=65bbdb4c9f
mypod 0/1 ImagePullBackOff 0 12d run=mypod
1.6 同样可以使用label指令在已创建的对象上添加标签
k label pod lablepod-fln79 time=2019
[root@k8s-master tmp]# k get pod --show-labels
NAME READY STATUS RESTARTS AGE LABELS
lablepod-fln79 1/1 Running 0 21s controller-uid=a155731a-8a4a-11ec-99fd-000c298dbe7d,job-name=lablepod
myapp-pod 1/1 Running 21 12d app=myapp
mydep-65bbdb4c9f-bvwmp 1/1 Running 4 13d app=mydep,pod-template-hash=65bbdb4c9f
mydep-65bbdb4c9f-sswdr 1/1 Running 5 13d app=mydep,pod-template-hash=65bbdb4c9f
mydep-65bbdb4c9f-swgvz 1/1 Running 4 13d app=mydep,pod-template-hash=65bbdb4c9f
mypod 0/1 ImagePullBackOff 0 12d run=mypod
[root@k8s-master tmp]# k label pod lablepod-fln79 time=2019
pod/lablepod-fln79 labeled
[root@k8s-master tmp]# k get pod --show-labels
NAME READY STATUS RESTARTS AGE LABELS
lablepod-fln79 1/1 Running 0 82s controller-uid=a155731a-8a4a-11ec-99fd-000c298dbe7d,job-name=lablepod,time=2019
myapp-pod 1/1 Running 21 12d app=myapp
mydep-65bbdb4c9f-bvwmp 1/1 Running 4 13d app=mydep,pod-template-hash=65bbdb4c9f
mydep-65bbdb4c9f-sswdr 1/1 Running 5 13d app=mydep,pod-template-hash=65bbdb4c9f
mydep-65bbdb4c9f-swgvz 1/1 Running 4 13d app=mydep,pod-template-hash=65bbdb4c9f
mypod 0/1 ImagePullBackOff 0 12d run=mypod
2.标签选择器(Label Selector)
2.1 标签选择器 (Labels Selectors)
- 标签不具备唯一性,在通常情况下,多个不同的对象有着相同的标签
- 通过标签选择器,用户或客户端可以指定批量的对象进行操作。标签选择器也是
kubernetes的核心分组方式 - 目前支持两种标签选择器,基于等值的(equality-based)和基于集合的(set-based)
2.2 基于等值的标签选择器
- Equality-based标签选择器允许用标签的key和values过滤。有三种运算符可以使用,分别是“=”,“==”和“!=”。前两种运算符同义,代表相等,后一种代表不相等。
查看有特定标签的对象
k get pod -l app=mydep --show-labels
[root@k8s-master tmp]# k get pod --show-labels
NAME READY STATUS RESTARTS AGE LABELS
lablepod-fln79 1/1 Running 0 5m47s controller-uid=a155731a-8a4a-11ec-99fd-000c298dbe7d,job-name=lablepod,time=2019
myapp-pod 1/1 Running 21 12d app=myapp
mydep-65bbdb4c9f-bvwmp 1/1 Running 4 13d app=mydep,pod-template-hash=65bbdb4c9f
mydep-65bbdb4c9f-sswdr 1/1 Running 5 13d app=mydep,pod-template-hash=65bbdb4c9f
mydep-65bbdb4c9f-swgvz 1/1 Running 4 13d app=mydep,pod-template-hash=65bbdb4c9f
mypod 0/1 ImagePullBackOff 0 12d run=mypod
[root@k8s-master tmp]# k get pod -l app=mydep --show-labels
NAME READY STATUS RESTARTS AGE LABELS
mydep-65bbdb4c9f-bvwmp 1/1 Running 4 13d app=mydep,pod-template-hash=65bbdb4c9f
mydep-65bbdb4c9f-sswdr 1/1 Running 5 13d app=mydep,pod-template-hash=65bbdb4c9f
mydep-65bbdb4c9f-swgvz 1/1 Running 4 13d app=mydep,pod-template-hash=65bbdb4c9f
查看不包括特定标签的对象
[root@k8s-master tmp]# k get pod -l app!=mydep --show-labels
NAME READY STATUS RESTARTS AGE LABELS
lablepod-fln79 1/1 Running 0 7m57s controller-uid=a155731a-8a4a-11ec-99fd-000c298dbe7d,job-name=lablepod,time=2019
myapp-pod 1/1 Running 21 12d app=myapp
mypod 0/1 ImagePullBackOff 0 12d run=mypod
2.3 基于集合的标签选择器
Set-based 的标签条件允许用一组value来过滤key。支持三种操作符: in , notin和exists(仅针对于key符号)
environment in (production, qa)
tier notin (frontend, backend)
partition
!partition
两种标签选择器也可以混用
partition in (customerA, customerB),environment!=qa
2.4 标签选择器常用命令
- 查看对象的清单时,可以选择使用-L命令查看标签,或使用-l命令筛选对象。
- 查看pod,并显示app标签的值
[root@k8s-master runfile]# kubectl get pod -L app
NAME READY STATUS RESTARTS AGE APP
mypod 2/2 Running 0 19s nginx
- 筛选pod中标签为app=nginx的pod
[root@k8s-master runfile]# kubectl get pod -l app=nginx
NAME READY STATUS RESTARTS AGE
mypod 2/2 Running 0 3m1s
2.5 将节点打上标签
[root@k8s-master tmp]# k get nodes --show-labels
NAME STATUS ROLES AGE VERSION LABELS
k8s-master Ready master 14d v1.14.1 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-master,kubernetes.io/os=linux,node-role.kubernetes.io/master=
k8s-node1 Ready <none> 14d v1.14.1 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node1,kubernetes.io/os=linux
k8s-node2 Ready <none> 14d v1.14.1 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node2,kubernetes.io/os=linux
[root@k8s-master tmp]# k label nodes k8s-node1 node-role.kubernetes.io/node=
node/k8s-node1 labeled
[root@k8s-master tmp]# k get nodes --show-labels
NAME STATUS ROLES AGE VERSION LABELS
k8s-master Ready master 14d v1.14.1 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-master,kubernetes.io/os=linux,node-role.kubernetes.io/master=
k8s-node1 Ready node 14d v1.14.1 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node1,kubernetes.io/os=linux,node-role.kubernetes.io/node=
k8s-node2 Ready <none> 14d v1.14.1 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node2,kubernetes.io/os=linux
[root@k8s-master tmp]# k label nodes k8s-node2 node-role.kubernetes.io/node=
node/k8s-node2 labeled
[root@k8s-master tmp]# k get nodes --show-labels
NAME STATUS ROLES AGE VERSION LABELS
k8s-master Ready master 14d v1.14.1 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-master,kubernetes.io/os=linux,node-role.kubernetes.io/master=
k8s-node1 Ready node 14d v1.14.1 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node1,kubernetes.io/os=linux,node-role.kubernetes.io/node=
k8s-node2 Ready node 14d v1.14.1 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node2,kubernetes.io/os=linux,node-role.kubernetes.io/node=