一、簡介
label是標簽的意思,一對 key/value ,被關(guān)聯(lián)到對象上,k8s中的資源對象大都可以打上標簽,如Node、Pod、Service 等
一個資源可以綁定任意多個label,k8s 通過 Label 可實現(xiàn)多維度的資源分組管理,后續(xù)可通過 Label Selector 查詢和篩選擁有某些 Label 的資源對象
二、Nodes添加刪除label及使用
2.1、node節(jié)點ROLES屬性(特殊標簽)
在查看nodes信息時,ROLES標記了一些節(jié)點的身份屬性,這個ROLES身份屬性其實可以理解成給nodes節(jié)點打了個特殊標簽。
#roles顯示為node[root@mayi-ops ~]# kubectl get nodeNAME STATUS ROLES AGE VERSIONuat-k8s-node1 Ready 89m v1.18.8uat-k8s-master01 Ready master 45h v1.18.6#添加刪除ROLES標記,命令使用格式:kubectl label nodes 節(jié)點名字 node-role.kubernetes.io/ROLES屬性名稱=或-最后面的=號表示在原來ROLES基礎上再增加一個,-號就表示刪除某個ROLES//例如, 首次添加ROLES[root@mayi-ops ~]# kubectl label nodes uat-k8s-node1 node-role.kubernetes.io/work=[root@mayi-ops ~]# kubectl get nodeNAME STATUS ROLES AGE VERSIONuat-k8s-node1 Ready worker 89m v1.18.8uat-k8s-master01 Ready master 45h v1.18.6#增加ROLES[root@mayi-ops ~]# kubectl label nodes uat-k8s-node1 node-role.kubernetes.io/work1=[root@mayi-ops ~]# kubectl get nodeNAME STATUS ROLES AGE VERSIONuat-k8s-node1 Ready work,worker1 89m v1.18.8uat-k8s-master01 Ready master 45h v1.18.6#刪除label[root@mayi-ops ~]# kubectl lable node k8s-node1 node-role.kubernetes.io/work1-[root@mayi-ops ~]# kubectl get nodeNAME STATUS ROLES AGE VERSIONuat-k8s-node1 Ready work 89m v1.18.8uat-k8s-master01 Ready master 45h v1.18.6
2.2、Node添加label
# 查看所有node 標簽[root@mayi-ops ~]# kubectl get nodes –show-labelsNAME STATUS ROLES AGE VERSION LABELSuat-k8s-master01 Ready master 495d v1.16.0 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=uat-k8s-master01,kubernetes.io/os=linux,node-role.kubernetes.io/master=uat-k8s-node1 Ready work 495d v1.16.0 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=uat-k8s-node1,kubernetes.io/os=linux,kubernetes=true,node-role.kubernetes.io/work=#添加標簽[root@mayi-ops ~]# kubectl label nodes node01 disktype=ssdnodenode/uat-k8s-node1 labeled[root@mayi-ops ~]# kubectl get nodes –show-labelsNAME STATUS ROLES AGE VERSION LABELSuat-k8s-master01 Ready master 495d v1.16.0 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=uat-k8s-master01,kubernetes.io/os=linux,node-role.kubernetes.io/master=uat-k8s-node1 Ready work 495d v1.16.0 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,disktype=ssdnode,kubernetes.io/arch=amd64,kubernetes.io/hostname=uat-k8s-node1,kubernetes.io/os=linux,kubernetes=true,node-role.kubernetes.io/work=# 刪除標簽[root@mayi-ops ~]# kubectl label nodes uat-k8s-node1 disktype-node/uat-k8s-node1 labeled[root@mayi-ops ~]# kubectl get nodes –show-labelsNAME STATUS ROLES AGE VERSION LABELSuat-k8s-master01 Ready master 495d v1.16.0 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=uat-k8s-master01,kubernetes.io/os=linux,node-role.kubernetes.io/master=uat-k8s-node1 Ready work 495d v1.16.0 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=uat-k8s-node1,kubernetes.io/os=linux,kubernetes=true,node-role.kubernetes.io/work=
2.3、根據(jù)Node label標簽調(diào)度pod
# 比如可以將Nginx或者Mysql調(diào)度到硬盤為SSD的機器上[root@mayi-ops ~]# vim nginx.yaml—apiVersion: apps/v1kind: Deploymentmetadata: name: nginx ****labels: app: nginxspec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: #選擇標簽 nodeSelector: #key1: val1 #key2: val2 disktype: ssdnode containers: – name: nginx image: nginx:latest ports: – containerPort: 80—apiVersion: v1kind: Servicemetadata:name: nginx labels: app: nginxspec: ports: – port: 80 name: nginx protocol: TCP targetPort: 80 selector: app: nginx #根據(jù)app標簽關(guān)聯(lián)pod[root@mayi-ops ~]# kubectl get pod -o wideNAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATESnginx-7bf8bf99d9-b4g5v 1/1 Running 0 38s 10.100.59.16 uat-k8s-node1
三、Pod的label及使用
3.1、常用命令
# 查看pod的標簽[root@mayi-ops ~]# kubectl get pods –show-labelsNAME READY STATUS RESTARTS AGE LABELSnginx-7bf8bf99d9-b4g5v 1/1 Running 0 14m app=nginx,pod-template-hash=7bf8bf99d9#指定標簽查詢資源[root@mayi-ops ~]# kubectl get pods -l app=nginxNAME READY STATUS RESTARTS AGEnginx-7bf8bf99d9-b4g5v 1/1 Running 0 13m# 指定標簽查詢資源,并顯示標簽信息[root@mayi-ops ~]# kubectl get pods -l app=nginx –show-labelsNAME READY STATUS RESTARTS AGE LABELSnginx-7bf8bf99d9-b4g5v 1/1 Running 0 14m app=nginx,pod-template-hash=7bf8bf99d9#根據(jù)label 查看pod,svc資源[root@mayi-ops ~]# kubectl get pod,svc -l app=nginxNAME READY STATUS RESTARTS AGEpod/nginx-7bf8bf99d9-b4g5v 1/1 Running 0 22mNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEservice/nginx ClusterIP 10.99.117.68 80/TCP 2m15s#根據(jù)Label刪除資源[root@mayi-ops ~]# kubectl delete pod,svc -l app=nginxpod “nginx-7bf8bf99d9-b4g5v” deletedservice “nginx” deleted
四、Service 標簽使用
4.1、常用命令
# 查看指定service 選擇的標簽[root@mayi-ops ~]# kubectl get service nginx –show-labels#通過yaml 方式查看service選擇的標簽[root@mayi-ops ~]# kubectl get service nginx -o yaml|grep -A 2 selector selector: app: nginx sessionAffinity: None