问题描述
我们已经建立了一个具有 100 多个节点的 okd 3.11 集群。一切正常,但随后工作节点停止解析注册表服务内部 url。这会导致调度到该节点的新 Pod 失败,并出现 ImagePullBackoff 错误。
Failed to pull image "docker-registry.default.svc:5000/app-name/app-name:latest": rpc error: code = UnkNown desc = Get https://docker-registry.default.svc:5000/v1/_ping: dial tcp: lookup docker-registry.default.svc on 10.*.*.71:53: server misbehaving
我们尝试在工作节点上运行 nslookup,结果如下
虽然这不起作用(但它在其他节点上起作用)
[root@worker22 ~]# nslookup docker-registry.default.svc.cluster.local
Server: 10.*.*.71
Address: 10.*.*.71#53
** server can't find docker-registry.default.svc.cluster.local: SERVFAIL
这很好用。
[root@worker22 ~]# nslookup docker-registry.default.svc.cluster.local 127.0.0.1
Server: 127.0.0.1
Address: 127.0.0.1#53
Name: docker-registry.default.svc.cluster.local
Address: 172.*.*.212
将 server=/cluster.local/172.30.0.1
添加到 dnsmasq conf 文件 /etc/dnsmasq.d/origin-upstream-dns.conf
可以作为一种解决方法,但找不到导致此问题的原因。
我尝试将 -q 添加到 dnsmasq 服务的 ExecStart
中,结果表明 dnsmasq 不会查询在 127.0.0.1:53
本地运行的 openshift dns。
Dnsmasq config/resolv.conf 在节点上是有序的。
我试过重新启动 dnsmasq/NetworkManager/Docker,我试过重新生成 ovs/sdn pod,但仍然没有帮助。
解决方法
发现了一些文件证明 dnsmasq 可以这样做。
一些 RedHat 文章表明,长时间运行的 dnsmasq 服务可能会出现错误行为并停止解析名称。在 openshift 环境中也报告了类似的情况。
以下链接表明重新启动服务可以解决问题一段时间,然后问题可能会再次出现。如前所述,在我的情况下,服务重启并没有帮助,但 IT 中最古老的补救措施起作用了(重新启动节点解决了问题)。
参考: