首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >客户端到动态补丁不能删除nodeSelector标签?

客户端到动态补丁不能删除nodeSelector标签?
EN

Stack Overflow用户
提问于 2021-01-19 10:04:15
回答 1查看 858关注 0票数 0

client-go版本: v0.15.10

当nodeSelector是MergePatchType或StrategicMergePatchType时,不能从部署MergePatchType中删除lebels吗?

这里是原始的yaml文件'test1.yaml':

代码语言:javascript
复制
apiVersion: apps/v1beta2
kind: Deployment
metadata:
  labels:
    k8s-app: frontgateway
  name: frontgateway
spec:
  replicas: 1
  selector:
    matchLabels:
      k8s-app: frontgateway
  template:
    metadata:
      labels:
        k8s-app: frontgateway
    spec:
      nodeSelector:
        CLUSTER: WX
        GROUP: IAD

补丁代码:

代码语言:javascript
复制
playLoadBytes,_ :=json.Marshal(unstructuredObj)
_,err=DynamicClient.Resource(mapping.Resource).Namespace(namespace).Patch(name,types.StrategicMergePatchType,playLoadBytes,metav1.PatchOptions{})

贴片yaml:

代码语言:javascript
复制
apiVersion: apps/v1beta2
kind: Deployment
metadata:
  labels:
    k8s-app: frontgateway
  name: frontgateway
spec:
  replicas: 1
  selector:
    matchLabels:
      k8s-app: frontgateway
  template:
    metadata:
      labels:
        k8s-app: frontgateway
    spec:
      nodeSelector:
        GROUP: IAD

当我从test1.yaml中移除“群集: WX”行并执行修补程序()方法时,部署资源仍然具有“群集: WX”标签,但是添加一个新的标签可以工作。

我看到了官方文件https://kubernetes.io/docs/tasks/manage-kubernetes-objects/update-api-object-kubectl-patch/,上面写着Notice that the tolerations list in the PodSpec was replaced, not merged. This is because the Tolerations field of PodSpec does not have a patchStrategy key in its field tag. So the strategic merge patch uses the default patch strategy, which is replace.

因此,我在Kubernetes源代码中检查了NodeSelector的字段标记:

代码语言:javascript
复制
NodeSelector map[string]string `json:"nodeSelector,omitempty" protobuf:"bytes,7,rep,name=nodeSelector"`

没有"patchStrategy“标记,那么为什么补丁()不执行替换呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-19 11:11:55

注意到PodSpec中的公差列表已被替换,而不是合并。

替换策略适用于列表,而nodeSelector不是列表。

代码语言:javascript
复制
spec:
  template:
    spec:
      tolerations:
      - effect: NoSchedule     <- list
        key: disktype
        value: ssd

代码语言:javascript
复制
spec:
  replicas: 1
  selector:
    matchLabels:
      k8s-app: frontgateway
  template:
    metadata:
      labels:
        k8s-app: frontgateway
    spec:
      nodeSelector:
        CLUSTER: WX        <- not a list
        GROUP: IAD

使用替换列表是因为列表的顺序容易混乱,很难预测所引用的列表中的哪个元素。这就是为什么更容易替换整个列表的原因。

如果对象可以直接和清晰地处理每个元素,则不需要替换任何东西。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65789256

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档