九、K8S-label和label Selector
label和label selector 标签和标签选择器
1、label 标签: 一个label就是一个key/value对
label 特性:
- label可以被附加到各种资源对象上
- 一个资源对象可以定义任意数量的label
- 同一个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] }
相关文章:

九、K8S-label和label Selector
label和label selector 标签和标签选择器 1、label 标签: 一个label就是一个key/value对 label 特性: label可以被附加到各种资源对象上一个资源对象可以定义任意数量的label同一个label可以被添加到任意数量的资源上 2、label selector 标签选择器 L…...

【.NET Core】 多线程之(Thread)详解
【.NET Core】 多线程之(Thread)详解 文章目录 【.NET Core】 多线程之(Thread)详解一、概述二、线程的创建和使用2.1 ThreadStart用于无返回值,无参数的方法2.2 ParameterizedThreadStart:用于带参数的方法 三、线程的…...

苹果笔记本 macbook 在 office word 中使用 mathtype 的方法
前言 想在 MacBook 中使用 mathtype,去搜索,去 Apple Store 下载也发现没有 解决方法 打开 office Word 的「插入」中的「获取加载项」、「我的加载项」。 在应用商店中下载,需要登录自己的微软账号。 加载成功后就可以使用了。 注意 和…...

课表排课小程序怎么制作?多少钱?
在当今的数字化时代,无论是购物、支付、点餐,还是工作、学习,都离不开各种各样的微信小程序。其中,课表排课小程序就是许多教育机构和学校必不可少的工具。那么课表排课小程序怎么制作呢?又需要多少钱呢? …...

C语言总结十三:程序环境和预处理详细总结
了解程序的运行环境可以让我们更加清楚的程序的底层运行的每一个步骤和过程,做到心中有数,预处理阶段是在预编译阶段完成,掌握常用的预处理命令语法,可以让我们正确的使用预处理命令,从而提高代码的开发能力和阅读别人…...

tinyxml2
使用tinyxml2,得知道一些xml基础 xml tutorial--菜鸟 tinyxml2类对象 链接 结构 XMLNode 什么是节点 节点:元素、声明、文本、注释等。 XMLDocument xml文档(文件)对象。 作用: 加载xml文件, tinyxml2作用 先定义两个宏 …...
What is `@Controller` does?
Controller 是SpringMVC注解,标记一个类作为Web控制器(Controller),负责处理HTTP请求并返回响应结果 在SpringMVC中,控制器类的主要职责是: 1、接收来自客户端的HTTP请求 2、调用服务层或其他业务逻辑组件…...

新版AndroidStudio dependencyResolutionManagement出错
在新版AndroidStudio中想像使用4.2版本或者4.3版本的AndroidStudio来构造项目?那下面这些坑我们就需要来避免了,否则会出各种各样的问题。 一.我们先来看看新旧两个版本的不同。 1.jdk版本的不同 新版默认是jdk17 旧版默认是jdk8 所以在新版AndroidSt…...
第三天业务题
3-1 你们的项目是如何进行参数校验的 在我们的项目中,通常使用以下2种方式进行参数校验: 1.手动校验:在方法内部,我们可以手动编写代码来对参数进行校验。例如,使用条件判断语句(if-else)来检…...
nestjs 装饰器
1、装饰器定义 装饰器是一种特殊的类型声明,它可以附加在类、方法、属性、参数上边 需开启tsconfig.json中 "experimentalDecorators":true 生成tsconfig.json文件 tsc -init 2、类装饰器 // 类装饰器 主要是通过符号添加装饰器 // 装饰器会自动把cl…...

一款开源且不限制大小可以设置过期时间的支持分享的的开源文件共享系统picoshare 部署教程
1.拉取镜像 2.部署 创建目录 mkdir -p /opt/picoshare/data 部署 其中:"somesecretpass"是密码 docker run \--env "PORT4001" \--env "PS_SHARED_SECRETsomesecretpass" \--publish 10005:4001/tcp \--volume "/opt/picoshare/data:…...

eBPF运行时安全
引言 eBPF作为当前linux系统上最为炙手可热的技术,通常被用于网络流量过滤和分析、系统调用跟踪、性能优化、安全监控,当下比较知名的项目有Cilium、Falco等。 Cilium 是一个开源的容器网络和安全性项目,致力于提供高效的容器通信和强大的安…...
Linux 系统中常见的命令,它们用于执行各种任务,包括文件和目录管理、系统信息查看、用户管理等
以下是一些在 Linux 系统中常见的命令,它们用于执行各种任务,包括文件和目录管理、系统信息查看、用户管理等。这里列举了一些基础的命令: 文件和目录管理: ls: 列出目录内容。 ls cd: 切换当前目录。 cd /path/to/directory …...
AutoEventWireup详解
AutoEventWireup详解 大家好,我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天,让我们深入探讨.NET开发中一个神奇而强大的特性——AutoEventWireupÿ…...

SAP ABAP 自定义流水号 编号范围
前言 在开发中经常会遇到生成编号的需求(如接口报文ID,自建表数据主键等);为此,SAP提供了自动编号工具,能根用户需求设定并自动生成一组唯一的编号。 编号范围对象的创建 1.进入事务代码SNRO,创建一个编号范围对象。…...
安卓、ios系统详解
一、安卓 安卓系统架构:从上至下,依次是应用层、应用框架层、系统运行库层和Linux内核层 应用层(system app):系统内置的应用程序及非系统级的应用程序都属于应用层,负责与用于进行交互,一般都用java或者kotlin来开发应用框架层(java api framework):为应用层提供所需…...

含并行连结的网络(GoogLeNet)
目录 1.GoogLeNet 2.代码 1.GoogLeNet inception不改变高宽,只改变通道数。GoogLeNet也大量使用1*1卷积,把它当作全连接用。 V3耗内存比较多,计算比较慢,但是精度比较准确。 2.代码 import torch from torch import nn from t…...
计算机网络(第六版)复习提纲3
2.3 物理层下面的传输媒体 传输媒体是数据传输系统中在发送器和接收器之间的物理通道,有导引型传输媒体(有线)和非导引型传输媒体(无线) 1.双绞线:两条铜线绞合,以减少干扰,绞合度越…...

怿星科技测试实验室获CNAS实验室认可,汽车以太网检测能力达国际标准
2023年12月27日,上海怿星电子科技有限公司测试实验室(下称:EPT LABS)通过CNAS实验室认可批准,并于2024年1月5日正式取得CNAS实验室认可证书(注册号CNAS L19826),标志着怿星科技的实验…...
GORM 介绍及快速入门
GORM 介绍及快速入门 前言 GORM 是一个用 GoLang 语言编写的 ORM(对象关系映射)库。它被设计为开发者友好的方式来进行数据库操作。GORM 提供了一种高级的 API 来处理数据库的 CRUD(创建、读取、更新、删除)操作,它支…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...

STM32标准库-DMA直接存储器存取
文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA(Direct Memory Access)直接存储器存取 DMA可以提供外设…...
3403. 从盒子中找出字典序最大的字符串 I
3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...

vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf
FTP 客服管理系统 实现kefu123登录,不允许匿名访问,kefu只能访问/data/kefu目录,不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...

华为OD机考-机房布局
import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseSystem.out.println(solve(in.nextLine()));}}priv…...

打手机检测算法AI智能分析网关V4守护公共/工业/医疗等多场景安全应用
一、方案背景 在现代生产与生活场景中,如工厂高危作业区、医院手术室、公共场景等,人员违规打手机的行为潜藏着巨大风险。传统依靠人工巡查的监管方式,存在效率低、覆盖面不足、判断主观性强等问题,难以满足对人员打手机行为精…...

向量几何的二元性:叉乘模长与内积投影的深层联系
在数学与物理的空间世界中,向量运算构成了理解几何结构的基石。叉乘(外积)与点积(内积)作为向量代数的两大支柱,表面上呈现出截然不同的几何意义与代数形式,却在深层次上揭示了向量间相互作用的…...

归并排序:分治思想的高效排序
目录 基本原理 流程图解 实现方法 递归实现 非递归实现 演示过程 时间复杂度 基本原理 归并排序(Merge Sort)是一种基于分治思想的排序算法,由约翰冯诺伊曼在1945年提出。其核心思想包括: 分割(Divide):将待排序数组递归地分成两个子…...
java+webstock
maven依赖 <dependency><groupId>org.java-websocket</groupId><artifactId>Java-WebSocket</artifactId><version>1.3.5</version></dependency><dependency><groupId>org.apache.tomcat.websocket</groupId&…...