我正在尝试在 Azure 上使用 Kubernetes 构建一个 Redis 集群。我在运行不同的样本时遇到了完全相同的问题:sanderp.nl/running-redis-cluster-on-kubernetes或 github.com/zuxqoj/kubernetes-redis-cluster
一切顺利,直到我尝试使用 redis-trib
命令让不同的节点加入集群。
那时我遇到了臭名昭著的无限“正在等待集群加入....”消息。
为了查看发生了什么,我将 redis pod 的日志级别设置为 debug
级别。然后我注意到 pod 在一起通信时似乎没有宣布正确的 ip。
事实上,ip 的最后一个字节似乎被零替换。假设 pod1 的 IP 地址为 10.1.34.9,我将在 pod2 日志中看到:
已接受 clusternode 10.1.34.0:someport
因此 pod 似乎无法进行通信,加入集群的过程永远不会结束。
现在,如果在运行 redis-trib 之前,我通过在每个 pod 上运行来强制执行 cluster-announce-ip:
redis-cli -h mypod-ip config set cluster-announce-ip mypod-ip
redis-trib 命令随后成功完成,集群启动并运行。
但这不是一个可行的解决方案,因为如果 pod 关闭并恢复,它可能已经更改了 ip,当它尝试加入集群时我将面临同样的问题。
请注意,我在使用 minikube 运行示例时没有遇到任何问题。
我正在为 kubernetes 网络使用法兰绒。问题可能来自 flannel 的错误配置吗?有没有人遇到同样的问题?
最佳答案
您可以使用 statefulsets用于部署您的副本,因此您的 pod 将始终具有唯一的名称。
此外,您将能够使用服务
DNS 名称作为主机。请参阅此官方文档 DNS for Services and Pods .
你分享的第二个例子,有另一部分是 redis cluster using statefulsets .试试看。
关于docker - Kubernetes "Waiting for the cluster to join..."搭建Redis集群时ip错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49985895/