我正在尝试在azure上使用kubernetes构建一个redis集群。在运行不同的样本时,我遇到了完全相同的问题:sanderp.nl/running-redis-cluster-on-kubernetes或github.com/zuxqoj/kubernetes-redis-cluster
一切顺利,直到我尝试让不同的节点使用redis-trib
命令加入群集。
那时我面对臭名昭着的无限“等待集群加入.... ”的消息。
试着看看发生了什么,我将redis pod的loglevel设置为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网络。这个问题可能来自法兰绒的错误配置吗?有没有人遇到过同样的问题?
答案 0 :(得分:1)
您可以使用statefulsets部署副本,因此您的广告连接将始终具有唯一名称。
此外,您将能够使用service
DNS名称作为主机。请参阅此官方文档DNS for Services and Pods。
您分享的第二个示例包含redis cluster using statefulsets的另一部分。试试吧。