标签选择器是什么
标签是附着在对象上的键值对,选择器则是按标签筛选对象的表达式。它让批量操作成为可能:一次列出某个应用的全部实例、一次抓取一组实例的日志、一次删除某个版本的全部对象。集群内部的服务路由、副本归属同样依赖标签匹配,因此标签是对象之间建立关系的通用手段。
三种表达形式
等值表达最常用,只匹配键值完全相同的对象;集合表达可以一次列出多个取值,也可以做到排除某个取值;存在性表达用来判断键有没有出现。多个条件用逗号连接表示同时满足。需要注意没有某个标签的对象不会被等值条件选中,这与「值不等于」是两个不同含义。
基本信息
| 适用环境 | 任何 Kubernetes 发行版,几乎所有资源都支持标签 |
|---|---|
| 等值形式 | 键等于某个值,或键不等于某个值 |
| 集合形式 | 取值在给定列表中,或不在列表中 |
| 存在性形式 | 只判断键是否存在 |
| 组合方式 | 多个条件用逗号连接表示同时成立 |
| 典型用途 | 批量查询、批量操作、服务路由与副本归属 |
典型使用场景
- 批量查询:列出某个应用的全部实例并查看状态分布
- 聚合日志:一次抓取同一组实例的日志判断故障范围
- 批量删除:清理某个版本或某个实验组的全部对象
- 服务排查:确认服务的选择器能否选中预期的实例
- 发布核对:确认新版本实例的标签符合预期
- 环境筛选:按环境或团队标签缩小巡检范围
常用示例
常用示例
kubectl get pods -l app=web # 等值匹配
kubectl get pods -l 'env in (prod,staging)' # 取值在列表中
kubectl get pods -l 'tier!=frontend' # 键存在且值不等于
kubectl get pods -l app=web,tier=backend # 逗号表示同时满足
kubectl get pods -l 'app.kubernetes.io/name=web' # 带斜杠的标准键
kubectl get pods --show-labels # 查看对象现有标签表达形式对照
| 形式 | 含义 | 容易误解之处 |
|---|---|---|
| 等值匹配 | 键值完全相同 | 没有该键的对象不会被选中 |
| 取值列表 | 值属于给定集合 | 需整体加引号避免被外层拆词 |
| 值不等于 | 键存在且值不同 | 无该键的对象同样不被选中 |
| 键存在判断 | 只判断键是否出现 | 与取值条件混用时注意语义 |
| 多条件组合 | 逗号表示同时满足 | 没有「或」的简写方式 |
表达式建议整体加引号,含括号与感叹号的条件在部分外层解释器里会被当作特殊字符处理。
用标签选择器配合删除时范围由标签决定,误加一个宽松条件可能选中远超预期的对象,执行前先用查询命令核对结果集。