kubernetes 资源的label(标签)

一、简介

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 node
NAME                        STATUS   ROLES            AGE   VERSION
uat-k8s-node1               Ready    <none>           89m   v1.18.8
uat-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 node
NAME                        STATUS   ROLES            AGE   VERSION
uat-k8s-node1               Ready    worker           89m   v1.18.8
uat-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 node
NAME                        STATUS   ROLES            AGE   VERSION
uat-k8s-node1               Ready    work,worker1     89m   v1.18.8
uat-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 node
NAME                        STATUS   ROLES            AGE   VERSION
uat-k8s-node1               Ready    work             89m   v1.18.8
uat-k8s-master01            Ready    master           45h   v1.18.6

2.2、Node添加label

# 查看所有node 标签
[root@mayi-ops ~]# kubectl get nodes --show-labels
NAME               STATUS   ROLES    AGE    VERSION   LABELS
uat-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=ssdnode
node/uat-k8s-node1 labeled
[root@mayi-ops ~]# kubectl get nodes --show-labels
NAME               STATUS   ROLES    AGE    VERSION   LABELS
uat-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-labels
NAME               STATUS   ROLES    AGE    VERSION   LABELS
uat-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/v1
kind: Deployment
metadata:
  name: nginx
  ****labels:
    app: nginx
spec:
  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: v1
kind: Service
metadata:
name: nginx
  labels:
    app: nginx
spec:
  ports:  
    - port: 80
      name: nginx
      protocol: TCP
      targetPort: 80
  selector:
    app: nginx   #根据app标签关联pod

[root@mayi-ops ~]#  kubectl get pod -o wide
NAME                                      READY   STATUS    RESTARTS   AGE   IP              NODE             NOMINATED NODE   READINESS GATES
nginx-7bf8bf99d9-b4g5v                    1/1     Running   0          38s   10.100.59.16    uat-k8s-node1    <none>           <none>

三、Pod的label及使用

3.1、常用命令

# 查看pod的标签
[root@mayi-ops ~]# kubectl get pods --show-labels
NAME                                      READY   STATUS    RESTARTS   AGE   LABELS
nginx-7bf8bf99d9-b4g5v                    1/1     Running   0          14m   app=nginx,pod-template-hash=7bf8bf99d9

#指定标签查询资源
[root@mayi-ops ~]# kubectl get pods -l app=nginx
NAME                     READY   STATUS    RESTARTS   AGE
nginx-7bf8bf99d9-b4g5v   1/1     Running   0          13m
# 指定标签查询资源,并显示标签信息
[root@mayi-ops ~]# kubectl get pods -l app=nginx --show-labels
NAME                     READY   STATUS    RESTARTS   AGE   LABELS
nginx-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=nginx
NAME                         READY   STATUS    RESTARTS   AGE
pod/nginx-7bf8bf99d9-b4g5v   1/1     Running   0          22m

NAME            TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
service/nginx   ClusterIP   10.99.117.68   <none>        80/TCP    2m15s

#根据Label删除资源
[root@mayi-ops ~]# kubectl delete pod,svc -l app=nginx
pod "nginx-7bf8bf99d9-b4g5v" deleted
service "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

举报
评论 0