核心区别(一句话)
- Labels:给 K8s"用来筛选/归类/选择"的标签(会参与 selector)。
- Annotations:给"系统/插件/人"附加的扩展信息(不用于 selector)。
具体对比
- 是否可被 selector 使用
- labels:可以(Service、Deployment、NetworkPolicy 等靠它选 Pod)
- annotations:不可以(K8s 不支持用 annotation 做 selector)
- 典型用途
- labels:应用/版本/环境分组(app=redis、tier=backend、env=prod)
- annotations:配置与元信息(Ingress 配置、CNI 写入的 Pod IP/网卡信息、Prometheus 抓取开关、变更原因/工单号)
- 稳定性与管理方式
- labels:更应保持简短、稳定、规范化(会影响大量对象匹配关系)
- annotations:可更灵活、可较长、可结构化(甚至 JSON),常被控制器/插件读写
选择建议
- 需要被"查找/选择/分组"(会进入各种 selector)→ 用 label
- 只是记录"配置/上下文/扩展信息"(不参与选择)→ 用 annotation