![](/img/trans.png)
[英]How to enable rabbitmq plugin "rabbitmq_delayed_message_exchange" if rabbitmq was deployed using the rabbitmq operator in kubernetes
[英]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.