九、K8S-label和label Selector

label和label selector 标签和标签选择器

1、label 标签: 一个label就是一个key/value对

        label 特性:

  1. label可以被附加到各种资源对象上
  2. 一个资源对象可以定义任意数量的label
  3. 同一个label可以被添加到任意数量的资源上

2、label selector 标签选择器

        Label selector是Kubernetes核心的分组机制,通过label selector客户端/用户能够识别一组有共同特征或属性的资源对象。

查询条件:

selector:matchLabels:app: mywebmatchExpressions:- {key: tier, operator: In, values: [frontend]}- {key: environment, operator: NorIn, values: [dev]}

        matchLabels用于定义一组Label,与直接写在Selector中作用相同:matchExpression用于定义一组基于集合的筛选条件,可用的条件运算符包括:In、NotIn、Exists和DoesNotExist。

        如果同时设置了matchLabels和matchExpression,则两组条件为“AND”关系,即所有条件需要满足才能完成Selector的筛选。

3、示例

  • 定义标签
#可以多创建几个deploy 方便演示
[root@k8s-master-1 test]# vim deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: label-test
spec:selector:matchLabels:app: nginxenv: prodreplicas: 1template:metadata:labels:app: nginxenv: prodspec:containers:- image: nginx:1.17.1name: nginx[root@k8s-master-1 test]# kubectl apply -f deployment.yaml 
deployment.apps/label-test created
#创建完成就可以看到他的标签
[root@k8s-master-1 test]# kubectl get pod --show-labels
NAME                          READY   STATUS    RESTARTS   AGE   LABELSlabel-test-7787b4694b-jvrz5   1/1     Running   0          16s   app=nginx,env=prod,pod-template-hash=7787b4694b[root@k8s-master-1 test]# kubectl get pod --show-labels -owide
NAME                          READY   STATUS    RESTARTS   AGE   IP             NODE         NOMINATED NODE   READINESS GATES   LABELSlabel-test-7787b4694b-jvrz5   1/1     Running   0          46s   10.244.0.164   k8s-node-1   <none>           <none>            app=nginx,env=prod,pod-template-hash=7787b4694b#查看所有标签  -A
[root@k8s-master-1 ~]# kubectl get pod -A --show-labels
NAMESPACE     NAME                                    READY   STATUS    RESTARTS   AGE     LABELS
default       busybox                                 1/1     Running   11         2d17h   <none>
default       label-test-7787b4694b-jvrz5             1/1     Running   2          41h     app=nginx,env=prod,pod-template-hash=7787b4694b
default       web-96d5df5c8-vmxgr                     1/1     Running   2          2d23h   app=web,pod-template-hash=96d5df5c8
kube-system   coredns-6b774d79bb-4ssxb                1/1     Running   48         18d     k8s-app=kube-dns,pod-template-hash=6b774d79bb
kube-system   kube-flannel-ds-amd64-7bpfs             1/1     Running   16         18d     app=flannel,controller-revision-hash=76ccd4ff4f,pod-template-generation=1,tier=node
kube-system   kube-flannel-ds-amd64-8d8fj             1/1     Running   17         18d     app=flannel,controller-revision-hash=76ccd4ff4f,pod-template-generation=1,tier=node
kube-system   kubernetes-dashboard-567f98444d-d9zb4   1/1     Running   2          2d23h   k8s-app=kubernetes-dashboard,pod-template-hash=567f98444d
kube-system   metrics-server-6f6c655778-66q5g         1/1     Running   2          2d23h   k8s-app=metrics-server,pod-template-hash=6f6c655778
kube-system   metrics-server-6f6c655778-m6r7g         1/1     Running   3          3d17h   k8s-app=metrics-server,pod-template-hash=6f6c655778#命令行方式给容器、node节点、deploy、等等添加标签
[root@k8s-master-1 ~]# kubectl label node k8s-node01 k8s-node02 env=test
[root@k8s-master-1 ~]# kubectl label pod busybox app=v1
pod/busybox labeled[root@k8s-master-1 ~]# 
[root@k8s-master-1 ~]# kubectl get pod --show-labels
NAME                          READY   STATUS    RESTARTS   AGE     LABELS
busybox                       1/1     Running   11         2d18h   app=v1[root@k8s-master-1 ~]# 
##修改标签使用  --overwrite
[root@k8s-master-1 ~]# kubectl label pod busybox app=v2 --overwrite
pod/busybox labeled
[root@k8s-master-1 ~]# [root@k8s-master-1 ~]# kubectl get pod --show-labels
NAME                          READY   STATUS    RESTARTS   AGE     LABELS
busybox                       1/1     Running   11         2d18h   app=v2
#删除标签
[root@k8s-master-1 ~]# kubectl label pod busybox app-
pod/busybox labeled
  • label selector

         命令行方式过滤

1、过滤出所有包含env=prod的pod
[root@k8s-master-1 test]# kubectl get pod -l env=prod --show-labels
NAME                          READY   STATUS    RESTARTS   AGE   LABELS
label-test-7787b4694b-jvrz5   1/1     Running   0          34m   app=nginx,env=prod,pod-template-hash=7787b4694b
2、过滤出包含env=prod,app=nginx的pod
[root@k8s-master-1 test]# kubectl get pod -l 'env=prod,app=nginx' --show-labels
NAME                          READY   STATUS    RESTARTS   AGE   LABELS
label-test-7787b4694b-jvrz5   1/1     Running   0          38m   app=nginx,env=prod,pod-template-hash=7787b4694b
'env=prod,app in (nginx,nginx02,nginx03)',逗号分隔2个条件,表示要同时的满足
3、过滤出来不包含app=nginx1和app=nginx3的pod。语法:'app notin (nginx,nginx03)' ,用notin来实现
[root@k8s-master-1 test]# kubectl get pod -l 'app notin (nginx1,nginx2)' --show-labels
4、过滤出来不包含app=nginx的pod。  语法:'env != dev'
[root@k8s-master-1 test]# kubectl get pod -l 'app !=nginx' --show-labels
NAME                  READY   STATUS    RESTARTS   AGE   LABELSweb-96d5df5c8-vmxgr   1/1     Running   1          31h   app=web,pod-template-hash=96d5df5c8

4、yaml配置中的标签选择表达式

  •  基于等式的匹配
创建一个service[root@k8s-master-1 test]# vim deployment-service.yaml 
apiVersion: v1
kind: Service
metadata:name: service-label
spec:ports:- name: 80-80port: 80targetPort: 80selector: #标签选择器,选择标签为env: prod的podenv: prod
[root@k8s-master-1 test]# kubectl apply -f deployment-service.yaml 
service/service-label created
[root@k8s-master-1 test]# kubectl get svc service-label -owide
NAME            TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE    SELECTORservice-label   ClusterIP   10.0.0.254   <none>        80/TCP    6m8s   env=prod
# 如下图,可以看到,service恰好就是关联到了这2个pod上了。
[root@k8s-master-1 ~]# kubectl get endpoints service-label
NAME            ENDPOINTS                         AGE
service-label   10.244.0.166:80,10.244.0.167:80   5h18m
[root@k8s-master-1 ~]# 
[root@k8s-master-1 ~]# 
[root@k8s-master-1 ~]# kubectl get pod -l env=prod -owide
NAME                          READY   STATUS    RESTARTS   AGE    IP             NODE         NOMINATED NODE   READINESS GATES
busybox                       1/1     Running   18         3d1h   10.244.0.166   k8s-node-1   <none>           <none>
label-test-7787b4694b-jvrz5   1/1     Running   2          2d1h   10.244.0.167   k8s-node-1   <none>           <none>

  • 基于集合的匹配

注意:job、deployment、replicaset、daemonset不仅仅支持基于等式的匹配,也支持基于集合的匹配

如第三个步骤,创建的deployment,matchlabels用于匹配一组的标签,与直接在selector中的作用相同

在yaml文件中基于集合的方式匹配
语法:
spec:  #  selector:#matchLabels: #matchlabels用于匹配一组的标签,与直接在selector中的作用相同app: nginx06#env: online#[root@k8s-master-1 test]# 
[root@k8s-master-1 test]#  kubectl get deployment label-test -owide
NAME         READY   UP-TO-DATE   AVAILABLE   AGE    CONTAINERS   IMAGES         SELECTOR
label-test   1/1     1            1           2d1h   nginx        nginx:1.17.1   app=nginx,env=prod[root@k8s-master-1 test]# kubectl get pod -owide
NAME                          READY   STATUS    RESTARTS   AGE    IP             NODE         NOMINATED NODE   READINESS GATES
busybox                       1/1     Running   18         3d1h   10.244.0.166   k8s-node-1   <none>           <none>
label-test-7787b4694b-jvrz5   1/1     Running   2          2d1h   10.244.0.167   k8s-node-1   <none>           <none>[root@k8s-master-1 test]# 
[root@k8s-master-1 test]# kubectl get pod label-test-7787b4694b-jvrz5 -owide --show-labels
NAME                          READY   STATUS    RESTARTS   AGE    IP             NODE         NOMINATED NODE   READINESS GATES   LABELS
label-test-7787b4694b-jvrz5   1/1     Running   2          2d1h   10.244.0.167   k8s-node-1   <none>           <none>            app=nginx,env=prod,pod-template-hash=7787b4694b#这样,deployment就和要控制、管理的pod进行了关联。另外,在集合的方式里,matchExpression也可以作为匹配的操作
spec:  selector:matchLabels:app: nginx06env: onlinematchExpressions:- {key: release, operator: In, values: [stable] }- {key: app,operator: NotIn, values: [nginx02,nginx03] }
语法:matchExpressions:- {key: release, operator: In, values: [stable] }- {key: app,operator: NotIn, values: [nginx02,nginx03] }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/413650.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++中特殊类的设计与单例模式的简易实现

设计一个只能在堆上创建对象的类 对于这种特殊类的设计我们一般都是优先考虑私有构造函数。然后对于一些特殊要求就直接通过静态成员函数的实现来完成。 class A//构造函数私有&#xff08;也可以析构函数私有&#xff09; { public:static A* creat(){return new A;} privat…

【Redis】基于Token单点登录

基于Token单点登录 获取验证码 流程图 #mermaid-svg-DLGHgCofEYXVSmI5 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-DLGHgCofEYXVSmI5 .error-icon{fill:#552222;}#mermaid-svg-DLGHgCofEYXVSmI5 .error-text{f…

Oracle行转列函数,列转行函数

Oracle行转列函数&#xff0c;列转行函数 Oracle 可以通过PIVOT,UNPIVOT,分解一行里面的值为多个列,及来合并多个列为一行。 PIVOT PIVOT是用于将行数据转换为列数据的查询操作(类似数据透视表)。通过使用PIVOT&#xff0c;您可以按照特定的列值将数据进行汇总&#xff0c;并将…

【webrtc】GCC 7: call模块创建的ReceiveSideCongestionController

webrtc 代码学习&#xff08;三十二&#xff09; video RTT 作用笔记 从call模块说起 call模块创建的时候&#xff0c;会创建 src\call\call.h 线程&#xff1a; 统计 const std::unique_ptr<CallStats> call_stats_;SendDelayStats &#xff1a; 发送延迟统计 const…

用Go plan9汇编实现斐波那契数列计算

斐波那契数列是一个满足递推关系的数列&#xff0c;如&#xff1a;1 1 2 3 5 8 ... 其前两项为1&#xff0c;第3项开始&#xff0c;每一项都是其前两项之和。 用Go实现一个简单的斐波那契计算逻辑 func fib(n int) int {if n 1 || n 2 {return 1}return fib(n-1) fib(n-2) …

RT-Thread experimental 代码学习(1)thread_sample

RTOS的最基础功能是线程。 线程的调度是如何工作的&#xff1f;RT-thread官方的实验文档是最好的参考。 老规矩&#xff0c;先放法国人doxygen。 thread_sample 代码的调用关系图 有意思的是&#xff0c;RT有两种创建线程的方式 - 静态和动态&#xff0c;粗略的理解是&…

Qt弹框展示

1.相关说明 文件选择弹框、目录选择弹框、保存文件弹框、颜色选择弹框、字体选择弹框、进度条弹框、输入对话框、标准消息框等 2.相关界面 3.相关代码 #include "widget.h" #include "ui_widget.h" #include <QFileDialog> #include <QProgressD…

Windows下安装alipay-sdk-python时,pycrypto安装报错问题处理

1、安装alipay-sdk-python 时&#xff0c;保存内容如下。 Building wheels for collected packages: pycryptoBuilding wheel for pycrypto (setup.py) ... error error: subprocess-exited-with-error python setup.py bdist_wheel did not run successfully.│ exit c…

Conway的生命游戏

文章目录 主要内容一.Conway的“生命游戏”1.玩法代码如下&#xff08;示例&#xff09;: 总结 主要内容 一.Conway的“生命游戏” 1.玩法 Conway的“生命游戏”是细胞自动机的一个例子&#xff1a;一组规则控制由离散细胞组成的区域的行为。在实践中&#xff0c;它会创建一个…

【办公类-21-02】20240118育婴员操作题word打印2.0

作品展示 把12页一套的操作题批量制作10份&#xff0c;便于打印 背景需求 将昨天整理的育婴师操作题共享&#xff0c; 因为题目里面有大量的红蓝颜色文字&#xff0c;中大班办公室都是黑白单面手动翻页打印。只有我待的教务室办公室有彩色打印机打印&#xff08;可以自动双面…

Gitlab添加ssh-key报500错误处理

Gitlab添加ssh-key报500错误 一、查看日志 发现Errno::Enoent(No such file or derectory -ssh): rootasu1:/home/caixin# tail -f /var/log/gitlab/gitlab-rails/production.log二、分析 根据日志提示&#xff0c;好像是缺少文件或目录&#xff0c;后面有个ssh,难首是依赖s…

CVE重要通用漏洞复现java php

在进行漏洞复现之前我们需要在linux虚拟机上进行docker的安装 我不喜欢win上安因为不知道为什么总是和我的vmware冲突 然后我的kali内核版本太低 我需要重新安装一个新的linux 并且配置网络 我相信这会话费我不少时间 查看版本 uname -a 需要5.5或以上的版本 看错了浪…