Изменение имени хоста нарушает Rabbitmq при запуске на Kubernetes
я пытаюсь запустить Rabbitmq с помощью Kubernetes на AWS. Я использую официальный контейнер докера Rabbitmq. Каждый раз, когда pod перезапускает контейнер rabbitmq получает новое имя хоста. Я настроил службу (типа LoadBalancer) для модуля с разрешимым DNS-именем.
но когда я использую EBS, чтобы сделать Rabbit config/messsage / queues постоянным между перезапусками, он ломается с:
exception exit: {{failed_to_cluster_with,
['rabbitmq@rabbitmq-deployment-2901855891-nord3'],
"Mnesia could not connect to any nodes."},
{rabbit,start,[normal,[]]}}
in function application_master:init/4 (application_master.erl, line 134)
rabbitmq-deployment-2901855891-nord3
является предыдущим контейнером имени хоста rabbitmq. Это почти как Mnesia сохранил старое имя хоста : -/
информация о контейнере выглядит следующим образом:
Starting broker...
=INFO REPORT==== 25-Apr-2016::12:42:42 ===
node : rabbitmq@rabbitmq-deployment-2770204827-cboj8
home dir : /var/lib/rabbitmq
config file(s) : /etc/rabbitmq/rabbitmq.config
cookie hash : XXXXXXXXXXXXXXXX
log : tty
sasl log : tty
database dir : /var/lib/rabbitmq/mnesia/rabbitmq
я могу установить только первую часть имени узла в rabbitmq
С помощью RABBITMQ_NODENAME
переменные среды.
задание RABBITMQ_NODENAME
к разрешимому DNS-имени ломается с:
Can't set short node name!nPlease check your configurationn"
задание RABBITMQ_USE_LONGNAME
to true
разрывы с:
Can't set long node name!nPlease check your configurationn"
обновление:
-
задание
RABBITMQ_NODENAME
для rabbitmq@localhost в работает, но это отрицает любую возможность кластеризации экземпляров.Starting broker... =INFO REPORT==== 26-Apr-2016::11:53:19 === node : rabbitmq@localhost home dir : /var/lib/rabbitmq config file(s) : /etc/rabbitmq/rabbitmq.config cookie hash : 9WtXr5XgK4KXE/soTc6Lag== log : tty sasl log : tty database dir : /var/lib/rabbitmq/mnesia/rabbitmq@localhost
-
задание
RABBITMQ_NODENAME
к имени службы, в данном случаеrabbitmq-service
как так rabbitmq@rabbitmq-сервис также работает, так как имена служб kubernetes внутренне разрешимы через DNS.Starting broker... =INFO REPORT==== 26-Apr-2016::11:53:19 === node : rabbitmq@rabbitmq-service home dir : /var/lib/rabbitmq config file(s) : /etc/rabbitmq/rabbitmq.config cookie hash : 9WtXr5XgK4KXE/soTc6Lag== log : tty sasl log : tty database dir : /var/lib/rabbitmq/mnesia/rabbitmq@rabbitmq-service
это правильный путь, хотя? Смогу ли я в кластер несколько экземпляров, если имена одинаковые?
2 ответов
идея состоит в том, чтобы использовать разные "службы" и "развертывания" для каждого узла, который вы хотите создать.
как вы сказали, Вы должны создать пользовательское имя NODENAME для каждого i.e:
RABBITMQ_NODENAME=rabbit@rabbitmq-1
и rabbitmq-1,rabbitmq-2,rabbitmq-3
должны быть разрешены с каждого узла. Для этого вы можете использовать kubedns. The /etc/resolv.conf
будет выглядеть так:
search rmq.svc.cluster.local
и /etc/hosts
должны содержать:
127.0.0.1 rabbitmq-1 # or rabbitmq-2 on node 2...
службы здесь, чтобы создать стабильную сетевую идентификацию для каждого узлы
rabbitmq-1.svc.cluster.local
rabbitmq-2.svc.cluster.local
rabbitmq-3.svc.cluster.local
разные deployments
ресурсы позволят вам монтировать разные Тома на каждом узле.
Я работаю над инструментом развертывания, чтобы упростить эти действия: Я сделал демонстрацию того, как я масштабирую и развертываю rabbitmq от 1 до 3 узлов на kubernetes: https://asciinema.org/a/2ktj7kr2d2m3w25xrpz7mjkbu?speed=1.5
в более общем плане сложность развертывания кластерного приложения рассматривается в предложении petset: https://github.com/kubernetes/kubernetes/pull/18016
в дополнение к первому ответу @ant31:
Kubernetes теперь позволяет настроить имя хоста, например, в yaml:
template:
metadata:
annotations:
"pod.beta.kubernetes.io/hostname": rabbit-rc1
см.https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/dns# A Records and hostname Based on Pod Annotations - A Beta Feature in Kubernetes v1.2
Кажется, что вся конфигурация жива несколько перезапусков или повторных расписаний. Я не настраивал кластер, однако я собираюсь следовать учебнику для mongodb, см. https://www.mongodb.com/blog/post/running-mongodb-as-a-microservice-with-docker-and-kubernetes
подход будет, вероятно, почти то же самое с точки зрения kubernetes.