【问题标题】:Update deployment labels using “kubectl patch” does not work in v1.18使用“kubectl patch”更新部署标签在 v1.18 中不起作用
【发布时间】:2020-06-26 16:22:51
【问题描述】:

我正在尝试使用 kubectl v1.18 更新标签。

我试过 kubectl 补丁部署 my-deployment --patch "$(cat patch1.yaml)";它返回一个错误

部署“my-deployment”无效:spec.selector:无效值:v1.LabelSelector{MatchLabels:map[string]string{"app":"nginx"}, MatchExpressions:[]v1.LabelSelectorRequirement(nil )}: 字段是不可变的

apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    client: user
  name:  my-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: revproxy
  strategy:
     type: RollingUpdate
     rollingUpdate:
       maxUnavailable: 1
       maxSurge: 2
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: revproxy
    spec:
      containers:
      - image: nginx:1.7.9
        name: nginx
        resources: {}
      dnsPolicy: ClusterFirst
      restartPolicy: Always

补丁 yaml 是

spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx

【问题讨论】:

    标签: kubernetes kubectl


    【解决方案1】:

    来自文档here

    注意:在 API 版本 apps/v1 中,Deployment 的标签选择器是 创建后不可变。

    使标签选择器不可变的动机是

    1. 更改选择器会导致未定义的行为 - 用户不应更改选择器
    2. 选择器不可变可确保它们始终匹配创建的子级,从而防止意外批量孤立等事件

    如果您想修改标签选择器,您必须删除现有部署并重新创建它。

    修改为仅metadata.labels 应该可以工作。

    【讨论】:

    • 是的,如果进程不是批量补丁,metadata.labels 会起作用。在这种情况下,如果其中一项或多项更改失败,则所有更改都会中止。
    猜你喜欢
    • 2019-09-08
    • 2019-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-10
    • 1970-01-01
    • 2019-08-27
    • 1970-01-01
    相关资源
    最近更新 更多