Kubernetes必备知识: Selectors-阿里云开发者社区

开发者社区> 阿里云术语库> 正文

Kubernetes必备知识: Selectors

简介: Label不是唯一的,很多object可能有相同的label。 通过label selector,客户端/用户可以指定一个object集合,通过label selector对object的集合进行操作。

所属技术领域:

K8s

|名词定义|

Label不是唯一的,很多object可能有相同的label。
通过label selector,客户端/用户可以指定一个object集合,通过label selector对object的集合进行操作。

|技术特点|

 Label selector的例子
最常见的 Selector 就是相等型 Selector。现在举一个简单的例子:
假设系统中有四个 Pod,每个 Pod 都有标识系统层级和环境的标签,我们通过 Tie:front 这个标签,可以匹配左边栏的 Pod,相等型 Selector 还可以包括多个相等条件,多个相等条件之间是逻辑”与“的关系。
在刚才的例子中,通过 Tie=front,Env=dev 的 Selector,我们可以筛选出所有 Tie=front,而且 Env=dev 的 Pod,也就是下图中左上角的 Pod。另外一种 Selector 是集合型 Selector,在例子中,Selector 筛选所有环境是 test 或者 gray 的 Pod。
除了 in 的集合操作外,还有 notin 集合操作,比如 tie notin(front,back),将会筛选所有 tie 不是 front 且不是 back 的 Pod。另外,也可以根据是否存在某 lable 的筛选,如:Selector release,筛选所有带 release 标签的 Pod。集合型和相等型的 Selector,也可以用“,”来连接,同样的标识逻辑”与“的关系。
 Label selector的类型
Label selector有两种类型:

equality-based :可以使用=、==、!=操作符,可以使用逗号分隔多个表达式
set-based :可以使用in、notin、!操作符,另外还可以没有操作符,直接写出某个label的key,表示过滤有某个key的object而不管该key的value是何值,!表示没有该label的object
使用
1.kubectl get pods -l environment=production,tier=frontend
2.kubectl get pods -l 'environment in (production, qa)'
 API使用 label selector
1.在service、replicationcontroller等object中有对pod的label selector,使用方法只能使用等于操作,例如:
selector:

component: redis

2.Job, Deployment, Replica Set, Daemon Set 类型支持set-based 操作
selector:
matchLabels:

component: redis

matchExpressions:

- {key: tier, operator: In, values: [cache]}
- {key: environment, operator: NotIn, values: [dev]}

matchlabels是{key,value}对的映射。matchlabels映射中的单个{key,value}等价于matchexpressions的元素,其键字段为“key”,运算符为“in”,值数组仅包含“value”。matchexpressions是pod选择器需求的列表。有效的运算符包括in、notin、exists和doesnotexist。对于in和notin,设置的值必须为非空。matchlabels和matchexpressions中的所有要求都被放在一起-必须满足所有这些要求才能匹配
 Label Selector的表达式
当前有两种Label Selector的表达式:基于等式的(Equality-based)和基于集合(Set-based)。
基于等式的表达式匹配标签实例:
• name=redis-slave:匹配所有具有标签name=redis-slave的资源对象。
• env!=production: 匹配不具有标签name=production的资源对象。
基于集合方式的表达式匹配标签实例:
• name in (redis-slave, redis-master):匹配所有具有标签name=redis-slave或name=redis-master的资源对象。
• name not in (php-frontend):匹配不具有标签name=php-frontend的资源对象。
可以通过多个Label Selector表达式的组合实现复杂的条件选择,多个表达式之间用“,”分隔即可,几个条件是and的关系,即同时满足多个条件,如:
• name=redis-slave, env!=production
• name not in (php-frontend), env!=production
Label Selector在k8s中重要使用场景有下面几处:
• kube-controller-manage进程通过资源对象RC上定义的Label Selector来筛选要监控的Pod副本的数量。
• kube-proxy进程通过Service的Label Selector来选择对于那个的Pod,自动建立起Service对应每个Pod的请求转发路由表,从而实现Service的智能负载均衡机制。
• 通过对某些Node定义特定的Label,并且Pod定义文件中使用NodeSelector这种标签调度策略,kube-schedule进程可以实现Pod“定向调度”的特性。

|资料来源|

名词定义:https://blog.csdn.net/textdemo123/article/details/101774622
技术特点:https://blog.csdn.net/textdemo123/article/details/101774622
技术特点:https://www.jianshu.com/p/edd3c243c894

版权声明:本文中所有内容均属于阿里云开发者社区所有,任何媒体、网站或个人未经阿里云开发者社区协议授权不得转载、链接、转贴或以其他方式复制发布/发表。申请授权请邮件developerteam@list.alibaba-inc.com,已获得阿里云开发者社区协议授权的媒体、网站,在转载使用时必须注明"稿件来源:阿里云开发者社区,原文作者姓名",违者本社区将依法追究责任。 如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:developer2020@service.aliyun.com 进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:

阿里云术语库提供术语的标准定义、缩略语、术语用法及多语言等,提供术语的增删改查等功能。

官方博客
官网链接