Kubernetes特别属性的标签Label的强大作用

 更新时间:2022年03月18日 16:11:43   作者:、重明  
这篇文章主要为大家介绍了Kubernetes特别属性的标签Label的强大作用介绍,希望可以对大家有所帮助,祝大家多多进步,早日升职加薪

前言

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   LABELS
busybox                     1/1     Running   28 (16h ago)   9d    <none>
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=busybox
pod/busybox labeled
[root@k8s-master01 ~]# kubectl get pod --show-labels 
NAME                        READY   STATUS    RESTARTS       AGE   LABELS
busybox                     1/1     Running   28 (16h ago)   9d    app=busybox
hpa-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=busybox
NAMESPACE   NAME      READY   STATUS    RESTARTS       AGE
default     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   LABELS
busybox                     1/1     Running   28 (16h ago)   9d    <none>
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   LABELS
busybox                     1/1     Running   28 (16h ago)   9d    app=busybox
hpa-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   LABELS
busybox                     1/1     Running   28 (16h ago)   9d    app=busybox22222
hpa-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   LABELS
default                busybox                                      1/1     Running   29 (3m19s ago)   9d    app=busybox22222
default                hpa-nginx-bd88bdd8f-h8vx7                    1/1     Running   0                18h   app=hpa-nginx,pod-template-hash=bd88bdd8f
kube-system            calico-kube-controllers-5dffd5886b-4blh6     1/1     Running   2 (2d1h ago)     9d    k8s-app=calico-kube-controllers,pod-template-hash=5dffd5886b
kube-system            calico-node-fvbdq                            1/1     Running   2 (2d1h ago)     9d    controller-revision-hash=79878cdc56,k8s-app=calico-node,pod-template-generation=1
kube-system            calico-node-g8nqd                            1/1     Running   0                9d    controller-revision-hash=79878cdc56,k8s-app=calico-node,pod-template-generation=1
kube-system            calico-node-mdps8                            1/1     Running   0                9d    controller-revision-hash=79878cdc56,k8s-app=calico-node,pod-template-generation=1
kube-system            calico-node-nf4nt                            1/1     Running   1 (4d1h ago)     9d    controller-revision-hash=79878cdc56,k8s-app=calico-node,pod-template-generation=1
kube-system            calico-node-sq2ml                            1/1     Running   1 (2d1h ago)     9d    controller-revision-hash=79878cdc56,k8s-app=calico-node,pod-template-generation=1
kube-system            calico-typha-8445487f56-mg6p8                1/1     Running   0                9d    k8s-app=calico-typha,pod-template-hash=8445487f56
kube-system            calico-typha-8445487f56-pxbpj                1/1     Running   1 (2d1h ago)     9d    k8s-app=calico-typha,pod-template-hash=8445487f56
kube-system            calico-typha-8445487f56-tnssl                1/1     Running   0                9d    k8s-app=calico-typha,pod-template-hash=8445487f56
kube-system            coredns-5db5696c7-67h79                      1/1     Running   1 (2d1h ago)     9d    k8s-app=kube-dns,pod-template-hash=5db5696c7
kube-system            metrics-server-6bf7dcd649-5fhrw              1/1     Running   2 (4d1h ago)     9d    k8s-app=metrics-server,pod-template-hash=6bf7dcd649
kubernetes-dashboard   dashboard-metrics-scraper-7fcdff5f4c-9kk86   1/1     Running   1 (2d1h ago)     9d    k8s-app=dashboard-metrics-scraper,pod-template-hash=7fcdff5f4c
kubernetes-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        AGE
kube-system            coredns-5db5696c7-67h79                 1/1     Running   1 (2d1h ago)    9d
kubernetes-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。

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

以上就是Kubernetes特别属性的标签Label的强大作用的详细内容,更多关于Kubernetes属性Label标签作用的资料请关注脚本之家其它相关文章!

相关文章

  • vscode设置免密登录远程服务器的解决方案

    vscode设置免密登录远程服务器的解决方案

    当我们使用vscode的ssh连接远程服务器后,过一段时间后,总是要求登录服务器的密码,遇到这样的问题如何解决呢,下面给大家分享vscode设置免密登录远程服务器的解决方案,感兴趣的朋友跟随小编一起看看吧
    2024-05-05
  • 阿里云主机不能用IP访问网站的解决方法(配置安全组规则搞定)

    阿里云主机不能用IP访问网站的解决方法(配置安全组规则搞定)

    刚买了一台阿里云主机,迫不待及的试试速度,怎知网站访问不了,用IP或绑定域名都无法访问,后来提交工单才知道,需要配置安全组规则才行。针对同样像我一样的新手,本文就介绍一下如何在开通阿里云主机后配置安全组规则,让网站能够外网访问,需要的朋友可以参考下
    2020-07-07
  • Windows下搭建MQTT服务器的详细教程

    Windows下搭建MQTT服务器的详细教程

    这篇文章主要介绍了Windows下搭建MQTT服务器的方法,基于mosquitto实现,有需要的朋友可以参考下
    2023-08-08
  • Web压力测试工具:http_load、webbench、ab、Siege使用方法

    Web压力测试工具:http_load、webbench、ab、Siege使用方法

    这篇文章主要介绍了Web压力测试工具:http_load、webbench、ab、Siege使用教程,需要的朋友可以参考下
    2015-09-09
  • rsync相对于其他同步工具的优缺点介绍

    rsync相对于其他同步工具的优缺点介绍

    rsync是linux与windows下常用的同步工具,以前的版本都是免费的,配置也不复杂,主要是当前确实没有多好的替代工具,我自己也是一直用的这个工具,刚好看到这篇文字特分享下
    2013-11-11
  • 在vscode中使用Git的教程

    在vscode中使用Git的教程

    这篇文章主要介绍了在vscode中使用Git的教程,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • 教你搭建dns服务器(图文教程)

    教你搭建dns服务器(图文教程)

    这篇文章主要介绍了搭建dns服务器的图文教程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-03-03
  • github的使用_动力节点Java学院整理

    github的使用_动力节点Java学院整理

    这篇文章主要为大家详细介绍了github使用的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-08-08
  • php中安全模式safe_mode配置教程

    php中安全模式safe_mode配置教程

    php的安全模式是个非常重要的内嵌的安全机制,能够控制一些php中的函数,比如system(),同时把很多文件操作函数进行了权限控制,也不允许对某些关键文件的文件
    2012-08-08
  • Keepalived+HAProxy高可用集群K8S实现

    Keepalived+HAProxy高可用集群K8S实现

    这篇文章主要为大家介绍了Keepalived+HAProxy实现高可用集群K8S的构建方式,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2022-03-03

最新评论