Kubernetes的基本概念和术语-lable
一个Label是一个key=value的键值对,其中key与value由用户自己指定。Label可以被附加到各种资源对象上,例如Node、Pod、Service、RC等,一个资源对象可以定义任意数量的Label,同一个Label也可以被添加到任意数量的资源对象上。label通常在资源对象定义时确定,也可以在对象创建后动态添加或者删除。
常用的Label示例如下
- 版本标签:"release":"stable"、"release":"canary"。
- 环境标签:"environment":"dev"、"environment":"qa"、"environment":"production"。
- 架构标签:"tier":"frontend"、"tier":"backend"、"tier":"middleware"。
- 分区标签:"partition":"customerA"、"partition":"customerB"。
- 质量管控标签:"track":"daily"、"track":"weekly"。
lable可以通过Label Selector(标签选择器)查询和筛选拥有某些Label的资源对象。
Label Selector可以被类比为SQL语句中的where查询条件,例如,name=redis-slave这个Label Selector作用于Pod时,可以被类比为select * from pod where pod’s name =‘redis-slave’这样的语句。当前有两种Label Selector表达式:基于等式的(Equality-based)和基于集合的(Set-based),前者采用等式类表达式匹配标签,下面是一些具体的例子。
- name=redis-slave:匹配所有具有标签name=redis-slave的资源对象。
- env!=production:匹配所有不具有标签env=production的资源对象,比如env=test就是满足此条件的标签之一。
后者则使用集合操作类表达式匹配标签,下面是一些具体的例子。
- name in(redis-master, redis-slave):匹配所有具有标签name=redis-master或者name=redis-slave的资源对象。
- name not in(php-frontend):匹配所有不具有标签name=php-frontend的资源对象。
可以通过多个Label Selector表达式的组合实现复杂的条件选择,多个表达式之间用“,”进行分隔即可,几个条件之间是“AND”的关系,即同时满足多个条件,比如下面的例子:
- name=redis-slave,env!=production
- name notin (php-frontend ),env!=production
apiVersion: v1
kind: Pod
matadata:
name: myweb
app: myweb
以myweb Pod为例,lable被定义在matadata中。
管理对象RC和Service则通过Selector字段设置需要关联Pod的Label:
apiVersion: v1 kind: ReplicationController metadata: name: myweb spec: replicas: 1 selector: app: myweb template ................ apiVersion: v1 kind: service metadata: name: myweb spec: selector: app: myweb ports: - port: 8080
其他管理对象如Deployment、ReplicaSet、DaemonSet和Job则可以在Selector中使用基于集合的筛选条件定义,例如:
selector: matchLables: app: myweb matchExpressions: - {key: tier, operator: In, values [frontend]} - {key: environment, operator: NotIn, values [dev]}
matchLabels用于定义一组Label,与直接写在Selector中的作用相同;matchExpressions用于定义一组基于集合的筛选条件,可用的条件运算符包括In、NotIn、Exists和DoesNotExist。
如果同时设置了matchLabels和matchExpressions,则两组条件为AND关系,即需要同时满足所有条件才能完成Selector的筛选。
Label Selector在Kubernetes中的重要使用场景如下。
- kube-controller进程通过在资源对象RC上定义的Label Selector来筛选要监控的Pod副本数量,使Pod副本数量始终符合预期设定的全自动控制流程。
- kube-proxy进程通过Service的Label Selector来选择对应的Pod,自动建立每个Service到对应Pod的请求转发路由表,从而实现Service的智能负载均衡机制。
- 通过对某些Node定义特定的Label,并且在Pod定义文件中使用NodeSelector这种标签调度策略,kube-scheduler进程可以实现Pod定向调度的特性。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
2020-02-01 SSH配置文件
2020-02-01 SSH日常命令
2020-02-01 如何创建一个swap文件
2020-02-01 生成随机密码
2020-02-01 stress-Linux系统压力测试工具使用及系统负载很高的几种场景测试
2020-02-01 execsnoop-短时进程追踪工具
2020-02-01 pstree-显示子进程的父进程