标签与注解是什么
两者都是挂在对象上的键值对,用途完全不同:标签(label)参与选择器匹配,服务路由、调度约束、告警筛选都靠它,因此键值的字符集与长度有严格限制;注解(annotation)不参与检索,用来存放发布说明、外部集成参数、证书信息这类较长内容。混淆两者的典型后果是希望筛选的信息写成了注解,查询时完全找不到。
基本信息
| 用法 | kubectl label <资源> <对象> 键=值;kubectl annotate 同理 |
|---|---|
| 覆盖已有值 | 需要显式加 --overwrite,否则只提示已存在、值不变 |
| 删除键 | 在键名后加短横线,如 kubectl label pod web-1 tier- |
| 批量操作 | 用 -l 指定选择器批量打标签或注解 |
| 字符限制 | 标签键值有长度与字符集限制,中文与大写字母会被拒绝 |
| 大小限制 | 注解总体积有上限,不适合放大型文件内容 |
典型使用场景
- 发布前打上变更说明注解,回滚时能直接看到每次发布做了什么
- 按版本或环境标签批量筛选对象,缩小排障范围
- 给对象标注负责人与工单编号,便于追责与协作
- 标记团队与成本中心,为费用归口提供依据
- 给入口或监控对象补充集成参数注解,驱动控制器行为
使用示例
使用示例
kubectl label pods -l app=web version=v2 --overwrite # 批量更新标签值
kubectl annotate deploy web kubernetes.io/change-cause="release 2026-10-13" # 记录发布说明
kubectl label pod web-1 tier- # 删除一个标签键
kubectl get pods -l app=web,version=v2 # 按标签组合筛选
kubectl rollout history deploy/web # 结合变更说明查看发布历史
kubectl label node node-1 zone=az1 --overwrite # 给节点打标签,配合调度约束使用标签与注解对照
| 维度 | 标签 | 注解 |
|---|---|---|
| 是否可检索 | 可被选择器使用 | 不可用于选择器 |
| 内容限制 | 键值长度与字符集受限 | 可放较长文本,但有总体积上限 |
| 典型用途 | 服务路由、调度、告警筛选 | 发布说明、外部集成参数 |
| 常见误用 | 值写中文或大写被拒 | 拿注解做筛选,查不到对象 |
滚动更新前打变更说明注解,发布历史里就能看到每次发布的说明,回滚时不必靠猜。
标签是路由的一部分:修改服务选择器依赖的标签前,先确认会波及哪些服务与端点。