【问题标题】:"UnknownHostException": Zookeeper 3.5.3 and StatefulSet Kubernetes“UnknownHostException”:Zookeeper 3.5.3 和 StatefulSet Kubernetes
【发布时间】:2026-01-01 06:55:02
【问题描述】:

Zookeeper 3.5.3-beta 不适用于 GCloud Kubernetes Engine。使用与 Zookeeper 3.4.10 相同的配置即可。

当我运行客户端健全性测试时,返回的唯一异常是:

2017-11-29 14:27:17,597 [myid:1] - WARN  [QuorumPeer[myid=1](plain=/0:0:0:0:0:0:0:0:2181)(secure=disabled):Learner@273] - Unexpected exception, tries=0, remaining init limit=20000, connecting to zk-2.zk-svc.default.svc.cluster.local:2888
java.net.UnknownHostException: zk-2.zk-svc.default.svc.cluster.local

虽然有人建议此问题与 kube-dns 相关,如 here 所示。
kube-dns (dns.go:48] version: 1.14.4-2-g5584e04) 似乎按预期工作:

/ # nslookup zk-0.zk-svc.default.svc.cluster.local
Server:    10.63.240.10
Address 1: 10.63.240.10 kube-dns.kube-system.svc.cluster.local

Name:      zk-0.zk-svc.default.svc.cluster.local
Address 1: 10.60.3.3 zk-0.zk-svc.default.svc.cluster.local
/ # nslookup zk-2.zk-svc.default.svc.cluster.local
Server:    10.63.240.10
Address 1: 10.63.240.10 kube-dns.kube-system.svc.cluster.local

Name:      zk-2.zk-svc.default.svc.cluster.local
Address 1: 10.60.4.3 zk-2.zk-svc.default.svc.cluster.local
/ # nslookup zk-1.zk-svc.default.svc.cluster.local
Server:    10.63.240.10
Address 1: 10.63.240.10 kube-dns.kube-system.svc.cluster.local

Name:      zk-1.zk-svc.default.svc.cluster.local
Address 1: 10.60.2.5 zk-1.zk-svc.default.svc.cluster.local

并且 kube-dns 日志中没有错误。

在 3.4.10 中,第一个节点在初始化时也会产生 UnknownHostExceptions,但最终会提供这种类型的解决指示,但在 3.5.3 中从未

2017-11-29 15:14:39,923 [myid:] - INFO  [main:QuorumPeer$QuorumServer@167] - Resolved hostname: zk-0.zk-svc.default.svc.cluster.local to address: zk-0.zk-svc.default.svc.cluster.local/10.60.4.4

我没有足够的信息向 Zookeeper 提出问题,因此我将不胜感激有关如何调试此问题的任何建议。

【问题讨论】:

  • 我应该补充一点,3.5.3 配置确实需要更改:我还需要在配置中将带有“4lw.commands.whitelist=*”的 4 个字母单词列入白名单,以便就绪探测工作。此外,还添加了“standaloneEnabled=false”。

标签: dns kubernetes apache-zookeeper statefulset


【解决方案1】:

根据ZOOKEEPER-2343 中最近的评论,我部署了一个 3.6.0-SNAPSHOT 映像。第二个和第三个节点立即接受客户端请求,但第一个节点不接受并报告“此 ZooKeeper 实例当前未服务请求”。

删除第一个节点可以解决该问题,因为它在启动时可以参与仲裁。

【讨论】: