目录

    1. Labels

    1.1 什么是 Labels

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

    Labels 格式:

    "labels": {
      "key1" : "value1",
      "key2" : "value2"
    }
    

    格式要求:

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

    1.2 Labels 的用途

    用户使用 Labels,对资源对象进行标识、组织和选择。

    标签对于系统运行,没有直接意义,也不用于存储结构化或复杂数据。因为,标签将建立索引和反索引,用于查询和监控。

    对于附加在资源对象上的复杂结构,应该使用 annotation。

    annotation 可以将任意非标识元数据附加到对象上。使用工具和类库等客户端,我们可以检索这些数据。annotation 中的元数据可以是结构化的,也可以是非结构化的,同时对字符范围没有限制。

    1.3 Labels 操作

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

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

    kubectl label pods name tempLabel-
    pod/name labeled
    

    2. Labels Selectors

    2.1 什么是 Labels Selectors

    Labels Selectors,即标签选择器。

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

    2.2 Labels Selectors 的类型

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

    1. equality-based,基于等式

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

    frontend:environment=production, tier!=frontend
    
    1. set-based,基于集合

    基于集合的标签条件支持三种操作符: in , notin 和 exists。例如:

    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 中进行操作

    基于等式:

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

    基于集合:

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

    3. Field Selectors

    Field Selectors,字段选择器允许通过字段值过滤,来筛选资源对象。

    不同的资源对象,支持的过滤字段不同。所有资源类型都支持 metadata.namemetadata.namespace 字段过滤。

    下面是一个使用样例,选择 phase 字段为 Running 的所有 Pod :

    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
    ...