k8s,RabbitMQ和对等发现

时间:2019-01-22 15:07:22

标签: kubernetes rabbitmq kubernetes-helm

我们正在尝试使用helm/charts/stable/rabbit项目中的Helm运行RabbitMQ图表的实例。我让它运行完美,但是随后我不得不重新启动k8s进行维护。现在,我们完全无法以任何形式启动RabbitMQ图表。我什至不尝试使用任何变量(即仅默认值)运行图表。

这就是我正在做的事情

helm install stable/rabbitmq

我已经确认我可以直接在与Docker for Desktop一起运行的本地k8上运行默认权限。当我们在共享k8上以与在桌面上完全相同的方式运行兔子图以及重新启动之前的操作时,会引发以下错误:

Failed to get nodes from k8s - 503

我也在Helm图表仓库中发布了一个问题。 Click here to see the issue on Github.

我们怀疑DNS,但无法确认任何内容。令人沮丧的是,重新启动后,我们安装的所有其他图表都完美地重新启动,但Rabbit根本无法启动。

任何人都知道我该怎么做才能使Rabbits同行发现发挥作用?重启k8s后,有人看到过这样的问题吗?

2 个答案:

答案 0 :(得分:1)

所以我实际上让兔子跑了。原来我的问题是k8s对等发现无法通过默认端口443连接,并且我不得不使用外部端口6443,因为kubernetes.default.svc.cluster.local已解析为公共端口,并且找不到内部端口,所以是的,我们的配置很混乱也起来

我花了一段时间才意识到,当我用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中专门更改了端口,rabbit就开始启动。

答案 1 :(得分:0)

我想知道,如果values.yaml默认为1个副本(您的清单文件不会覆盖此设置),使用Rabbit_peer_discovery_k8s插件的原因是什么?

根据您的github issue#10811中的详细信息,我试图通过给您覆盖值(dev-server.yaml)来重现您的问题,但是我有些失败。这是我的观察结果:

  1. 如果要使用您的自定义值安装RabbitMQ图表,我的rabbitmq-dev-default-0窗格将陷入CrashLoopBackOff状态。 对我来说,进一步解决该问题非常困难,因为此Rabbitmq Helm图表使用的bitnami的Rabbitmq图像容器带有非root帐户。
  2. 另一方面,如果Rabbitmq图表以最简单的形式安装在我的Kubernetes集群(v1.13.2)上:
  

helm install stable / rabbitmq

那我观察到类似的问题。我的意思是Rabbitmq服务器可以在所有集群节点(包括主节点)的模拟VM重新启动后幸存下来,但是我无法从外部连接到它:

重启虚拟机后,我从python mqclient中收到以下错误:

socket.gaierror: [Errno -2] Name or service not known

这里很少评论:

是的,我按照“头盔状态”命令中的说明进行了端口前转:

就绪探针工作正常:

curl -sS -f --user user:<my_pwd> 127.0.0.1:15672/api/healthchecks/node
{"status":"ok"}

从容器内部到rabbitmq-server的rabbitmqctl连接也可以正常工作:

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!'