原文地址:http://kubernetes.io/v1.0/docs/user-guide/labels.html
Label的语法和字符要求
Label其实是一对 key/value,有效的Label keys必须是部分:一个可选前缀+名称,通过/来区分,名称部分是必须的,并且最多63个字符,开始和结束的字符必须是字母或者数字,中间是字母数字和”_”,”-“,”.”,前缀是刻有可无的,如果指定了,那么前缀必须是一个DNS子域,一系列的DNSlabel通过”.”来划分,长度不超过253个字符,“/”来结尾。如果前缀被省略了,这个Label的key被假定为对用户私有的,自动系统组成部分(比如kube-scheduler, kube-controller-manager, kube-apiserver, kubectl),这些为最终用户添加标签的必须要指定一个前缀,Kuberentes.io 前缀是为Kubernetes 内核部分保留的。
有效的label 的值部分必须不大于63个字符,可以是空开头,字母数字结尾,然后中间可以是字母数字和”_”,”-“,”.”
标签选择
不和名称和Uid一样,标签并不是唯一的,总体来说,我们希望多个对象拥有相同的标签
通过标签选择器,用户可以标示出一组特定的对象,标签选择器是Kubernete核心原始组的
现在api支持两种类型的选择器,equality-based 和 set-based,一个选择器可以有多个需求构成,通过“,”来进行分割,多个需求构成的情况下,所有的需求都必须满足,“,”相当于 “AND”
一个空的选择器会选择所有的对象
Equality-based 需求
Equality- 或者 inequality-based 的需求 允许根据key的值和value的值来过滤,符合条件的对象必须有所有的指定标签(并且key和value值也必须一样),当然,他们除了指定标签外可能还拥有其他的别的标签。三种类型的操作符分表是“=”,”==”,”!=”,具体什么意思我就不说了….
例如:
environment = production
tier != frontend
第一个条家选择了所有的资源中key 叫做“environment” 并且value “production”,第二个条件选择了 key是“tier”并且value不为“frontend”的资源,这样的花我们就选择出了生产环境下非前台的资源environment=production,tier!=frontend
Set-based 需求
set-based需求允许根据一系列的key值来过滤,符合的对象必须包含所有的key(所有的key,并且至少有一个value符合),三种操作符分别为:in ,notin ,exists,例如:
environment in (production, qa)
tier notin (frontend, backend)
partition
第一个例子选择了那些拥有key叫做environment的并且value为production或者qa,第二个例子选择了所有的拥有一个key 为tier的,并且值 不为 frontend, backend,第三个例子选择了所有包含key为partition的资源,value值没有限定,类似的,分隔符的意思是AND,例如,选择那些key=partition的(value不管),并且拥有key=environment且value不等于qa,例如:partition,environment notin (qa).environment=production 与environment in (production) 是等价的, 和notin 与!= 相同 一个道理
Equality-based 和Set-based 可以混用,例如
partition in (customerA, customerB),environment!=qa.
Latest posts by Zhiming Zhang (see all)
- aws eks node 自动化扩展工具 Karpenter - 8月 10, 2022
- ReplicationController and ReplicaSet in Kubernetes - 12月 20, 2021
- public key fingerprint - 5月 27, 2021