1. Labels
1.1 什么是 Labels
Labels 是一对关联到对象的键值对。可以在创建对象时,直接添加 Labels ,也可以在创建之后动态修改。
Labels 格式:
|
|
格式要求:
- Key,不能重复
- Value,须以字母或数字开头,可以使用字母、数字、连字符、点和下划线,最长63个字符
1.2 Labels 的用途
用户使用 Labels,对资源对象进行标识、组织和选择。
标签对于系统运行,没有直接意义,也不用于存储结构化或复杂数据。因为,标签将建立索引和反索引,用于查询和监控。
对于附加在资源对象上的复杂结构,应该使用 annotation。
annotation 可以将任意非标识元数据附加到对象上。使用工具和类库等客户端,我们可以检索这些数据。annotation 中的元数据可以是结构化的,也可以是非结构化的,同时对字符范围没有限制。
1.3 Labels 操作
- 查看名字为 name 的 Pod 详情
|
|
- 给名字为 name 的 Pod 添加 Label: tempLabel=True
|
|
- 将名字为 name 的 Pod 修改为 Label: tempLabel=False
|
|
- 给所有 Pod 添加 Labels
|
|
- 删除名字为 name 的 Pod 中,Key 为 tempLabel 的 Labels
删除时,只需要在 Key 值后面拼上 -
即可。
|
|
2. Labels Selectors
2.1 什么是 Labels Selectors
Labels Selectors,即标签选择器。
标签选择器是 Kubernetes 中的核心组成部分。在使用的过程当中,通常多个对象具有相同的标签。通过标签过滤出一组资源对象,批量进行操作。
2.2 Labels Selectors 的类型
Kubernetes 的 API 目前支持两种类型的选择器:
- equality-based,基于等式
基于等式的标签条件支持三种操作符:=、==、!=。其中,= 与 == 同义,多个条件可以使用逗号分隔连接。例如:
|
|
- set-based,基于集合
基于集合的标签条件支持三种操作符: in , notin 和 exists。例如:
|
|
2.3 如何使用 Labels Selectors
- 使用 API 进行查询过滤时,添加 GET 过滤参数即可
基于等式:
?labelSelector=environment%3Dproduction,tier%3Dfrontend
基于集合:
?labelSelector=environment+in+%28production%2Cqa%29%2Ctier+in+%28frontend%29
- 使用 Kubectl 在 Console 中进行操作
基于等式:
|
|
基于集合:
|
|
3. Field Selectors
Field Selectors,字段选择器允许通过字段值过滤,来筛选资源对象。
不同的资源对象,支持的过滤字段不同。所有资源类型都支持 metadata.name
和 metadata.namespace
字段过滤。
下面是一个使用样例,选择 phase 字段为 Running 的所有 Pod :
|
|