0%

K8s-标签

标签

k8s集群如果由大量节点组成,可将节点打上对应的标签,然后通过标签进行筛选及查看,更好的进行资源对象的相关选择与匹配

查看节点标签信息

1
2
3
4
5
[root@k8s-master01 kubernetes]# kubectl get nodes --show-labels
NAME STATUS ROLES AGE VERSION LABELS
k8s-master01 Ready control-plane,master 12h v1.21.0 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-master01,kubernetes.io/os=linux,node-role.kubernetes.io/control-plane=,node-role.kubernetes.io/master=,node.kubernetes.io/exclude-from-external-load-balancers=
k8s-node01 Ready <none> 78m v1.21.0 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node01,kubernetes.io/os=linux
k8s-node02 Ready <none> 77m v1.21.0 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node02,kubernetes.io/os=linux

设置标签

1
2
#指定为某个node添加标签
kubectl label node k8s-node02 key1=value1

截图12

1
2
#指定为某个node添加多个标签
kubectl label node k8s-node01 key1=value1 key2=value2

截图13

指定标签查询node

注意-L和-l大小写区别

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
[root@k8s-master01 kubernetes]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master01 Ready control-plane,master 12h v1.21.0
k8s-node01 Ready <none> 91m v1.21.0
k8s-node02 Ready <none> 90m v1.21.0
======================================================================

[root@k8s-master01 kubernetes]# kubectl get nodes -L key2
NAME STATUS ROLES AGE VERSION KEY2
k8s-master01 Ready control-plane,master 12h v1.21.0
k8s-node01 Ready <none> 98m v1.21.0 value2
k8s-node02 Ready <none> 98m v1.21.0

[root@k8s-master01 kubernetes]# kubectl get nodes -l key2
NAME STATUS ROLES AGE VERSION
k8s-node01 Ready <none> 100m v1.21.0
======================================================================
[root@k8s-master01 kubernetes]# kubectl get nodes -L key1,key2
NAME STATUS ROLES AGE VERSION KEY1 KEY2
k8s-master01 Ready control-plane,master 12h v1.21.0
k8s-node01 Ready <none> 98m v1.21.0 value1 value2
k8s-node02 Ready <none> 97m v1.21.0 value1

[root@k8s-master01 kubernetes]# kubectl get nodes -l key1,key2
NAME STATUS ROLES AGE VERSION
k8s-node01 Ready <none> 101m v1.21.0
================================================================================
[root@k8s-master01 kubernetes]# kubectl get nodes -L key1
NAME STATUS ROLES AGE VERSION KEY1
k8s-master01 Ready control-plane,master 12h v1.21.0
k8s-node01 Ready <none> 101m v1.21.0 value1
k8s-node02 Ready <none> 101m v1.21.0 value1

[root@k8s-master01 kubernetes]# kubectl get nodes -l key1
NAME STATUS ROLES AGE VERSION
k8s-node01 Ready <none> 102m v1.21.0
k8s-node02 Ready <none> 101m v1.21.0

修改标签

kubectl label node 节点名称 标签key=标签value --overwrite=true

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@k8s-master01 kubernetes]# kubectl get nodes -L key1,key2
NAME STATUS ROLES AGE VERSION KEY1 KEY2
k8s-master01 Ready control-plane,master 12h v1.21.0
k8s-node01 Ready <none> 103m v1.21.0 value1 value2
k8s-node02 Ready <none> 102m v1.21.0 value1

[root@k8s-master01 kubernetes]# kubectl label node k8s-node02 key1=v2 --overwrite=true
node/k8s-node02 labeled

[root@k8s-master01 kubernetes]# kubectl get nodes -L key1,key2
NAME STATUS ROLES AGE VERSION KEY1 KEY2
k8s-master01 Ready control-plane,master 12h v1.21.0
k8s-node01 Ready <none> 104m v1.21.0 value1 value2
k8s-node02 Ready <none> 103m v1.21.0 v2

删除标签

使用key加一个减号的写法来取消标签

1
kubectl label node k8s-node02 key1-

截图14

标签选择器

标签选择器主要有2类:

  • 等值关系: =, !=
  • 集合关系: KEY in (VALUE1, VALUE2……)

截图15

通过标签操作pod

  • 为pod设置label,用于控制器通过label与pod关联
  • 语法与前面学的node标签几乎一致

查看pod的标签

1
2
3
[root@k8s-master1 ~]# kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
pod-stress 1/1 Running 0 7m25s <none>

打标签

1
2
3
4
5
6
[root@k8s-master1 ~]# kubectl label pod pod-stress region=huanai zone=A env=test bussiness=game
pod/pod-stress labeled

[root@k8s-master1 ~]# kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
pod-stress 1/1 Running 0 8m54s bussiness=game,env=test,region=huanai,zone=A

通过等值关系标签查询

1
2
3
[root@k8s-master1 ~]# kubectl get pods -l zone=A
NAME READY STATUS RESTARTS AGE
pod-stress 1/1 Running 0 9m22s

通过集合关系标签查询

1
2
3
[root@k8s-master1 ~]# kubectl get pods -l "zone in (A,B,C)"
NAME READY STATUS RESTARTS AGE
pod-stress 1/1 Running 0 9m55s

删除标签后再验证

1
2
3
4
5
6
[root@k8s-master1 ~]# kubectl label pod pod-stress region- zone- env- bussiness-
pod/pod-stress labeled

[root@k8s-master1 ~]# kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
pod-stress 1/1 Running 0 16m <none>

小结:

  • pod的label与node的label操作方式几乎相同
  • node的label用于pod调度到指定label的node节点
  • pod的label用于controller关联控制的pod