【发布时间】:2021-11-03 17:24:43
【问题描述】:
我有一个项目想用 Operator 更新 Pod 的 DNS 配置,
get dns message
get matched pod
modify:
pod.Spec.DNSConfig = CRD_SPEC
pod.Spec.DNSPolicy = corev1.DNSNone
client.Update(ctx,&pod)
但是当我实现它时,我得到了以下错误:
ERROR controller-runtime.manager.controller.dnsinjection Reconciler error {"reconciler group": "xxxx", "reconciler kind": "xxxxx", "name": "dnsinjection", "namespace": "default", "error": "Pod \"busybox\" is invalid: spec: Forbidden: pod updates may not change fields other than `spec.containers[*].image`, `spec.initContainers[*].image`, `spec.activeDeadlineSeconds` or `spec.tolerations` (only additions to existing tolerations)\n core.PodSpec{\n \t... // 21 identical fields\n \tPriority: &0,\n \tPreemptionPolicy: nil,\n \tDNSConfig: &core.PodDNSConfig{\n \t\tNameservers: []string{\n \t\t\t\"1.2.3.4\",\n- \t\t\t\"0.0.0.0\",\n \t\t},\n \t\tSearches: []string{\"ns1.svc.cluster-domain.example\", \"my.dns.search.suffix\"},\n \t\tOptions: []core.PodDNSConfigOption{{Name: \"ndots\", Value: &\"2\"}, {Name: \"edns0\"}},\n \t},\n \tReadinessGates: nil,\n \tRuntimeClassName: nil,\n \t... // 3 identical fields\n }\n"}
DNSConfig和DNSPoicy字段在源码中没有声明不能更新,那为什么更新失败了呢?
kubect edit pod busybox 和 kubectl apply -f modifyed_pod.yml(add DNSConfig) 命令出现同样的错误。
如果你能告诉我如何解决它,我将不胜感激。
【问题讨论】:
-
您使用的是哪个 Kubernetes 版本?
-
@MikolajS。版本是 1.18
标签: kubernetes kubernetes-operator kubernetes-dns