講述標(biāo)簽和標(biāo)簽選擇器相關(guān)知識(shí)门扇,包括定義距糖、如何使用標(biāo)簽和標(biāo)簽選擇
器敛惊,不同類型的標(biāo)簽選擇器等
? 使用標(biāo)簽標(biāo)注Kubernetes對(duì)象
? 使用標(biāo)簽選擇器篩選kubernetes對(duì)象
? 區(qū)別不同類型的標(biāo)簽選擇器
目錄
1.標(biāo)簽(Label)
2.標(biāo)簽選擇器(Label Selector)
1.標(biāo)簽
1.1 label
- 標(biāo)簽(Label)是附在kubernetes對(duì) 象(如pod称簿,deployment等)上的鍵
值對(duì)(key-value)丰歌,可以在創(chuàng)建時(shí)指定,也可以在創(chuàng)建后指定报辱。 - Label的值本身不具備具體含義与殃,但可以通過label來篩選對(duì)象特定的子集,
便于管理。 - 每一個(gè)對(duì)象可以有多個(gè)標(biāo)簽幅疼。
metadata:
annotations:
deployment.kubernetes.io/revision: "1"
creationTimestamp: "2022-01-28T02:12:00Z"
generation: 2
labels: <======
app: mydep
name: mydep
1.2 動(dòng)機(jī)
根據(jù)標(biāo)簽進(jìn)行篩選比如米奸,將所有nginx 的pod 進(jìn)行升級(jí),或刪除爽篷。所有xxx日建立的pod 進(jìn)行回收等等
1.3 標(biāo)簽的語(yǔ)法
- 標(biāo)簽由一組鍵值對(duì)構(gòu)成悴晰。
- Label key的組成:
? Key值必須是唯一的
? 不得超過63個(gè)字符
? 可以使用前綴,使用/分隔逐工,前綴必須是DNS子域铡溪,不得超過253個(gè)字符,系統(tǒng)中的自動(dòng)化組件創(chuàng)建的label必須指定前綴泪喊,kubernetes.io/由kubernetes保留
? 起始必須是字母(大小寫都可以)或數(shù)字棕硫,中間可以有連字符、下劃線和點(diǎn) - Label value的組成:
? 不得超過63個(gè)字符
? 起始必須是字母(大小寫都可以)或數(shù)字袒啼,中間可以有連字符饲帅、下劃線和點(diǎn)
1.4 創(chuàng)建時(shí)指定標(biāo)簽
- labelpod.yaml文件創(chuàng)建一個(gè)pod。
-
在創(chuàng)建時(shí)指定兩個(gè)label
? App:busybox
? Version:new
1.5 查看Label
通過命令—show-labels可以查看指定對(duì)象的所有l(wèi)abel
[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指令在已創(chuàng)建的對(duì)象上添加標(biāo)簽
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.標(biāo)簽選擇器(Label Selector)
2.1 標(biāo)簽選擇器 (Labels Selectors)
- 標(biāo)簽不具備唯一性瘤泪,在通常情況下灶泵,多個(gè)不同的對(duì)象有著相同的標(biāo)簽
- 通過標(biāo)簽選擇器,用戶或客戶端可以指定批量的對(duì)象進(jìn)行操作对途。標(biāo)簽選擇器也是
kubernetes的核心分組方式 - 目前支持兩種標(biāo)簽選擇器赦邻,基于等值的(equality-based)和基于集合的(set-based)
2.2 基于等值的標(biāo)簽選擇器
- Equality-based標(biāo)簽選擇器允許用標(biāo)簽的key和values過濾。有三種運(yùn)算符可以使用实檀,分別是“=”惶洲,“==”和“!=”膳犹。前兩種運(yùn)算符同義恬吕,代表相等,后一種代表不相等须床。
? 查看有特定標(biāo)簽的對(duì)象
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
? 查看不包括特定標(biāo)簽的對(duì)象
[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 基于集合的標(biāo)簽選擇器
Set-based 的標(biāo)簽條件允許用一組value來過濾key铐料。支持三種操作符: in , notin和exists(僅針對(duì)于key符號(hào))
environment in (production, qa)
tier notin (frontend, backend)
partition
!partition
兩種標(biāo)簽選擇器也可以混用
partition in (customerA, customerB),environment!=qa
2.4 標(biāo)簽選擇器常用命令
- 查看對(duì)象的清單時(shí)豺旬,可以選擇使用-L命令查看標(biāo)簽钠惩,或使用-l命令篩選對(duì)象。
- 查看pod族阅,并顯示app標(biāo)簽的值
[root@k8s-master runfile]# kubectl get pod -L app
NAME READY STATUS RESTARTS AGE APP
mypod 2/2 Running 0 19s nginx
- 篩選pod中標(biāo)簽為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 將節(jié)點(diǎn)打上標(biāo)簽
[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=