k8s, RabbitMQ и Peer Discovery
Мы пытаемся запустить экземпляр диаграммы RabbitMQ с Helm из проекта helm/charts/stable/rabbit. У меня он работал отлично, но потом мне пришлось перезапустить K8s для некоторого обслуживания. Теперь мы совершенно не можем запустить диаграмму RabbitMQ в любом виде или форме. Я даже не пытаюсь запустить диаграмму с любыми переменными, то есть только значениями по умолчанию.
Вот все, что я делаю:
helm install stable/rabbitmq
Я подтвердил, что могу просто запустить права по умолчанию на моих локальных k8s, которые я использую с Docker for Desktop. Когда мы запускаем диаграмму кролика на наших общих k8s точно так же, как на рабочем столе, и то, что мы делали до перезапуска, выдается следующая ошибка:
Failed to get nodes from k8s - 503
Я также опубликовал вопрос о репозитории Хелм Чартс. Нажмите здесь, чтобы увидеть проблему на Github.
Мы подозреваем DNS, но пока не можем ничего подтвердить. Что очень расстраивает, так это то, что после перезапуска все остальные установленные нами диаграммы перезапускались идеально, за исключением Rabbit, который теперь вообще не запускается.
Кто-нибудь знает, что я мог бы сделать, чтобы сделать открытие Кролика равным? Кто-нибудь видел такую проблему после перезапуска k8s?
2 ответа
Так что я действительно заставил кролика бежать. Оказывается, моя проблема заключалась в том, что обнаружение peer 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_peer_discovery_k8s, если значение values.yaml по умолчанию равно 1 реплике (ваш файл манифеста не переопределяет этот параметр)?
Я пытался воспроизвести вашу проблему с заданными вами значениями переопределения (dev-server.yaml), как описано в вашей проблеме github #10811, но мне это не удалось. Вот мои наблюдения:
- Если установить диаграмму RabbitMQ с вашими пользовательскими значениями, мой
rabbitmq-dev-default-0
Модуль застревает в состоянии CrashLoopBackOff. Для меня это довольно трудно устранить, поскольку контейнеры изображений rabbitmq для bitnami, используемые в этой таблице rabbitmq Helm, поставляются с учетной записью без полномочий root. - С другой стороны, если таблица rabbitmq установлена в моем кластере Kubernetes (v1.13.2) в простейшей форме:
helm install stable / rabbitmq
Я наблюдаю подобную проблему тогда. Я имею в виду, что сервер rabbitmq переживает симулированный перезапуск виртуальной машины всех узлов кластера (включая главный), но я не могу подключиться к нему извне:
После перезагрузки виртуальной машины я получаю следующую ошибку от моего python mqclient:
socket.gaierror: [Errno -2] Name or service not known
Несколько замечаний здесь:
Да, я сделал переадресацию портов в соответствии с инструкциями для команды "helm status ":
Датчик готовности работает нормально:
curl -sS -f --user user:<my_pwd> 127.0.0.1:15672/api/healthchecks/node
{"status":"ok"}
Соединение rabbitmqctl с rabbitmq-сервером изнутри контейнера тоже работает нормально:
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!'