K8S Label 和 Selector

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.iok8s.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]string

    selector:
      component: redis
    
  • Deployment, StatefulSet, DaemonSet, ReplicaSet, Job

    sepc.selector.matchLabels = map[string]string

    sepc.selector.matchExpressions:

    • key: string
    • operator: In, NotIn, Exists or DoesNotExist
    • values: []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.nodeSelectorTerms
    • preferredDuringSchedulingIgnoredDuringExecution.preference
      • matchExpressions: by node labels
        • key: string
        • operator: In, NotIn, Exists, DoesNotExist, Gt or Lt
        • values: []string
      • matchFields: by node fields
        • key: string
        • operator: In, NotIn, Exists, DoesNotExist, Gt or Lt
        • values: []string

    spec.template.spec.affinity.podAffinity.requiredDuringSchedulingIgnoredDuringExecution

    spec.template.spec.affinity.podAffinity.preferredDuringSchedulingIgnoredDuringExecution.podAffinityTerm

    spec.template.spec.affinity.podAntiAffinity.requiredDuringSchedulingIgnoredDuringExecution

    spec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution.podAffinityTerm

    • labelSelector:
      • matchExpressions:
        • key: string
        • operator: In, NotIn, Exists or DoesNotExist
        • values: []string
      • matchLabels: map[string]string
    • namespaceSelector:
      • matchExpressions:
        • key: string
        • operator: In, NotIn, Exists or DoesNotExist
        • values: []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
    
Kubernetes中,Selector是一种用于筛选和匹配资源对象的机制。它可以用于选择特定的Pod、Service或其他Kubernetes对象。Selector通常与Label一起使用,Label是用于标识和分类资源对象的键值对。 使用Selector时,可以使用不同的操作符来指定匹配的要求。常见的操作符有等于(=)、不等于(!=)、存在(in)、不存在(not in)等。通过使用这些操作符,可以根据资源对象上的标签来进行精确的筛选和匹配。 例如,可以使用以下命令来筛选具有特定标签的节点: kubectl get nodes -l gpu=true 这将返回具有标签gpu=true的节点列表。同样,可以在其他资源对象上使用Selector来进行筛选和匹配。 SelectorKubernetes中非常有用的一个概念,它允许根据特定的标签来选择和操作资源对象,从而提供更灵活和精细的控制能力。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [node-policy-webhook:K8s webhook处理公差,nodeSelectornodeAffinity的配置文件](https://download.csdn.net/download/weixin_42162171/18952135)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [k8s Labels 和 Selectors](https://blog.csdn.net/qq_39122387/article/details/128141059)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [k8s概念之Namespace和Lable和Selector](https://blog.csdn.net/m0_37779570/article/details/90714845)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值