Как мне настроить мою таблицу рулевого управления для получения плагина rabbitmq сообщества? - PullRequest
1 голос
/ 11 января 2020

ЦЕЛЬ: Использовать плагин сообщества rabbitmq из https://www.rabbitmq.com/community-plugins.html в моей rabbitmq-ha таблице управления.

Любые плагины, которые не поставляются с сервера нужно будет установить. Плагины распространяются как архивы .ez (которые представляют собой zip-файлы с метаданными). Файлы должны быть скопированы в один из каталогов плагинов, заданных $ RABBITMQ_PLUGINS_DIR .

ПРОБЛЕМА: Как файл .ev плагина сообщества rabbitmq вставляется в диаграмму для использования?


ФОН:

Для моего примера я пытаюсь установить последнюю версию плагина сообщества rabbitmq_delayed_message_exchange в последнюю стабильную версию rabbitmq- ха .

Имя плагина определяется добавлением этого в мои values.yaml :

amqp-rabbitmq:
  extraPlugins: |
    rabbitmq_delayed_message_exchange,

И когда я

helm install example .  --debug

генерирует

# Source: example/charts/amqp-rabbitmq/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: example-amqp-rabbitmq
  namespace: default
  labels:
    app: amqp-rabbitmq
    chart: amqp-rabbitmq-1.38.2
    release: example
    heritage: Helm
data:
  enabled_plugins: |
    [
      rabbitmq_delayed_message_exchange,
      rabbitmq_consistent_hash_exchange,
      rabbitmq_management,
      rabbitmq_peer_discovery_k8s
    ].

  rabbitmq.conf: |
    ## RabbitMQ configuration
    ## Ref: https://github.com/rabbitmq/rabbitmq-server/blob/master/docs/rabbitmq.conf.example

    ## Authentification

    ## Clustering
    cluster_formation.peer_discovery_backend  = rabbit_peer_discovery_k8s
    cluster_formation.k8s.host = kubernetes.default.svc.cluster.local
    cluster_formation.k8s.address_type = hostname
    cluster_formation.node_cleanup.interval = 10
    # Set to false if automatic cleanup of absent nodes is desired.
    # This can be dangerous, see http://www.rabbitmq.com/cluster-formation.html#node-health-checks-and-cleanup.
    cluster_formation.node_cleanup.only_log_warning = true
    cluster_partition_handling = autoheal
    ## The default "guest" user is only permitted to access the server
    ## via a loopback interface (e.g. localhost)
    loopback_users.guest = false

    management.load_definitions = /etc/definitions/definitions.json

    ## Memory-based Flow Control threshold
    vm_memory_high_watermark.absolute = 256MB

    ## Auth HTTP Backend Plugin

    ## LDAP Plugin

    ## MQTT Plugin

    ## Web MQTT Plugin

    ## STOMP Plugin

    ## Web STOMP Plugin

    ## Prometheus Plugin

    ## AMQPS support

и создает 3 k8s_amqp-rabbitmq_example-amqp-rabbitmq- n _default _... контейнеров.

Журнал в каждом контейнере показывает

2020-01-11 01:21:16.826 [info] <0.8.0> Server startup complete; 6 plugins started.

* rabbitmq_management

* rabbitmq_web_dispatch

* rabbitmq_consistent_hash_exchange

* rabbitmq_peer_discovery_k8s

* rabbitmq_management_agent

* rabbitmq_peer_discovery_common

2020-01-11 01:23:06.954 [info] <0.529.0> node 'rabbit@example-amqp-rabbitmq-1.example-amqp-rabbitmq-discovery.default.svc.cluster.local' up

2020-01-11 01:23:12.776 [info] <0.529.0> rabbit on node 'rabbit@example-amqp-rabbitmq-1.example-amqp-rabbitmq-discovery.default.svc.cluster.local' up

Я могу успешно войти в rabbitmq, создать обмены, очереди и т. Д. c.

Однако нужный плагин rabbitmq_delayed_message_exchange не найден.

  • Он нигде не упоминается в файле журнала.
  • Он не отображается в rabbit@example-amqp-rabbitmq- n .example-amqp- rabbitmq-discovery.default.sv c .cluster.local-plugins-expand папка с другими плагинами.

Когда мое приложение пытается использовать для установки шлема установленную rabbitmq-ha задержанный обмен, который он получает:

'Error: Connection closed: 503 (COMMAND-INVALID) with message "COMMAND_INVALID - unknown exchange type 'x-delayed-message'"

Он работает с не-kubernetes экземплярами rabbitmq, где я мог легко установить плагин.


Я потратил Несколько дней поиска в Интернете наглядного примера, намеков и подсказок о том, как использовать диаграмму rabbitmq-ha для плагина сообщества и не прогрессировать.

Есть какие-нибудь идеи? Чего мне не хватает?

Ответы [ 2 ]

0 голосов
/ 24 апреля 2020

Вот пример установки и включения двух плагинов сообщества RabbitMQ :

  • rabbitmq_delayed_message_exchange
  • rabbitmq_message_timestamp

Шаг 1 : Получить диаграмму Шлема:

$ helm pull --untar bitnami/rabbitmq

Шаг 2: Обновить файл statefulset.yaml

...
# Install community plugins
pushd /opt/bitnami/rabbitmq/plugins/
curl -LO https://github.com/rabbitmq/rabbitmq-delayed-message-exchange/releases/download/v3.8.0/rabbitmq_delayed_message_exchange-3.8.0.ez
curl -LO https://github.com/rabbitmq/rabbitmq-message-timestamp/releases/download/v3.8.0/rabbitmq_message_timestamp-3.8.0.ez
popd
# End of installing community plugins
exec rabbitmq-server
...

Шаг 3: Установить RabbitMQ с двумя включенными плагинами

$ cd rabbitmq
$ helm install rmq . --set rabbitmq.extraPlugins="rabbitmq_delayed_message_exchange rabbitmq_message_timestamp"

Теперь вы можете проверить, что два плагина были установлены

$ kubectl get pod
NAME             READY   STATUS    RESTARTS   AGE
rmq-rabbitmq-0   1/1     Running   0          3m32s

$ kubectl exec -it rmq-rabbitmq-0 bash
I have no name!@rmq-rabbitmq-0:/$ rabbitmq-plugins list
Listing plugins with pattern ".*" ...
 Configured: E = explicitly enabled; e = implicitly enabled
 | Status: * = running on rabbit@rmq-rabbitmq-0.rmq-rabbitmq-headless.default.svc.cluster.local
 |/
[  ] rabbitmq_amqp1_0                  3.8.3
[  ] rabbitmq_auth_backend_cache       3.8.3
[  ] rabbitmq_auth_backend_http        3.8.3
[  ] rabbitmq_auth_backend_ldap        3.8.3
[  ] rabbitmq_auth_backend_oauth2      3.8.3
[  ] rabbitmq_auth_mechanism_ssl       3.8.3
[  ] rabbitmq_consistent_hash_exchange 3.8.3
[E*] rabbitmq_delayed_message_exchange 3.8.0
[  ] rabbitmq_event_exchange           3.8.3
[  ] rabbitmq_federation               3.8.3
[  ] rabbitmq_federation_management    3.8.3
[  ] rabbitmq_jms_topic_exchange       3.8.3
[E*] rabbitmq_management               3.8.3
[e*] rabbitmq_management_agent         3.8.3
[E*] rabbitmq_message_timestamp        3.8.0
[  ] rabbitmq_mqtt                     3.8.3
...

Примечание : версия моего шлема v3.1.1

$ helm version
version.BuildInfo{Version:"v3.1.1", GitCommit:"afe70585407b420d0097d07b21c47dc511525ac8", GitTreeState:"clean", GoVersion:"go1.13.8"}
0 голосов
/ 11 января 2020

Я думаю, что rabbitmq-ha стандартная диаграмма руля использует официальное изображение rabbitMQ, поэтому оно содержит только основных плагинов .

Я проверяю конфигурацию диаграммы , он просто устанавливает /etc/rabbitmq/enabled_plugins conf-файл, файл плагина не будет загружаться автоматически.

Существует два решения:

  • Создайте свое собственное изображение rabbitmq, отправьте вместе с ним файл rabbitmq_delayed_message_exchange.
  • Загрузите файл плагина в initContainer, добавьте его в значения диаграммы extraInitContainers
...