簡體   English   中英

如何在 kubernetes 上安裝 rabbitmq 插件?

[英]How to install rabbitmq plugin on kubernetes?

我有一個帶有rabbitmq servirve 的Kubernetes 環境,它部署了2 個rabbitmq pod。

我需要在rabbitmq上安裝一個插件,(Delayed Message Plugin)但是我不喜歡“手動”的方式,所以如果pod被刪除了,我必須重新安裝插件。

我想知道這是實現這一目標的推薦方法。

僅供參考:手動方法是將文件復制到插件文件夾中,然后啟動以下命令:

rabbitmq-plugins enable rabbitmq_delayed_message_exchange

您應該從配置映射中掛載 RabbitMQ 的配置。

例如:

配置映射:

apiVersion: v1
kind: ConfigMap
metadata:
  name: rabbitmq-config
  namespace: rabbitmq
data:
  enabled_plugins: |
      [rabbitmq_management,rabbitmq_peer_discovery_k8s].
  rabbitmq.conf: |
      ...
  definitions.json: |
      ...

然后在您的 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
       ...

首先有幾種安裝插件的方法。 一種是基於您當前使用的圖像,添加插件,然后使用新圖像。 或者,您可以利用Kubernetes 生命周期掛鈎在啟動前下載文件。 這是postStart 的一個例子

我已經結束將持久卷掛載到共享硬盤驅動器,並使用生命周期掛鈎將文件復制到正確路徑

  lifecycle:
    postStart:
      exec:
        command: ['sh', '-c', 'cp /data/rabbitmq_delayed_message_exchange-20171201-3.7.x.ez /opt/rabbitmq/plugins/']

之前我是用生命周期向下載url扔一個wget然后解壓復制文件,但是我覺得上面的更“優雅”

lifecycle:
          postStart:
                  exec:
                    command: ['sh', '-c', 'wget https://dl.bintray.com/rabbitmq/community-plugins/3.7.x/rabbitmq_delayed_message_exchange/rabbitmq_delayed_message_exchange-20171201-3.7.x.zip && unzip rabbitmq_delayed_message_exchange-20171201-3.7.x.zip -d /opt/rabbitmq/plugins/']

我使用了以下生命周期鈎子來啟用插件:

lifecycle:
  postStart:
    exec:
      command: ["/bin/sh", "-c", "rabbitmq-plugins --offline enable rabbitmq_management rabbitmq_peer_discovery_k8s rabbitmq_prometheus"]

需要使用--offline標志等待 rabbitmq 啟動然后啟用。

安裝對我不起作用。 我在 rabbitmq 中遇到錯誤,無法在/etc/rabbitmq寫入文件。 無法解決,因為這個https://github.com/kubernetes/kubernetes/pull/58720

在這里您可以看到一個示例清單:

---
apiVersion: v1
kind: Service
metadata:
  name: rabbitmq
  namespace: develop
spec:
  type: ClusterIP
  selector:
    app: rabbitmq
    tier: core
  ports:
    - name: port-5672-tcp
      port: 5672
    - name: port-15672-tcp
      port: 15672

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: rabbitmq
  namespace: develop
spec:
  replicas: 2
  selector:
    matchLabels:
      app: rabbitmq
      tier: core
  template:
    metadata:
      labels:
        app: rabbitmq
        tier: core
    spec:
      restartPolicy: Always
      terminationGracePeriodSeconds: 30
      volumes:
        - name: rabbitmq-storage
          persistentVolumeClaim:
            claimName: rabbitmq-pvc
      containers:
        - name: rabbitmq
          image: rabbitmq:3.8-management
          lifecycle:
            postStart:
              exec:
                command: ["/bin/sh", "-c", "rabbitmq-plugins --offline enable rabbitmq_management rabbitmq_peer_discovery_k8s rabbitmq_prometheus"]
          resources:
            requests:
              memory: 2Gi
              cpu: 1
            limits:
              memory: 2Gi
              cpu: 1
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 5672
            - containerPort: 15672
          volumeMounts:
            - name: rabbitmq-storage
              mountPath: "/var/lib/rabbitmq/"
          env:
            - name: RABBITMQ_DEFAULT_USER
              valueFrom:
                secretKeyRef:
                  name: rabbitmq-username
                  key: RABBITMQ__USERNAME
            - name: RABBITMQ_DEFAULT_PASS
              valueFrom:
                secretKeyRef:
                  name: rabbitmq-password
                  key: RABBITMQ__PASSWORD
      nodeSelector:
        type: ultrafastest

我知道這是一篇過時的文章,但有人可以分享他們的ConfigMap和deployment.yaml,以便我可以了解需要做什么嗎? 我在同一條船上,需要啟用延遲消息交換,但我是kubernetes和Rabbitmq的新手

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM