首页/云/Kubernetes 速查/工作负载 selector 的不可变约束

工作负载 selector 的不可变约束

apps/v1 下 Deployment/StatefulSet/DaemonSet 的 selector 创建后不可修改,且必须匹配 Pod 模板标签;改选择器只能重建对象。

Kubernetes 速查云更新于 2026-10-12

正确姿势

正确姿势
spec:
  selector:
    matchLabels:
      app: web          # 必须与 template.metadata.labels 一致
  template:
    metadata:
      labels:
        app: web

踩坑再现

踩坑再现
kubectl patch deploy/web -p '{"spec":{"selector":{"matchLabels":{"app":"web2"}}}}'
# 报错:field is immutable
需要更换选择器标签时:导出清单改名/改标签创建新对象,再分批迁移流量并删除旧对象。

易错点

  • selector 与模板标签不符时创建直接被拒(validation error),不是运行时才暴露
  • 删除重建会短暂失去控制器保护(Pod 变孤儿),先扩新对象再缩旧对象降低风险

数据来源与参考

  • Kubernetes 官方文档 · Deployments(Selector 不可变说明)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌