2016-04-26 38 views
7

Sto tentando di eseguire Rabbitmq utilizzando Kubernetes su AWS. Sto usando lo official Rabbitmq docker container. Ogni volta che il pod viene riavviato, il contenitore rabbitmq ottiene un nuovo nome host. Ho configurato un servizio (di tipo LoadBalancer) per il pod con un nome DNS risolvibile.La modifica del nome host interrompe Rabbitmq durante l'esecuzione su Kubernetes

Ma quando io uso un EBS per fare il coniglio config/messsage/code persistente tra riavvio si rompe con:

exception exit: {{failed_to_cluster_with, 
        ['[email protected]'], 
        "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 è il precedente contenitore hostname RabbitMQ. E 'quasi come mnesia salvato il vecchio hostname: -/

informazioni del contenitore si presenta così:

   Starting broker... 
=INFO REPORT==== 25-Apr-2016::12:42:42 === 
node   : [email protected] 
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 

sono in grado di impostare la prima parte del nome del nodo per rabbitmq utilizzando l'ambiente RABBITMQ_NODENAME unica variabile.

Impostazione RABBITMQ_NODENAME ad un nome DNS risolvibile rompe con:

Can't set short node name!\nPlease check your configuration\n"

Impostazione RABBITMQ_USE_LONGNAME a true pause con:

Can't set long node name!\nPlease check your configuration\n"

Aggiornamento:

  • L'impostazione RABBITMQ_NODENAME su rabbitmq @localhost funziona ma questo non consente alcuna possibilità alle istanze di cluster.

      Starting broker... 
    =INFO REPORT==== 26-Apr-2016::11:53:19 === 
    node   : [email protected] 
    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/[email protected] 
    
  • Impostazione RABBITMQ_NODENAME al nome del servizio, in questo caso, in questo modo rabbitmq-service RabbitMQ @RabbitMQ-service funziona anche dato i nomi dei servizi kubernetes sono internamente risolvibili tramite DNS.

      Starting broker... 
    =INFO REPORT==== 26-Apr-2016::11:53:19 === 
    node   : [email protected] 
    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/[email protected] 
    

'questo il modo giusto, però? Sarò ancora in grado di raggruppare più istanze se i nomi dei nodi sono uguali?

risposta

3

L'idea è di utilizzare un diverso "servizio" e "distribuzione" per ciascun nodo che si desidera creare.

Come hai detto, è necessario creare un NOMENODO personalizzata per ogni vale a dire:

[email protected] 

anche rabbitmq-1,rabbitmq-2,rabbitmq-3 devono essere risolti da ciascuna nodi. Per quello puoi usare kubedns.Il /etc/resolv.conf sarà simile:

search rmq.svc.cluster.local 

e /etc/hosts mosto contengono:

127.0.0.1 rabbitmq-1 # or rabbitmq-2 on node 2... 

I servizi sono qui per creare un'identità di rete stabile per ogni nodi

rabbitmq-1.svc.cluster.local 
rabbitmq-2.svc.cluster.local 
rabbitmq-3.svc.cluster.local 

Le diverse deployments risorse saranno ti permettono di montare un volume diverso su ciascun nodo.

sto lavorando su uno strumento di distribuzione per semplificare quelle azioni: Ho fatto una demo su come mi scala e distribuire RabbitMQ da 1 a 3 nodi su kubernetes: https://asciinema.org/a/2ktj7kr2d2m3w25xrpz7mjkbu?speed=1.5

Più in generale, la complessità la tua fronte di distribuire un'applicazione cluster viene affrontato nella 'proposta petset': https://github.com/kubernetes/kubernetes/pull/18016

+0

Quindi OK, lo scaling dinamico per molte applicazioni è gravemente compromesso da questo. Ma almeno ho una soluzione per cluster manualmente RabbitMQ. –

+0

Penso che a questo punto StatefulSets possa fare al meglio, questa risposta potrebbe essere superata. – OhJeez

2

Oltre alla prima risposta da @ ant31:

kubernetes consente ora di impostare un nome host, ad esempio, in YAML:

template: 
    metadata: 
    annotations: 
     "pod.beta.kubernetes.io/hostname": rabbit-rc1 

Vedi 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

Sembra che l'intera configurazione vivo multiple riavvii o ri-orari. Non ho impostato un cluster, tuttavia seguirò il tutorial per mongodb, vedere https://www.mongodb.com/blog/post/running-mongodb-as-a-microservice-with-docker-and-kubernetes

L'approccio sarà probabilmente quasi lo stesso dal punto di vista di Kubernet.