Skip to content

标签与选择器

概述

标签(Labels)是附加在Kubernetes对象上的键值对,用于标识和组织资源。选择器(Selectors)用于根据标签筛选资源,是Kubernetes实现资源分组、调度和服务发现的核心机制。

核心概念

标签的特点

  • 键值对形式:key: value格式
  • 可修改:运行时可以添加、修改、删除
  • 可查询:通过选择器筛选资源
  • 轻量级:不存储大量数据,仅用于标识

标签与注解的区别

  • 标签:用于标识和选择对象,支持查询
  • 注解:用于存储非标识性元数据,不支持查询

标签的用途

  • 资源分组和管理
  • 调度约束和亲和性
  • 服务发现和负载均衡
  • 监控和告警规则

标签管理

标签定义

yaml
apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
  labels:
    # 基本标签
    app: nginx
    version: v1.20
    
    # 环境标签
    environment: production
    tier: frontend
    
    # 组织标签
    team: platform
    department: engineering
    
    # 自定义标签
    release: stable
    track: daily
spec:
  containers:
  - name: nginx
    image: nginx:1.20

标签命名规范

yaml
# 标签键格式:<prefix>/<name>
# prefix:可选,必须是DNS子域名,最长253字符
# name:必需,最长63字符,以字母数字开头和结尾

# 推荐的标签前缀
labels:
  # Kubernetes推荐标签
  app.kubernetes.io/name: nginx
  app.kubernetes.io/instance: nginx-prod
  app.kubernetes.io/version: "1.20"
  app.kubernetes.io/component: web-server
  app.kubernetes.io/part-of: webapp
  app.kubernetes.io/managed-by: kubectl
  
  # 自定义前缀
  mycompany.com/team: platform
  mycompany.com/environment: production
  mycompany.com/tier: frontend
  
  # 无前缀标签
  app: nginx
  version: v1.20
  environment: production

标签操作命令

bash
# 添加标签
kubectl label pod nginx-pod app=nginx
kubectl label pod nginx-pod environment=production

# 修改标签
kubectl label pod nginx-pod environment=staging --overwrite

# 删除标签
kubectl label pod nginx-pod environment-

# 查看标签
kubectl get pods --show-labels
kubectl get pods -L app,environment

# 按标签筛选
kubectl get pods -l app=nginx
kubectl get pods -l 'environment in (production,staging)'

# 按标签删除
kubectl delete pods -l app=nginx

# 批量添加标签
kubectl label pods -l app=nginx tier=frontend

选择器使用

等值选择器(Equality-based)

yaml
# 支持的操作符:=, ==, !=
apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
  labels:
    app: nginx
    environment: production
spec:
  containers:
  - name: nginx
    image: nginx:1.20
---
# 使用等值选择器的Service
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
    environment: production
  ports:
  - port: 80
    targetPort: 80
bash
# 等值选择器命令示例
# 选择app=nginx的Pod
kubectl get pods -l app=nginx

# 选择environment!=production的Pod
kubectl get pods -l environment!=production

# 多条件选择
kubectl get pods -l app=nginx,environment=production

集合选择器(Set-based)

yaml
# 支持的操作符:in, notin, exists, does not exist
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
    matchExpressions:
    - key: environment
      operator: In
      values:
      - production
      - staging
    - key: tier
      operator: NotIn
      values:
      - database
    - key: track
      operator: Exists
    - key: experimental
      operator: DoesNotExist
  template:
    metadata:
      labels:
        app: nginx
        environment: production
        tier: frontend
        track: daily
    spec:
      containers:
      - name: nginx
        image: nginx:1.20
bash
# 集合选择器命令示例
# environment in (production, staging)
kubectl get pods -l 'environment in (production,staging)'

# environment notin (development, test)
kubectl get pods -l 'environment notin (development,test)'

# 存在track标签
kubectl get pods -l 'track'

# 不存在experimental标签
kubectl get pods -l '!experimental'

# 组合选择
kubectl get pods -l 'app=nginx,environment in (production,staging),!experimental'

选择器在资源中的应用

yaml
# 1. Service选择器
apiVersion: v1
kind: Service
metadata:
  name: webapp-service
spec:
  selector:
    app: webapp
    tier: frontend
  ports:
  - port: 80
    targetPort: 8080
---
# 2. Deployment选择器
apiVersion: apps/v1
kind: Deployment
metadata:
  name: webapp-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: webapp
    matchExpressions:
    - key: environment
      operator: In
      values:
      - production
      - staging
  template:
    metadata:
      labels:
        app: webapp
        environment: production
    spec:
      containers:
      - name: webapp
        image: webapp:v1
---
# 3. ReplicaSet选择器
apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: webapp-rs
spec:
  replicas: 3
  selector:
    matchLabels:
      app: webapp
      version: v1
  template:
    metadata:
      labels:
        app: webapp
        version: v1
    spec:
      containers:
      - name: webapp
        image: webapp:v1
---
# 4. Job选择器
apiVersion: batch/v1
kind: Job
metadata:
  name: batch-job
spec:
  selector:
    matchLabels:
      job-type: batch
  template:
    metadata:
      labels:
        job-type: batch
    spec:
      containers:
      - name: batch
        image: batch-processor:v1
      restartPolicy: OnFailure

应用分组

环境分组

yaml
# 开发环境应用
apiVersion: apps/v1
kind: Deployment
metadata:
  name: webapp-dev
spec:
  replicas: 1
  selector:
    matchLabels:
      app: webapp
      environment: development
  template:
    metadata:
      labels:
        app: webapp
        environment: development
        tier: frontend
    spec:
      containers:
      - name: webapp
        image: webapp:dev
---
# 测试环境应用
apiVersion: apps/v1
kind: Deployment
metadata:
  name: webapp-staging
spec:
  replicas: 2
  selector:
    matchLabels:
      app: webapp
      environment: staging
  template:
    metadata:
      labels:
        app: webapp
        environment: staging
        tier: frontend
    spec:
      containers:
      - name: webapp
        image: webapp:staging
---
# 生产环境应用
apiVersion: apps/v1
kind: Deployment
metadata:
  name: webapp-prod
spec:
  replicas: 3
  selector:
    matchLabels:
      app: webapp
      environment: production
  template:
    metadata:
      labels:
        app: webapp
        environment: production
        tier: frontend
    spec:
      containers:
      - name: webapp
        image: webapp:v1.0

应用分层

yaml
# 前端层
apiVersion: apps/v1
kind: Deployment
metadata:
  name: frontend
spec:
  replicas: 3
  selector:
    matchLabels:
      app: webapp
      tier: frontend
  template:
    metadata:
      labels:
        app: webapp
        tier: frontend
        layer: presentation
    spec:
      containers:
      - name: nginx
        image: nginx:1.20
---
# 后端层
apiVersion: apps/v1
kind: Deployment
metadata:
  name: backend
spec:
  replicas: 3
  selector:
    matchLabels:
      app: webapp
      tier: backend
  template:
    metadata:
      labels:
        app: webapp
        tier: backend
        layer: application
    spec:
      containers:
      - name: api
        image: api-server:v1
---
# 数据层
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: database
spec:
  serviceName: database
  replicas: 3
  selector:
    matchLabels:
      app: webapp
      tier: database
  template:
    metadata:
      labels:
        app: webapp
        tier: database
        layer: data
    spec:
      containers:
      - name: mysql
        image: mysql:8.0

版本管理

yaml
# 版本v1
apiVersion: apps/v1
kind: Deployment
metadata:
  name: webapp-v1
spec:
  replicas: 3
  selector:
    matchLabels:
      app: webapp
      version: v1
  template:
    metadata:
      labels:
        app: webapp
        version: v1
        track: stable
    spec:
      containers:
      - name: webapp
        image: webapp:v1.0
---
# 版本v2(金丝雀发布)
apiVersion: apps/v1
kind: Deployment
metadata:
  name: webapp-v2
spec:
  replicas: 1
  selector:
    matchLabels:
      app: webapp
      version: v2
  template:
    metadata:
      labels:
        app: webapp
        version: v2
        track: canary
    spec:
      containers:
      - name: webapp
        image: webapp:v2.0
---
# Service同时选择v1和v2
apiVersion: v1
kind: Service
metadata:
  name: webapp-service
spec:
  selector:
    app: webapp
  ports:
  - port: 80
    targetPort: 8080

实用kubectl操作命令

标签管理命令

bash
# 添加标签
kubectl label pod <pod-name> key=value
kubectl label deployment <deploy-name> key=value
kubectl label node <node-name> key=value

# 修改标签
kubectl label pod <pod-name> key=newvalue --overwrite

# 删除标签
kubectl label pod <pod-name> key-

# 查看标签
kubectl get pods --show-labels
kubectl get pods -L key1,key2,key3
kubectl get nodes --show-labels

# 批量操作
kubectl label pods -l app=nginx tier=frontend
kubectl label nodes --all node-type=worker

选择器查询命令

bash
# 等值选择器
kubectl get pods -l app=nginx
kubectl get pods -l app=nginx,environment=production
kubectl get pods -l environment!=production

# 集合选择器
kubectl get pods -l 'environment in (production,staging)'
kubectl get pods -l 'environment notin (development,test)'
kubectl get pods -l 'track'
kubectl get pods -l '!experimental'

# 组合选择器
kubectl get pods -l 'app=nginx,environment in (production,staging),!experimental'

# 按标签排序
kubectl get pods --sort-by=.metadata.labels.app

# 输出特定标签
kubectl get pods -o custom-columns=\
'NAME:.metadata.name,\
APP:.metadata.labels.app,\
ENV:.metadata.labels.environment'

# JSONPath查询
kubectl get pods -o jsonpath='{.items[?(@.metadata.labels.app=="nginx")].metadata.name}'

高级操作命令

bash
# 查看所有标签
kubectl get pods --show-labels | awk -F ' ' '{print $NF}' | tr ',' '\n' | sort | uniq

# 统计标签使用情况
kubectl get pods -o json | jq -r '.items[].metadata.labels | to_entries[] | .key + "=" + .value' | sort | uniq -c

# 按标签分组
kubectl get pods -o json | jq -r '.items | group_by(.metadata.labels.app) | .[] | {app: .[0].metadata.labels.app, count: length}'

# 查找未设置标签的资源
kubectl get pods -o json | jq -r '.items[] | select(.metadata.labels.app == null) | .metadata.name'

# 导出标签到文件
kubectl get pods --show-labels -o custom-columns=\
'NAME:.metadata.name,\
LABELS:.metadata.labels' > labels.txt

# 批量更新标签
kubectl get pods -l app=nginx -o name | xargs -I {} kubectl label {} updated=true

实践示例

示例1:微服务应用标签管理

yaml
# API服务
apiVersion: apps/v1
kind: Deployment
metadata:
  name: api-service
  labels:
    app.kubernetes.io/name: api-service
    app.kubernetes.io/instance: api-prod
    app.kubernetes.io/version: "1.0.0"
    app.kubernetes.io/component: api
    app.kubernetes.io/part-of: microservices
    app.kubernetes.io/managed-by: kubectl
spec:
  replicas: 3
  selector:
    matchLabels:
      app.kubernetes.io/name: api-service
  template:
    metadata:
      labels:
        app.kubernetes.io/name: api-service
        app.kubernetes.io/instance: api-prod
        app.kubernetes.io/version: "1.0.0"
        app.kubernetes.io/component: api
        app.kubernetes.io/part-of: microservices
    spec:
      containers:
      - name: api
        image: api-service:v1.0.0
        ports:
        - containerPort: 8080
---
# Web服务
apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-service
  labels:
    app.kubernetes.io/name: web-service
    app.kubernetes.io/instance: web-prod
    app.kubernetes.io/version: "2.0.0"
    app.kubernetes.io/component: web
    app.kubernetes.io/part-of: microservices
    app.kubernetes.io/managed-by: kubectl
spec:
  replicas: 2
  selector:
    matchLabels:
      app.kubernetes.io/name: web-service
  template:
    metadata:
      labels:
        app.kubernetes.io/name: web-service
        app.kubernetes.io/instance: web-prod
        app.kubernetes.io/version: "2.0.0"
        app.kubernetes.io/component: web
        app.kubernetes.io/part-of: microservices
    spec:
      containers:
      - name: web
        image: web-service:v2.0.0
        ports:
        - containerPort: 80
---
# 数据库服务
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: database
  labels:
    app.kubernetes.io/name: database
    app.kubernetes.io/instance: db-prod
    app.kubernetes.io/version: "8.0"
    app.kubernetes.io/component: database
    app.kubernetes.io/part-of: microservices
    app.kubernetes.io/managed-by: kubectl
spec:
  serviceName: database
  replicas: 3
  selector:
    matchLabels:
      app.kubernetes.io/name: database
  template:
    metadata:
      labels:
        app.kubernetes.io/name: database
        app.kubernetes.io/instance: db-prod
        app.kubernetes.io/version: "8.0"
        app.kubernetes.io/component: database
        app.kubernetes.io/part-of: microservices
    spec:
      containers:
      - name: mysql
        image: mysql:8.0
        ports:
        - containerPort: 3306
---
# Service配置
apiVersion: v1
kind: Service
metadata:
  name: api-service
spec:
  selector:
    app.kubernetes.io/name: api-service
  ports:
  - port: 8080
    targetPort: 8080
---
apiVersion: v1
kind: Service
metadata:
  name: web-service
spec:
  selector:
    app.kubernetes.io/name: web-service
  ports:
  - port: 80
    targetPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: database
spec:
  selector:
    app.kubernetes.io/name: database
  ports:
  - port: 3306
    targetPort: 3306

应用场景:使用Kubernetes推荐标签规范管理微服务应用。

示例2:多租户资源分组

yaml
# 租户A的应用
apiVersion: apps/v1
kind: Deployment
metadata:
  name: tenant-a-app
  labels:
    app: tenant-a-app
    tenant: tenant-a
    environment: production
    tier: gold
spec:
  replicas: 3
  selector:
    matchLabels:
      app: tenant-a-app
      tenant: tenant-a
  template:
    metadata:
      labels:
        app: tenant-a-app
        tenant: tenant-a
        environment: production
    spec:
      containers:
      - name: app
        image: tenant-a-app:v1
---
# 租户B的应用
apiVersion: apps/v1
kind: Deployment
metadata:
  name: tenant-b-app
  labels:
    app: tenant-b-app
    tenant: tenant-b
    environment: production
    tier: silver
spec:
  replicas: 2
  selector:
    matchLabels:
      app: tenant-b-app
      tenant: tenant-b
  template:
    metadata:
      labels:
        app: tenant-b-app
        tenant: tenant-b
        environment: production
    spec:
      containers:
      - name: app
        image: tenant-b-app:v1
---
# 租户C的应用
apiVersion: apps/v1
kind: Deployment
metadata:
  name: tenant-c-app
  labels:
    app: tenant-c-app
    tenant: tenant-c
    environment: production
    tier: bronze
spec:
  replicas: 1
  selector:
    matchLabels:
      app: tenant-c-app
      tenant: tenant-c
  template:
    metadata:
      labels:
        app: tenant-c-app
        tenant: tenant-c
        environment: production
    spec:
      containers:
      - name: app
        image: tenant-c-app:v1
---
# NetworkPolicy限制租户间访问
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: tenant-a-policy
spec:
  podSelector:
    matchLabels:
      tenant: tenant-a
  policyTypes:
  - Ingress
  - Egress
  ingress:
  - from:
    - podSelector:
        matchLabels:
          tenant: tenant-a
  egress:
  - to:
    - podSelector:
        matchLabels:
          tenant: tenant-a

应用场景:使用标签实现多租户资源分组和网络隔离。

示例3:金丝雀发布标签管理

yaml
# 稳定版本
apiVersion: apps/v1
kind: Deployment
metadata:
  name: webapp-stable
spec:
  replicas: 9
  selector:
    matchLabels:
      app: webapp
      track: stable
  template:
    metadata:
      labels:
        app: webapp
        track: stable
        version: v1.0.0
    spec:
      containers:
      - name: webapp
        image: webapp:v1.0.0
        ports:
        - containerPort: 8080
        env:
        - name: VERSION
          value: "v1.0.0"
---
# 金丝雀版本
apiVersion: apps/v1
kind: Deployment
metadata:
  name: webapp-canary
spec:
  replicas: 1
  selector:
    matchLabels:
      app: webapp
      track: canary
  template:
    metadata:
      labels:
        app: webapp
        track: canary
        version: v2.0.0
    spec:
      containers:
      - name: webapp
        image: webapp:v2.0.0
        ports:
        - containerPort: 8080
        env:
        - name: VERSION
          value: "v2.0.0"
---
# Service同时选择stable和canary
apiVersion: v1
kind: Service
metadata:
  name: webapp-service
spec:
  selector:
    app: webapp
  ports:
  - port: 80
    targetPort: 8080
---
# Prometheus监控规则
apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
  name: webapp-alerts
spec:
  groups:
  - name: webapp-alerts
    rules:
    - alert: CanaryErrorRateHigh
      expr: |
        sum(rate(http_requests_total{job="webapp",track="canary",status=~"5.."}[5m])) /
        sum(rate(http_requests_total{job="webapp",track="canary"}[5m])) > 0.05
      for: 5m
      labels:
        severity: critical
        track: canary
      annotations:
        summary: "Canary version error rate is high"
        description: "Canary version error rate is {{ $value }}"

应用场景:使用标签管理金丝雀发布,实现流量分配和监控。

故障排查指南

常见问题诊断

1. 标签选择器不匹配

bash
# 查看Pod标签
kubectl get pods --show-labels

# 查看Service选择器
kubectl get svc <service-name> -o yaml | grep -A 5 selector

# 查看Deployment选择器
kubectl get deploy <deploy-name> -o yaml | grep -A 10 selector

# 检查标签匹配
kubectl get pods -l app=nginx --show-labels

# 解决方案
# 1. 确保Pod标签与Service选择器匹配
# 2. 检查标签键名和值是否正确
# 3. 注意标签的大小写

2. 标签冲突

bash
# 查看重复标签
kubectl get pods --show-labels | grep 'app=nginx'

# 查看标签使用情况
kubectl get pods -o json | jq -r '.items[].metadata.labels.app' | sort | uniq -c

# 解决方案
# 1. 使用唯一的标签组合
# 2. 添加额外的标签区分资源
# 3. 使用命名空间隔离

3. 标签更新导致资源不匹配

bash
# 查看Deployment的Pod模板标签
kubectl get deploy <deploy-name> -o jsonpath='{.spec.template.metadata.labels}'

# 查看实际Pod标签
kubectl get pods -l app=<app-name> --show-labels

# 解决方案
# 1. 更新Deployment时确保标签一致
# 2. 使用kubectl apply而不是kubectl edit
# 3. 检查Pod模板和选择器的匹配

4. 标签选择器语法错误

bash
# 错误示例
kubectl get pods -l 'environment in production'  # 缺少括号

# 正确示例
kubectl get pods -l 'environment in (production)'

# 常见语法错误
# 1. 集合选择器缺少括号
# 2. 引号使用错误
# 3. 操作符拼写错误

# 调试选择器
kubectl get pods -l '<your-selector>' -v=6

标签管理脚本

bash
#!/bin/bash
# 标签管理脚本

echo "=== 标签使用统计 ==="
kubectl get pods --all-namespaces -o json | \
  jq -r '.items[].metadata.labels | to_entries[] | .key + "=" + .value' | \
  sort | uniq -c | sort -rn | head -20

echo -e "\n=== 缺少必要标签的Pod ==="
kubectl get pods --all-namespaces -o json | \
  jq -r '.items[] | select(.metadata.labels.app == null) | .metadata.name'

echo -e "\n=== 标签不一致的Deployment ==="
for deploy in $(kubectl get deployments --all-namespaces -o jsonpath='{.items[*].metadata.name}'); do
  ns=$(kubectl get deployment $deploy --all-namespaces -o jsonpath='{.items[0].metadata.namespace}')
  selector=$(kubectl get deployment $deploy -n $ns -o jsonpath='{.spec.selector.matchLabels}')
  template_labels=$(kubectl get deployment $deploy -n $ns -o jsonpath='{.spec.template.metadata.labels}')
  if [ "$selector" != "$template_labels" ]; then
    echo "Deployment: $deploy (Namespace: $ns)"
    echo "  Selector: $selector"
    echo "  Template: $template_labels"
  fi
done

echo -e "\n=== Service未匹配到Pod ==="
for svc in $(kubectl get services --all-namespaces -o jsonpath='{.items[*].metadata.name}'); do
  ns=$(kubectl get service $svc --all-namespaces -o jsonpath='{.items[0].metadata.namespace}')
  selector=$(kubectl get service $svc -n $ns -o jsonpath='{.spec.selector}')
  if [ -n "$selector" ] && [ "$selector" != "{}" ]; then
    endpoints=$(kubectl get endpoints $svc -n $ns -o jsonpath='{.subsets}')
    if [ -z "$endpoints" ]; then
      echo "Service: $svc (Namespace: $ns)"
      echo "  Selector: $selector"
      echo "  Status: No matching pods"
    fi
  fi
done

最佳实践建议

1. 标签命名规范

yaml
# 推荐使用Kubernetes官方标签
labels:
  # 应用标识
  app.kubernetes.io/name: myapp
  app.kubernetes.io/instance: myapp-prod
  app.kubernetes.io/version: "1.0.0"
  
  # 组件信息
  app.kubernetes.io/component: frontend
  app.kubernetes.io/part-of: webapp
  
  # 管理信息
  app.kubernetes.io/managed-by: helm
  
  # 环境信息
  environment: production
  tier: frontend
  
  # 组织信息
  team: platform
  department: engineering

2. 标签使用原则

yaml
# 原则1:使用有意义的标签
labels:
  app: webapp          # 好:清晰的应用名称
  app1: webapp         # 差:无意义的标签名

# 原则2:保持标签简洁
labels:
  env: prod            # 好:简洁明了
  environment-type: production-cluster-1  # 差:过于冗长

# 原则3:使用一致的命名
labels:
  app: webapp
  version: v1.0.0      # 好:统一的命名风格
  App: webapp
  VERSION: V1.0.0      # 差:不一致的大小写

# 原则4:避免频繁修改
labels:
  app: webapp          # 好:稳定的标签
  pod-template-hash: abc123  # 系统自动生成,不应手动修改

3. 标签选择器最佳实践

yaml
# 使用matchLabels和matchExpressions组合
apiVersion: apps/v1
kind: Deployment
spec:
  selector:
    matchLabels:
      app: webapp
    matchExpressions:
    - key: environment
      operator: In
      values:
      - production
      - staging
    - key: track
      operator: Exists
  template:
    metadata:
      labels:
        app: webapp
        environment: production
        track: stable

4. 标签管理策略

yaml
# 开发环境标签
labels:
  app: myapp
  environment: development
  version: latest
  track: daily

# 测试环境标签
labels:
  app: myapp
  environment: staging
  version: v1.0.0-rc1
  track: testing

# 生产环境标签
labels:
  app: myapp
  environment: production
  version: v1.0.0
  track: stable

5. 标签文档化

markdown
## 标签使用规范

### 必需标签
- `app.kubernetes.io/name`: 应用名称
- `app.kubernetes.io/version`: 应用版本
- `environment`: 环境标识(development/staging/production)

### 推荐标签
- `app.kubernetes.io/component`: 组件类型
- `app.kubernetes.io/part-of`: 所属应用
- `team`: 负责团队

### 标签值规范
- 使用小写字母和连字符
- 避免使用特殊字符
- 版本号使用语义化版本

总结

核心要点

  1. 标签基础

    • 键值对形式,用于标识和组织资源
    • 支持等值选择器和集合选择器
    • 可动态添加、修改、删除
  2. 选择器使用

    • 等值选择器:=, ==, !=
    • 集合选择器:in, notin, exists
    • 组合使用实现复杂查询
  3. 应用分组

    • 按环境分组:development/staging/production
    • 按层级分组:frontend/backend/database
    • 按版本分组:stable/canary
  4. 最佳实践

    • 使用Kubernetes推荐标签
    • 保持标签命名一致
    • 避免频繁修改标签

常用命令速查

bash
# 标签管理
kubectl label pod <name> key=value
kubectl label pod <name> key-  # 删除标签
kubectl get pods --show-labels

# 选择器查询
kubectl get pods -l app=nginx
kubectl get pods -l 'environment in (production,staging)'

# 批量操作
kubectl label pods -l app=nginx tier=frontend
kubectl delete pods -l environment=development

下一步学习

参考资源