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定向调度的特性。

 

 

 

posted @   星火撩原  阅读(75)  评论(0编辑  收藏  举报
编辑推荐:
· 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-显示子进程的父进程
点击右上角即可分享
微信分享提示