Изменение имени хоста нарушает 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.