九、K8S-label和label Selector

news2025/1/6 20:22:43

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: myweb

matchExpressions:- {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: nginx
      env: prod
  replicas: 1
  template:
    metadata:
      labels:
        app: nginx
        env: prod
    spec:
      containers:
      - image: nginx:1.17.1
        name: 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   LABELS

label-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   LABELS

label-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   LABELS

web-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-80
    port: 80
    targetPort: 80
  selector: #标签选择器,选择标签为env: prod的pod
    env: 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    SELECTOR

service-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: nginx06
      env: online
    matchExpressions:
     - {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.coloradmin.cn/o/1394645.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Cellinx NVT 摄像机 UAC.cgi 任意用户创建漏洞复现

0x01 产品简介 Cellinx NVT IP PTZ是韩国Cellinx公司的一个摄像机设备。 0x02 漏洞概述 Cellinx NVT 摄像机 UAC.cgi接口处存在任意用户创建漏洞,未经身份认证的攻击者可利用此接口创建管理员账户,登录后台可查看敏感信息,使系统处于极不安全的状态。 0x03 复现环境 FO…

【JavaEE进阶】 图书管理系统开发日记——壹

文章目录 &#x1f332;序言&#x1f334;前端代码的引入&#x1f38b;约定前后端交互接口&#x1f343;后端服务器代码实现&#x1f6a9;UserController.java&#x1f6a9;BookController.java ⭕总结 &#x1f332;序言 该图书管理系统&#xff0c;博主将一步一步进行实现。…

JVM工作原理与实战(十九):运行时数据区-方法区

专栏导航 JVM工作原理与实战 RabbitMQ入门指南 从零开始了解大数据 目录 专栏导航 前言 一、运行时数据区 二、方法区 1.方法区介绍 2.方法区在Java虚拟机的实现 3.类的元信息 4.运行时常量池 5.字符串常量池 6.静态变量的存储 总结 前言 JVM作为Java程序的运行环境…

【4k】4k的webrtc播放示例

目录 使用带研发角色的账号&#xff0c;在app端设置下分辨率 &#xff1a; 4k 点播 ffplay播放看下详细的参数 使用带研发角色的账号&#xff0c;在app端设置下分辨率 &#xff1a; 4k 点播 ffplay播放看下详细的参数

Gartner:2024年及未来中国网络安全重要趋势

Gartner于今日发布2024年及未来中国网络安全重要趋势。 Gartner高级研究总监高峰表示&#xff1a;“随着人工智能&#xff08;AI&#xff09;等重大技术突破的出现、工作方式的社会性变革以及地缘政治的转变都意味着技术采购可能必须完全在境内实施&#xff0c;且数据和系统可…

【前端HTML】HTML基础

文章目录 HTML标签标签属性 基本结构文档声明HTML标准结构HTML基础排版标签语义化标签块级元素与行内元素文本标签图片标签超链接跳转到指定页面跳转到文件跳转到锚点唤起指定应用 列表有序列表无序列表列表嵌套自定义列表 表格基本结构常用属性跨行跨列 常用标签表单基本结构常…

2024年甘肃省职业院校技能大赛信息安全管理与评估 样题三 模块一

竞赛需要完成三个阶段的任务&#xff0c;分别完成三个模块&#xff0c;总分共计 1000分。三个模块内容和分值分别是&#xff1a; 1.第一阶段&#xff1a;模块一 网络平台搭建与设备安全防护&#xff08;180 分钟&#xff0c;300 分&#xff09;。 2.第二阶段&#xff1a;模块二…

实验一 安装和使用Oracle数据库

&#x1f57a;作者&#xff1a; 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux菜鸟刷题集 &#x1f618;欢迎关注&#xff1a;&#x1f44d;点赞&#x1f64c;收藏✍️留言 &#x1f3c7;码字不易&#xff0c;你的&#x1f44d;点赞&#x1f64c;收藏❤️关注对我真的…

【MYSQL】存储引擎MyISAM和InnoDB

MYSQL 存储引擎 查看MySQL提供所有的存储引擎 mysql> show engines; mysql常用引擎包括&#xff1a;MYISAM、Innodb、Memory、MERGE 1、MYISAM&#xff1a;全表锁&#xff0c;拥有较高的执行速度&#xff0c;不支持事务&#xff0c;不支持外键&#xff0c;并发性能差&#x…

springBoot项目打包发布

打包 项目代码编写完成后&#xff0c;在pom.xml文件中引用打包的插件&#xff1a; <!-- 打包插件坐标--><build><plugins><!--打包插件--><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-mave…

Docker 容器连接

Docker 容器连接 前面我们实现了通过网络端口来访问运行在 docker 容器内的服务。 容器中可以运行一些网络应用&#xff0c;要让外部也可以访问这些应用&#xff0c;可以通过 -P 或 -p 参数来指定端口映射。 下面我们来实现通过端口连接到一个 docker 容器。 网络端口映射 …

Leetcode24-找到两个数组中的公共元素(2956)

1、题目 给你两个下标从 0 开始的整数数组 nums1 和 nums2 &#xff0c;它们分别含有 n 和 m 个元素。 请你计算以下两个数值&#xff1a; 统计 0 < i < n 中的下标 i &#xff0c;满足 nums1[i] 在 nums2 中 至少 出现了一次。 统计 0 < i < m 中的下标 i &…

三、Sharding-JDBC系列03:自定义分片算法

目录 一、概述 1.1、分片算法 精确分片算法 范围分片算法 复合分片算法 Hint分片算法 1.2、分片策略 标准分片策略 复合分片策略 行表达式分片策略 Hint分片策略 不分片策略 二、自定义分片算法 - 复合分片算法 (1)、创建数据库和表 (2)、自定义分库算法 (3)、…

如何实现数据库读一致性

1 导读 数据的一致性是数据准确的重要指标&#xff0c;那如何实现数据的一致性呢&#xff1f;本文从事务特性和事务级别的角度和大家一起学习如何实现数据的读写一致性。 2 一致性 1.数据的一致性&#xff1a;通常指关联数据之间的逻辑关系是否正确和完整。 举个例子&#…

中北数据结构2023真题

雪雾: 设计一个算法&#xff0c;将一个节点值为自然数的单列表拆分成两个单列表&#xff0c;原表中值为偶数的节点保留&#xff0c;而值为奇数的节点&#xff0c;按他们在原表的相对次序组成一个新的单列表 #include <stdio.h> #include <stdlib.h>typedef struct…

Python算法例36 丑数Ⅱ

1. 问题描述 设计一个算法&#xff0c;找出只含素因子2、3、5的第n小的数&#xff0c;符合条件的数如&#xff1a;1、2、3、4、5、6、8、9、10、12… 2. 问题示例 如果n9&#xff0c;返回10。 3. 代码实现 def find_nth_number(n):if n < 0:return Nonenumbers [1]idx…

Python-基础篇-类与对象/面向对象程序设计

文章目录 思维导图是何物类定义类&#x1f4da; class类的成员&#x1f4da;类的继承性&#x1f4da;封装性&#x1f4da;多态性 对象面向对象&#x1f4da;创建对象&#x1f4da;销毁对象&#x1f4da; 类和对象关系必背必记专业英语学习角 思维导图 是何物 类 “类”是物以…

DotNET 8 新特性 - AoT 编译、 MinimalAPI、Json源生成器

AoT编译方式特性 裁剪减小体积&#xff0c;取消JIT编译&#xff0c;不使用反射技术。直接产生目标机器二进制代码&#xff0c;目前支持x86&#xff0c;解决被反编译问题。 使用本机 AOT 发布的应用&#xff1a;最大程度减少了磁盘占用空间缩短了启动时间减少了内存需求 | 功能…

springcloud +Vue 前后端分离的onlinejudge在线评测系统

功能描述&#xff1a; 本系统的研究内容主要是设计并实现一个一个在线测评系统&#xff08;OJ&#xff09;&#xff0c;该系统集成了博客、竞赛、刷题、教学&#xff0c;公告&#xff0c;个人管理六大功能&#xff0c;用户注册后登录系统&#xff0c;可以浏览本站的全部文章、发…

Nginx 简介

1、概念介绍 Nginx ("engine x") 是一个轻量级、高性能的 WEB 服务器软件和反向代理服务器。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的&#xff0c;第一个公开版本 0.1.0 发布于 2004 年 10 月 4 日。其将源代码以类 BSD 许可证的形式发…