v1.16.7
https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/
label是添加标签的,selector是选择标签的。
Label
Label(标签)是 Kubernetes 系统中另外一个核心概念。一个 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" : "cache"
"partition" : "customerA"
,"partition" : "customerB"
"track" : "daily"
,"track" : "weekly"
Label 由 key: values
对组成,key
由两部分组成,可选的前缀与名称,中间用 /
分开。如:
labels:
addonmanager.kubernetes.io/mode: Reconcile
k8s-app: kube-dns
kubernetes.io/cluster-service: "true"
kubernetes.io/name: CoreDNS
名称是必须的。前缀是可选的,如果存在,则必须是由 .
分割的 DNS 域名。
kubernetes.io/
和 k8s.io/
前缀保留给 Kubernetes 核心组件
Selector
Selector, 标签选择器, 通过查找标签确定资源对象。
LabelSelector
可以被类比为SQL语句中的where
查询条件,例如,name=redisslave
这个LabelSelector
作用于Pod
时,可以被类比为select * from pod where pod's name='redisslave'
这样的语句。
基础写法
基础的selector标签。
selector:
dev: pro
app: se-test3
or
selector:
matchLabels:
dev: pro
app: se-test3
这些条件都是and关系。只有满足dev
=pro
和app
=se-test3
的才会匹配。
matchLabels
用于定义一组Label,与直接写在Selector中的作用相同。
基于集合
matchExpressions
用于定义一组基于集合的筛选条件,可用的条件运算符包括In
、NotIn
、Exists
和DoesNotExist
。
selector:
matchLabels:
component: redis
matchExpressions:
- {key: tier, operator: In, values: [cache]}
- {key: environment, operator: NotIn, values: [dev]}
如果同时设置了matchLabels和matchExpressions,则两组条件为AND关系
当前有两种LabelSelector表达式:基于等式的(Equalitybased)和基于集合的(Setbased)。
警告:基于等式的和基于集合的,都没有逻辑OR(||)运算符。
service
不能使用matchLabels
和matchExpressions
,只有Deployment、ReplicaSet、DaemonSet和Job可以使用。
基于等式
官方网站没有明确说,只是说可以使用=
,==
,!=
。
environment = production
tier != frontend
但是yaml文件里是用不了的。
然后有一个例子:
apiVersion: v1
kind: Pod
metadata:
name: cuda-test
spec:
containers:
- name: cuda-test
image: "k8s.gcr.io/cuda-vector-add:v0.1"
resources:
limits:
nvidia.com/gpu: 1
nodeSelector:
accelerator: nvidia-tesla-p100
看这意思,那种基础写法也叫做基于等式的。