启用 NodeLocalDNS 失败

Enabling NodeLocalDNS fails

我们在 GKE 上有 2 个集群:devproduction。我试图在 dev 集群上 运行 这个命令:

gcloud beta container clusters update "dev" --update-addons=NodeLocalDNS=ENABLED 

一切都很顺利,node-local-dns pods 正在 运行ning 并且一切正常,第二天早上我决定 运行 在 production 集群上执行相同的命令node-local-dns 无法 运行,我注意到 PILLAR__LOCAL__DNSPILLAR__DNS__SERVER在 yaml 中没有更改为正确的 IP,我试图在配置 yaml 中更改这些变量,但是 GKE 不断用 PILLAR__DNS__SERVER[ 将它们覆盖回 yaml =29=] 变量...

集群之间的唯一区别是 dev 运行s 在 1.15.9-gke.24 和生产 1.15.11-gke.1.

显然1.15.11-gke.1版本有错误。

我先在 1.15.11-gke.1 上重新创建了它,可以确认 node-local-dns Pods 属于 CrashLoopBackOff 状态:

node-local-dns-28xxt                                        0/1     CrashLoopBackOff   5          5m9s
node-local-dns-msn9s                                        0/1     CrashLoopBackOff   6          8m17s
node-local-dns-z2jlz                                        0/1     CrashLoopBackOff   6          10m

当我查看日志时:

$ kubectl logs -n kube-system node-local-dns-msn9s
2020/04/07 21:01:52 [FATAL] Error parsing flags - Invalid localip specified - "__PILLAR__LOCAL__DNS__", Exiting

解决方案:

升级到 1.15.11-gke.3 有帮助。 首先你需要升级你的 master-node 然后你的 节点池。看起来在这个版本上一切都运行良好且顺利:

$ kubectl get daemonsets -n kube-system node-local-dns 
NAME             DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR                               AGE
node-local-dns   3         3         3       3            3           addon.gke.io/node-local-dns-ds-ready=true   44m

$ kubectl get pods -n kube-system -l k8s-app=node-local-dns
NAME                   READY   STATUS    RESTARTS   AGE
node-local-dns-8pjr5   1/1     Running   0          11m
node-local-dns-tmx75   1/1     Running   0          19m
node-local-dns-zcjzt   1/1     Running   0          19m

关于手动修复这个特定的 daemonset yaml 文件,我不会推荐它,因为你可以确定 GKE 的 auto -repairauto-upgrade 功能迟早会覆盖它。

希望对您有所帮助。