欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

简单的Label居然有这么大的作用

时间:2023-06-29

Label:对k8s中各种资源进行分类、分组,添加一个具有特别属性的标签

Selector:通过一个过滤的语法进行查找到对应标签的资源

Label是k8s中一个比较重要的概念。一个Label的一个key=value的键值对,可以附加到各种资源上。

现总结后讲解:

Label的匹配规则:

name=nginx:这类是直接匹配name!=nginx:匹配标签中没有name=nginx的资源name in (A,B):匹配所有具有name=A和name=B标签的资源name not in (A):匹配所有不具有标签A的资源


通过上图可以看到:frontend通过service服务匹配到backend服务器,当service的标签是app=nginx时那么会匹配到backend的两组服务器,但是当service中筛选加上Role=backend-app时,Selector只会筛选到backend服务器组中包含这两种标签的服务器然后进行匹配。

通过下面这条命令可以看到Pod的标签:通过–show-labels参数
最后一列LABELS是Pod的标签

[root@k8s-master01 ~]# kubectl get pod --show-labels NAME READY STATUS RESTARTS AGE LABELSbusybox 1/1 Running 28 (16h ago) 9d hpa-nginx-bd88bdd8f-h8vx7 1/1 Running 0 18h app=hpa-nginx,pod-template-hash=bd88bdd8f

那么我们就可以尝试着用kubectl给Pod添加标签:从上列代码中我们是可以看到busybox是没有标签,通过下面这条命令在查看发现已经有标签app=busybox了。

[root@k8s-master01 ~]# kubectl label pod busybox app=busyboxpod/busybox labeled[root@k8s-master01 ~]# kubectl get pod --show-labels NAME READY STATUS RESTARTS AGE LABELSbusybox 1/1 Running 28 (16h ago) 9d app=busyboxhpa-nginx-bd88bdd8f-h8vx7 1/1 Running 0 18h app=hpa-nginx,pod-template-hash=bd88bdd8f

如果一个集群中Pod非常多的时候,我们就可以通过用标签筛选的方式找到想要的Pod;-A参数是查看所有的Pod,但是加上-l app=busybox后只会找到符合这个条件的Pod。

[root@k8s-master01 ~]# kubectl get pod -A -l app=busyboxNAMESPACE NAME READY STATUS RESTARTS AGEdefault busybox 1/1 Running 28 (16h ago) 9d

那么问题来了,要是我们不想要这个标签了或者说需要修改这个标签了怎么办?

删除标签:

[root@k8s-master01 ~]# kubectl label pod busybox app-pod/busybox unlabeled[root@k8s-master01 ~]# kubectl get pod --show-labels NAME READY STATUS RESTARTS AGE LABELSbusybox 1/1 Running 28 (16h ago) 9d hpa-nginx-bd88bdd8f-h8vx7 1/1 Running 0 18h app=hpa-nginx,pod-template-hash=bd88bdd8f

修改标签:可以看出标签已经是修改后的了。

[root@k8s-master01 ~]# kubectl get pod --show-labels NAME READY STATUS RESTARTS AGE LABELSbusybox 1/1 Running 28 (16h ago) 9d app=busyboxhpa-nginx-bd88bdd8f-h8vx7 1/1 Running 0 18h app=hpa-nginx,pod-template-hash=bd88bdd8f[root@k8s-master01 ~]# kubectl label pod busybox app=busybox22222 --overwrite pod/busybox labeled[root@k8s-master01 ~]# kubectl get pod --show-labels NAME READY STATUS RESTARTS AGE LABELSbusybox 1/1 Running 28 (16h ago) 9d app=busybox22222hpa-nginx-bd88bdd8f-h8vx7 1/1 Running 0 18h app=hpa-nginx,pod-template-hash=bd88bdd8f

Labels是很简单的一个东西,接下来我们看看Selector是怎么用的

我想过滤出多个条件的pod又该怎么做呢?

[root@k8s-master01 ~]# kubectl get pod -A --show-labels NAMESPACE NAME READY STATUS RESTARTS AGE LABELSdefault busybox 1/1 Running 29 (3m19s ago) 9d app=busybox22222default hpa-nginx-bd88bdd8f-h8vx7 1/1 Running 0 18h app=hpa-nginx,pod-template-hash=bd88bdd8fkube-system calico-kube-controllers-5dffd5886b-4blh6 1/1 Running 2 (2d1h ago) 9d k8s-app=calico-kube-controllers,pod-template-hash=5dffd5886bkube-system calico-node-fvbdq 1/1 Running 2 (2d1h ago) 9d controller-revision-hash=79878cdc56,k8s-app=calico-node,pod-template-generation=1kube-system calico-node-g8nqd 1/1 Running 0 9d controller-revision-hash=79878cdc56,k8s-app=calico-node,pod-template-generation=1kube-system calico-node-mdps8 1/1 Running 0 9d controller-revision-hash=79878cdc56,k8s-app=calico-node,pod-template-generation=1kube-system calico-node-nf4nt 1/1 Running 1 (4d1h ago) 9d controller-revision-hash=79878cdc56,k8s-app=calico-node,pod-template-generation=1kube-system calico-node-sq2ml 1/1 Running 1 (2d1h ago) 9d controller-revision-hash=79878cdc56,k8s-app=calico-node,pod-template-generation=1kube-system calico-typha-8445487f56-mg6p8 1/1 Running 0 9d k8s-app=calico-typha,pod-template-hash=8445487f56kube-system calico-typha-8445487f56-pxbpj 1/1 Running 1 (2d1h ago) 9d k8s-app=calico-typha,pod-template-hash=8445487f56kube-system calico-typha-8445487f56-tnssl 1/1 Running 0 9d k8s-app=calico-typha,pod-template-hash=8445487f56kube-system coredns-5db5696c7-67h79 1/1 Running 1 (2d1h ago) 9d k8s-app=kube-dns,pod-template-hash=5db5696c7kube-system metrics-server-6bf7dcd649-5fhrw 1/1 Running 2 (4d1h ago) 9d k8s-app=metrics-server,pod-template-hash=6bf7dcd649kubernetes-dashboard dashboard-metrics-scraper-7fcdff5f4c-9kk86 1/1 Running 1 (2d1h ago) 9d k8s-app=dashboard-metrics-scraper,pod-template-hash=7fcdff5f4ckubernetes-dashboard kubernetes-dashboard-85f59f8ff7-js9j2 1/1 Running 12 (2d1h ago) 9d k8s-app=kubernetes-dashboard,pod-template-hash=85f59f8ff7

以上就是我们的所有Pod了,我想要找到标签中包含kubernetes-dashboard和kube-dns的容器:

[root@k8s-master01 ~]# kubectl get pod -A -l 'k8s-app in (kubernetes-dashboard,kube-dns)'NAMESPACE NAME READY STATUS RESTARTS AGEkube-system coredns-5db5696c7-67h79 1/1 Running 1 (2d1h ago) 9dkubernetes-dashboard kubernetes-dashboard-85f59f8ff7-js9j2 1/1 Running 12 (2d1h ago) 9d

找到了这两个Pod,说明这两个Pod中包含这两个标签,可以在上面的所有容器列表里看看这两个Pod是否含有这两个标签。

还有一种情况是比如我有一批Pod的标签是这样:

我想查看其中不包含ABB=X的所有Pod,可以这样写:

kubectl get po -l ABB!=X,APC=A

这样的话只会找到Pod02和Pod03。

总结:这个功能不难但是比较重要,也比较常用,一定要知道。

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。