我们已经设置了一个拥有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配置文件中,/etc/dnsmasq.d/origin-upstream-dns.conf
可以作为解决方案,但无法找到导致此问题的原因。
我尝试在dnsmasq服务的ExecStart
中添加-q,它显示dnsmasq不会查询在127.0.0.1:53
本地运行的openshift dns。
Dnsmasq config/resolv.conf在节点上是有序的。
我已经尝试重新启动dnsmasq/NetworkManager/Docker,我已经尝试重新生成ovs/sdn pod,但仍然没有帮助。
找到了一些dnsmasq可以这样做的文档证据。
一些RedHat文章建议长时间运行的dnsmasq服务可能会出现错误并停止解析名称。类似的案例在openshift环境中也有报道。
下面的链接建议重新启动服务可以解决一段时间的问题,然后问题可能会重新出现。如前所述,在我的情况下,服务重启没有帮助,但IT中最古老的补救措施起作用了(重新启动节点解决了问题)。
参考:
https://access.redhat.com/solutions/3393141
https://bugzilla.redhat.com/show_bug.cgi?id=1560489