J'essaie d'afficher un cluster RabbitMQ sur Kubernetes en utilisant le plugin Rabbitmq-peer-discovery-k8s et je n'ai toujours qu'un pod en cours d'exécution et prêt, mais le suivant échoue toujours.
J'ai essayé plusieurs modifications de mon configuration et c'est ce qui a permis à au moins un pod de fonctionner
[admin@devsvr3 yaml]$ kubectl logs rabbitmq-1 ## ## ## ## RabbitMQ 3.7.10. Copyright (C) 2007-2018 Pivotal Software, Inc. ########## Licensed under the MPL. See http://www.rabbitmq.com/ ###### ## ########## Logs: <stdout> Starting broker... 2019-02-06 21:09:03.303 [info] <0.211.0> Starting RabbitMQ 3.7.10 on Erlang 21.2.3 Copyright (C) 2007-2018 Pivotal Software, Inc. Licensed under the MPL. See http://www.rabbitmq.com/ 2019-02-06 21:09:03.315 [info] <0.211.0> node : rabbit@rabbitmq-1.rabbitmq-headless.namespace-dev.svc.cluster.local home dir : /var/lib/rabbitmq config file(s) : /etc/rabbitmq/rabbitmq.conf cookie hash : XhdCf8zpVJeJ0EHyaxszPg== log(s) : <stdout> database dir : /var/lib/rabbitmq/mnesia/rabbit@rabbitmq-1.rabbitmq-headless.namespace-dev.svc.cluster.local 2019-02-06 21:09:10.617 [error] <0.219.0> Unable to parse vm_memory_high_watermark value "1.6GB" 2019-02-06 21:09:10.617 [info] <0.219.0> Memory high watermark set to 103098 MiB (108106919116 bytes) of 257746 MiB (270267297792 bytes) total 2019-02-06 21:09:10.690 [info] <0.221.0> Enabling free disk space monitoring 2019-02-06 21:09:10.690 [info] <0.221.0> Disk free limit set to 2000MB 2019-02-06 21:09:10.698 [info] <0.224.0> Limiting to approx 1048476 file handles (943626 sockets) 2019-02-06 21:09:10.698 [info] <0.225.0> FHC read buffering: OFF 2019-02-06 21:09:10.699 [info] <0.225.0> FHC write buffering: ON 2019-02-06 21:09:10.702 [info] <0.211.0> Node database directory at /var/lib/rabbitmq/mnesia/rabbit@rabbitmq-1.rabbitmq-headless.namespace-dev.svc.cluster.local is empty. Assuming we need to join an existing cluster or initialise from scratch... 2019-02-06 21:09:10.702 [info] <0.211.0> Configured peer discovery backend: rabbit_peer_discovery_k8s 2019-02-06 21:09:10.702 [info] <0.211.0> Will try to lock with peer discovery backend rabbit_peer_discovery_k8s 2019-02-06 21:09:10.702 [info] <0.211.0> Peer discovery backend does not support locking, falling back to randomized delay 2019-02-06 21:09:10.702 [info] <0.211.0> Peer discovery backend rabbit_peer_discovery_k8s does not support registration, skipping randomized startup delay. 2019-02-06 21:09:10.710 [info] <0.211.0> Failed to get nodes from k8s - {failed_connect,[{to_address,{"kubernetes.default.svc.cluster.local",443}}, {inet,[inet],nxdomain}]} 2019-02-06 21:09:10.711 [error] <0.210.0> CRASH REPORT Process <0.210.0> with 0 neighbours exited with reason: no case clause matching {error,"{failed_connect,[{to_address,{\"kubernetes.default.svc.cluster.local\",443}},\n {inet,[inet],nxdomain}]}"} in rabbit_mnesia:init_from_config/0 line 164 in application_master:init/4 line 138 2019-02-06 21:09:10.711 [info] <0.43.0> Application rabbit exited with reason: no case clause matching {error,"{failed_connect,[{to_address,{\"kubernetes.default.svc.cluster.local\",443}},\n {inet,[inet],nxdomain}]}"} in rabbit_mnesia:init_from_config/0 line 164 {"Kernel pid terminated",application_controller,"{application_start_failure,rabbit,{bad_return,{{rabbit,start,[normal,[]]},{'EXIT',{{case_clause,{error,\"{failed_connect,[{to_address,{\\"kubernetes.default.svc.cluster.local\\",443}},\n {inet,[inet],nxdomain}]}\"}},[{rabbit_mnesia,init_from_config,0,[{file,\"src/rabbit_mnesia.erl\"},{line,164}]},{rabbit_mnesia,init_with_lock,3,[{file,\"src/rabbit_mnesia.erl\"},{line,144}]},{rabbit_mnesia,init,0,[{file,\"src/rabbit_mnesia.erl\"},{line,111}]},{rabbit_boot_steps,'-run_step/2-lc$^1/1-1-',1,[{file,\"src/rabbit_boot_steps.erl\"},{line,49}]},{rabbit_boot_steps,run_step,2,[{file,\"src/rabbit_boot_steps.erl\"},{line,49}]},{rabbit_boot_steps,'-run_boot_steps/1-lc$^0/1-0-',1,[{file,\"src/rabbit_boot_steps.erl\"},{line,26}]},{rabbit_boot_steps,run_boot_steps,1,[{file,\"src/rabbit_boot_steps.erl\"},{line,26}]},{rabbit,start,2,[{file,\"src/rabbit.erl\"},{line,815}]}]}}}}}"} Kernel pid terminated (application_controller) ({application_start_failure,rabbit,{bad_return,{{rabbit,start,[normal,[]]},{'EXIT',{{case_clause,{error,"{failed_connect,[{to_address,{\"kubernetes.defau Crash dump is being written to: /var/log/rabbitmq/erl_crash.dump...done [admin@devsvr3 yaml]$
Je n'ai qu'un seul pod en cours d'exécution et prêt au lieu des 3 répliques
[admin@devsvr3 yaml]$ kubectl get pods NAME READY STATUS RESTARTS AGE rabbitmq-0 1/1 Running 0 2m2s rabbitmq-1 0/1 Running 1 43s
4 Réponses :
Essayez d'utiliser ce graphique de barre stable https://github.com/helm / charts / tree / master / stable / rabbitmq
cela ressemble plus à un problème DNS comme indiqué dans les journaux '{failed_connect, [{to_address, {\ "kubernetes.default.svc.clus ter.local \", 443}}'
Essayez de définir:
kubernetes.default.svc.cluster.local
car il semble que votre pod ne puisse pas résoudre ce nom:
cluster_formation.k8s.host = [your kubernetes endpoint ip addres] cluster_formation.k8s.port = [your kubernetes endpoint port]
C'est une solution au problème DNS, sauf qu'il dépendra toujours de l'adresse IP tandis que le besoin de statefulset est d'utiliser des noms d'hôte
êtes-vous sûr que le nom de votre cluster kubernetes est cluster.local?
enfin je l'ai corrigé en ajoutant ceci dans /etc/resolv.conf de mes pods:
dnsConfig: searches: - [my-rabbit-svc].[my-rabbitmq-namespace].svc.[cluster-name]
pour ajouter ceci dans mon pod j'ai utilisé ce paramètre dans mon StatefulSet:
[my-rabbit-svc].[my-rabbitmq-namespace].svc.[cluster-name]
documentation complète ici
Une des solutions possibles ici, au lieu d'attacher la configuration DNS au pod - utilisez le sidecar proxy k8s. Ainsi, au lieu de résoudre
cluster_formation.peer_discovery_backend = rabbit_peer_discovery_k8s cluster_formation.k8s.host = localhost cluster_formation.k8s.port = 8001 cluster_formation.k8s.scheme = http
Vous pouvez configurer un conteneur side-car comme
- name: "k8s-api-sidecar" image: "tommyvn/kubectl-proxy:latest"
dans statefullset / deployment Et changez configmap pour l'utiliser
kubernetes.default.svc.cluster.local
Si vous jetez un oeil dans ce référentiel https://github.com/tommyvn/kubectl-proxy , vous constaterez que c'est juste un proxy d'appel kubectl.
Probablement tard pour répondre, mais pour les autres frappés à cette question, essayez d'ajouter un compte de service et une valeur de jeton conformément au document rabbitmq.com/cluster-formation.html#peer-discovery-k8s