Kubernetes 之 Labels、Selectors

2023年 1月 4日 32.0k 0

1. Labels

1.1 什么是 Labels

Labels 是一对关联到对象的键值对。可以在创建对象时,直接添加 Labels ,也可以在创建之后动态修改。Labels 格式:

1
2
3
4
"labels": {
  "key1" : "value1",
  "key2" : "value2"
}

格式要求:

  • Key,不能重复
  • Value,须以字母或数字开头,可以使用字母、数字、连字符、点和下划线,最长63个字符

1.2 Labels 的用途

用户使用 Labels,对资源对象进行标识、组织和选择。标签对于系统运行,没有直接意义,也不用于存储结构化或复杂数据。因为,标签将建立索引和反索引,用于查询和监控。对于附加在资源对象上的复杂结构,应该使用 annotation。annotation 可以将任意非标识元数据附加到对象上。使用工具和类库等客户端,我们可以检索这些数据。annotation 中的元数据可以是结构化的,也可以是非结构化的,同时对字符范围没有限制。

1.3 Labels 操作

  • 查看名字为 name 的 Pod 详情
1
kubectl describe pods name
  • 给名字为 name 的 Pod 添加 Label: tempLabel=True
1
2
kubectl label pods name tempLabel=True
pod/name labeled
  • 将名字为 name 的 Pod 修改为 Label: tempLabel=False
1
2
kubectl label --overwrite pods name tempLabel=False
pod/name labeled
  • 给所有 Pod 添加 Labels
1
2
3
kubectl label pods --all tempLabel2=True
pod/kube-nginx-7c765ffd95-2pxfk labeled
...
  • 删除名字为 name 的 Pod 中,Key 为 tempLabel 的 Labels

删除时,只需要在 Key 值后面拼上 - 即可。

1
2
kubectl label pods name tempLabel-
pod/name labeled

2. Labels Selectors

2.1 什么是 Labels Selectors

Labels Selectors,即标签选择器。标签选择器是 Kubernetes 中的核心组成部分。在使用的过程当中,通常多个对象具有相同的标签。通过标签过滤出一组资源对象,批量进行操作。

2.2 Labels Selectors 的类型

Kubernetes 的 API 目前支持两种类型的选择器:

  • equality-based,基于等式
  • 基于等式的标签条件支持三种操作符:=、==、!=。其中,= 与 == 同义,多个条件可以使用逗号分隔连接。例如:

    1
    
    frontend:environment=production, tier!=frontend
    
  • set-based,基于集合
  • 基于集合的标签条件支持三种操作符: in , notin 和 exists。例如:

    1
    2
    3
    4
    
    environment in (production, qa)
    tier notin (frontend, backend)
    partition
    !partition
    

    2.3 如何使用 Labels Selectors

    • 使用 API 进行查询过滤时,添加 GET 过滤参数即可

    基于等式:?labelSelector=environment%3Dproduction,tier%3Dfrontend基于集合:?labelSelector=environment+in+%28production%2Cqa%29%2Ctier+in+%28frontend%29

    • 使用 Kubectl 在 Console 中进行操作

    基于等式:

    1
    
    kubectl get pods -l environment=production,tier=frontend
    

    基于集合:

    1
    
    kubectl get pods -l 'environment in (production),tier in (frontend)'
    

    3. Field Selectors

    Field Selectors,字段选择器允许通过字段值过滤,来筛选资源对象。不同的资源对象,支持的过滤字段不同。所有资源类型都支持 metadata.namemetadata.namespace 字段过滤。下面是一个使用样例,选择 phase 字段为 Running 的所有 Pod :

    1
    2
    3
    4
    5
    
    kubectl get pods --field-selector status.phase=Running
    NAME                                              READY   STATUS    RESTARTS   AGE
    kube-nginx-7c765ffd95-2pxfk                       1/1     Running   3          17d
    my-harbor-harbor-chartmuseum-567fb69cb6-q88ss     1/1     Running   0          3d20h
    ...
    

    相关文章

    KubeSphere 部署向量数据库 Milvus 实战指南
    探索 Kubernetes 持久化存储之 Longhorn 初窥门径
    征服 Docker 镜像访问限制!KubeSphere v3.4.1 成功部署全攻略
    那些年在 Terraform 上吃到的糖和踩过的坑
    无需 Kubernetes 测试 Kubernetes 网络实现
    Kubernetes v1.31 中的移除和主要变更

    发布评论