标签与选择器 (Labels & Selectors)

标签 (Labels) 是附加到 Kubernetes 对象(如 Pod、Service)上的键值对,用于标识和组织资源。选择器 (Selectors) 是根据标签来查询和筛选资源的机制。

标签与选择器工作原理
graph LR
    subgraph "集群资源"
        P1[Pod 1
app=frontend
version=v1.0] P2[Pod 2
app=frontend
version=v1.0] P3[Pod 3
app=backend
version=v2.0] P4[Pod 4
app=backend
version=v2.0] P5[Pod 5
app=database
version=v1.0] end S[Service
选择器: app=frontend] DS[Deployment
选择器: app=backend
version=v2.0] S --> P1 S --> P2 DS --> P3 DS --> P4
标签最佳实践
推荐标签
  • app.kubernetes.io/name - 应用名称
  • app.kubernetes.io/version - 应用版本
  • app.kubernetes.io/component - 组件名称
  • app.kubernetes.io/part-of - 所属应用
  • app.kubernetes.io/managed-by - 管理工具
自定义标签
  • env - 环境 (dev/staging/prod)
  • team - 负责团队
  • tier - 层级 (frontend/backend)
  • release - 发布渠道
  • track - 发布轨道
选择器类型
选择器类型语法示例说明
等值匹配=, ==environment = production精确匹配指定值
不等值匹配!=version != v1.0匹配不等于指定值的资源
集合匹配in, notintier in (frontend, backend)匹配值在/不在指定集合中
存在匹配existsenvironment匹配存在指定键的资源
不存在匹配!key!deprecated匹配不存在指定键的资源
标签和选择器应用示例
# 为资源添加标签
apiVersion: apps/v1
kind: Deployment
metadata:
  name: frontend
  labels:
    app: frontend
    version: v1.0
    environment: production
spec:
  replicas: 3
  selector:
    matchLabels:
      app: frontend
  template:
    metadata:
      labels:
        app: frontend
        version: v1.0
    spec:
      containers:
      - name: frontend
        image: nginx:1.21
常用标签操作命令
# 通过标签查找资源
kubectl get pods -l environment=production
# 多个标签条件查找
kubectl get pods -l environment=production,tier=frontend
# 添加标签到现有资源
kubectl label pods my-pod version=v2.0
# 更新标签
kubectl label pods my-pod version=v3.0 --overwrite
# 删除标签
kubectl label pods my-pod version-
# 查看标签
kubectl get pods --show-labels