K8S Label 和 Selector
1.Label标签(labels):附加到 k8s 对象上的键值对。用于指定对用户有意义且相关的对象的标识属性。示例标签:"release" : "stable", "release" : "canary""environment" : "dev", "environment" : "qa", "environment" : "production""tier" : "frontend", "ti
1.Label
标签(labels):附加到 k8s 对象上的键值对。用于指定对用户有意义且相关的对象的标识属性。
示例标签:
"release" : "stable","release" : "canary""environment" : "dev","environment" : "qa","environment" : "production""tier" : "frontend","tier" : "backend","tier" : "cache""partition" : "customerA","partition" : "customerB""track" : "daily","track" : "weekly"
推荐使用的标签:
apiVersion: apps/v1
kind: StatefulSet
metadata:
labels:
app.kubernetes.io/name: mysql
app.kubernetes.io/instance: mysql-abcxzy
app.kubernetes.io/version: "5.7.21"
app.kubernetes.io/managed-by: helm
app.kubernetes.io/component: database
app.kubernetes.io/part-of: wordpress
...
2. 语法
Label Key:
- 不超过63个字符
- 支持使用前缀,前缀必须是DNS子域,不超过253个字符。系统化组件创建的label必须指定前缀。
kubernetes.io和k8s.io由 kubernetes 保留 - 格式:
[A-Za-z0-9][A-Za-z0-9_\-\.]
Label Value:
- 不超过63个字符
- 格式:
[A-Za-z0-9][A-Za-z0-9_\-\.]
3. Label selector
Label 不是唯一的,很多对象可能有相同的label
通过 label selector,可指定一个object集合,通过 label selector 对 object 集合进行操作
两种类型:
-
equality-based: 使用=,==,!=操作符,可使用逗号分隔多个表达式:environment=production,tier!=frontend -
set-based:使用in,notin,!操作符。!表示没有该 label 的 object
$ kubectl get pods -l environment=production,tier=frontend
$ kubectl get pods -l 'environment in (production),tier in (frontend)'
$ kubectl get pods -l 'environment in (production, qa)'
$ kubectl get pods -l 'environment,environment notin (frontend)'
4. API
-
Service
spec.selector = map[string]stringselector: component: redis -
Deployment, StatefulSet, DaemonSet, ReplicaSet, Job
sepc.selector.matchLabels = map[string]stringsepc.selector.matchExpressions:key: stringoperator: In, NotIn, Exists or DoesNotExistvalues: []string
selector: matchLabels: component: redis matchExpressions: - {key: tier, operator: In, values: [cache]} - {key: environment, operator: NotIn, values: [dev]} -
node affinity 和 pod affinity 中的 selector
spec.template.spec.affinity.nodeAffinity:requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTermspreferredDuringSchedulingIgnoredDuringExecution.preferencematchExpressions: by node labelskey: stringoperator: In, NotIn, Exists, DoesNotExist, Gt or Ltvalues: []string
matchFields: by node fieldskey: stringoperator: In, NotIn, Exists, DoesNotExist, Gt or Ltvalues: []string
spec.template.spec.affinity.podAffinity.requiredDuringSchedulingIgnoredDuringExecutionspec.template.spec.affinity.podAffinity.preferredDuringSchedulingIgnoredDuringExecution.podAffinityTermspec.template.spec.affinity.podAntiAffinity.requiredDuringSchedulingIgnoredDuringExecutionspec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.podAffinityTermlabelSelector:matchExpressions:key: stringoperator: In, NotIn, Exists or DoesNotExistvalues: []string
matchLabels:map[string]string
namespaceSelector:matchExpressions:key: stringoperator: In, NotIn, Exists or DoesNotExistvalues: []string
matchLabels:map[string]string
affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: - k8s-node01 - k8s-node02 preferredDuringSchedulingIgnoredDuringExecution: - weight: 1 preference: matchExpressions: - key: another-node-label-key operator: In values: - another-node-label-value podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: - podAffinityTerm: labelSelector: matchExpressions: - key: app operator: In values: - kafka-container topologyKey: kubernetes.io/hostname weight: 100
更多推荐



所有评论(0)