如何在kubernetes上安装rabbitmq插件?

dra*_*aro 3 rabbitmq kubernetes rabbitmqctl

我有一个 Kubernetes 环境,其中有一个rabbitmq servirve,它部署了 2 个rabbitmq pod。

我需要在rabbitmq上安装一个插件,(延迟消息插件)但我不喜欢“手动”方式,所以如果pod被删除,我必须再次安装插件。

我想知道实现此目标的推荐方法是什么。

仅供参考:手动方法是将文件复制到插件文件夹中,然后启动以下命令:

rabbitmq-plugins enable rabbitmq_delayed_message_exchange
Run Code Online (Sandbox Code Playgroud)

mat*_*ull 8

您应该从配置映射中挂载 RabbitMQ 的配置。

例如:

配置映射:

apiVersion: v1
kind: ConfigMap
metadata:
  name: rabbitmq-config
  namespace: rabbitmq
data:
  enabled_plugins: |
      [rabbitmq_management,rabbitmq_peer_discovery_k8s].
  rabbitmq.conf: |
      ...
  definitions.json: |
      ...
Run Code Online (Sandbox Code Playgroud)

然后在您的 Deployment 或 StatefulSet 中:

apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
  name: rabbitmq
  namespace: rabbitmq
spec:
  replicas: 3
  ...
  template:
    ...
    spec:
      containers:
      - image: rabbitmq:3.7.4-management-alpine
        imagePullPolicy: IfNotPresent
        name: rabbitmq
        volumeMounts:
        - name: config-volume
          mountPath: /etc/rabbitmq
        ...
      volumes:
        - name: config-volume
          configMap:
            name: rabbitmq-config
            items:
            - key: rabbitmq.conf
              path: rabbitmq.conf
            - key: enabled_plugins
              path: enabled_plugins
            - key: definitions.json
              path: definitions.json
       ...
Run Code Online (Sandbox Code Playgroud)

首先有多种方法可以安装该插件。一种是基于您当前使用的映像,添加插件,然后使用新映像。或者,您可以利用Kubernetes 生命周期挂钩在启动前下载文件。这是postStart 的示例