Labels & Selectors
在 Kubernetes 中, 标签(Labels)和选择算符(Selectors)是资源管理和调度的核心机制。它们就像“贴标签”和“筛选条件”,帮助我们灵活地组织和选择 Pod、Service 等对象。
🧩 标签(Labels)
- 定义:标签是附加在 Kubernetes 对象上的键值对。
- 作用:用于标识和分类对象,比如区分环境(dev、prod)、版本(v1、v2)、应用类型(frontend、backend)。
- 类比:标签就像超市商品上的“条码”或“分类标签”,帮助快速识别和分组。
📝 示例
apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
labels:
app: myapp
env: production
👉 这个 Pod 有两个标签:app=myapp 和 env=production。
🧩 选择算符(Selectors)
- 定义:选择算符是根据标签筛选对象的规则。
- 作用:Service、Deployment 等控制器通过选择算符找到对应的 Pod。
- 类比:选择算符就像“搜索过滤器”,比如在电商网站上选择“品牌=Apple,颜色=黑色”。
📌类型
- 基于等式的选择器:
env=productionapp!=test
- 基于集合的选择器:
env in (production, staging)tier notin (frontend, backend)
📝 示例:Service 使用选择算符
apiVersion: v1
kind: Service
metadata:
name: myapp-service
spec:
selector:
app: myapp
env: production
ports:
- port: 80
targetPort: 8080
👉 这个 Service 会选择所有带有 app=myapp 且 env=production 标签的 Pod。
⚠️ 注意事项
- 标签是 轻量级 的,可以随时添加或修改。
- 选择算符是 核心机制,决定了控制器和 Service 如何找到 Pod。
- 合理设计标签体系,可以让集群管理更清晰。
💡 总结
- 标签 = 条码:给对象贴上标识。
- 选择算符 = 筛选条件:根据标签筛选对象。
- 两者结合,让 Kubernetes 能够灵活地管理和调度资源。
🧩 Annotations
在 Kubernetes 中,Annotations(注解) 是一种给对象添加额外元数据的机制。它们和 Labels 类似,都是键值对,但用途不同。
🧩 Annotations 的作用
- 存储额外信息:保存一些不用于选择的元数据,比如构建信息、版本号、联系方式。
- 工具和插件使用:很多控制器、插件会通过注解来传递配置。
- 不影响调度:与标签不同,注解不会被选择算符用来筛选 Pod。
📌 类比理解
- Labels = 商品条码:用于分类和筛选,比如“这是牛奶”。
- Annotations = 商品说明书:提供额外信息,比如“生产日期、厂家、营养成分”。
- 标签决定“能不能被选中”,注解只是“附加说明”。
📝 示例配置
apiVersion: v1
kind: Pod
metadata:
name: annotated-pod
labels:
app: myapp
annotations:
description: "This pod runs the frontend service"
contact: "team@example.com"
buildVersion: "v1.2.3"
spec:
containers:
- name: app
image: nginx
👉 在这个 Pod 中:
- 标签
app=myapp用于 Service 或 Deployment 的选择。 - 注解
description、contact、buildVersion只是额外说明,不影响调度。
⚙️ 常见用途
- 记录信息:构建版本、镜像来源、维护人。
- 工具配置:Ingress 控制器、监控工具常用注解来传递参数。
- 自动化流程:CI/CD 系统可以通过注解传递构建信息。
⚠️ 注意事项
- 注解的内容可以很长,甚至是 JSON 或 YAML。
- 不要用注解来做选择器过滤,它们不是为此设计的。
- 合理使用注解,可以让集群更易于维护和自动化。
💡 总结
- Annotations 是 Kubernetes 的“说明书”机制。
- 它们存储额外的元数据,不影响调度和选择。
- 常用于工具配置、自动化和信息记录。

浙公网安备 33010602011771号