我想知道使用rabbit_peer_discovery_k8s插件的原因是什么,如果values.yaml默认为1个副本(你的清单文件没有覆盖此设置)?
我试图通过覆盖值(dev-server.yaml)来重现您的问题,根据您的详细信息 github问题 #10811,但我有点失败。以下是我的观察:
rabbitmq-dev-default-0
helm install stable / rabbitmq
我观察到类似的问题。我的意思是rabbitmq服务器在所有集群节点(包括主节点)的模拟VM重启后幸存,但我无法从外部连接到它:
VM重新启动后,我的python mqclient出现以下错误:
socket.gaierror: [Errno -2] Name or service not known
这里几点评论:
是的,我按照“helm status”命令的说明执行了port-s-forward:
准备情况探测工作正常:
curl -sS -f --user user:<my_pwd> 127.0.0.1:15672/api/healthchecks/node {"status":"ok"}
从容器内部的rabbitmqctl到rabbitmq-server连接也可以正常工作:
kubectl exec rabbitmq-dev-default-0 -- rabbitmqctl list_queues warning: the VM is running with native name encoding of latin1 which may cause Elixir to malfunction as it expects utf8. Please ensure your locale is set to UTF-8 (which can be verified by running "locale" in your shell) Timeout: 60.0 seconds ... Listing queues for vhost / ... name messages hello 11
从我使用kubectl port-forward到pod而不是服务的那一刻起,恢复了与rabbitmq服务器的连接:
kubectl port-forward --namespace default pod/rabbitmq-dev-default-0 5672:5672 $ python send.py [x] Sent 'Hello World!'
所以我真的让兔子跑了。原来我的问题是k8s对等发现无法通过默认端口443连接而且我不得不使用外部端口6443,因为 kubernetes.default.svc.cluster.local 解决了公共端口,找不到内部,所以是的,我们的配置也搞砸了。
kubernetes.default.svc.cluster.local
我花了一段时间才意识到下面的变量在我用它覆盖它时没有超越 helm install . -f server-values.yaml 。
helm install . -f server-values.yaml
rabbitmq: configuration: |- ## Clustering cluster_formation.peer_discovery_backend = rabbit_peer_discovery_k8s cluster_formation.k8s.host = kubernetes.default.svc.cluster.local cluster_formation.k8s.port = 6443 cluster_formation.node_cleanup.interval = 10 cluster_formation.node_cleanup.only_log_warning = true cluster_partition_handling = autoheal # queue master locator queue_master_locator=min-masters # enable guest user loopback_users.guest = false
我不得不补充一下 cluster_formation.k8s.port = 6443 主要的 values.yaml 文件而不是我自己的。一旦端口被特别改变了 values.yaml ,兔子开始了。
cluster_formation.k8s.port = 6443
values.yaml