一、简介
label是标签的意思,一对 key/value ,被关联到对象上,k8s中的资源对象大都可以打上标签,如Node、Pod、Service 等
一个资源可以绑定任意多个label,k8s 通过 Label 可实现多维度的资源分组管理,后续可通过 Label Selector 查询和筛选拥有某些 Label 的资源对象
二、Nodes添加删除label及使用
2.1、node节点ROLES属性(特殊标签)
在查看nodes信息时,ROLES标记了一些节点的身份属性,这个ROLES身份属性其实可以理解成给nodes节点打了个特殊标签。
#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 节点名字 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、根据Node label标签调度pod
# 比如可以将Nginx或者Mysql调度到硬盘为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 #根据app标签关联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#根据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#根据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