如何在 kubernetes 上安装 rabbitmq 插件?
How to install rabbitmq plugin on kubernetes?
我有一个带有 rabbitmq servirve 的 Kubernetes 环境,它部署了 2 pods 个 rabbitmq。
我需要在rabbitmq上安装一个插件,(Delayed Message Plugin)但是我不喜欢"manual"这种方式,所以如果pod被删除,我必须重新安装插件。
我想知道实现此目标的推荐方法是什么。
仅供参考:手动方式是将文件复制到插件文件夹中,然后启动以下命令:
rabbitmq-plugins enable rabbitmq_delayed_message_exchange
您应该从配置映射装载 RabbitMQ 的配置。
例如:
ConfigMap:
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 life cycle hooks to download the file pre start. Here is an example of postStart
我已结束将持久卷挂载到共享硬盘驱动器,并使用生命周期挂钩将文件复制到正确的路径
lifecycle:
postStart:
exec:
command: ['sh', '-c', 'cp /data/rabbitmq_delayed_message_exchange-20171201-3.7.x.ez /opt/rabbitmq/plugins/']
之前我是用lifecycle丢个wget去下载url然后解压复制文件,不过我觉得上面更"elegant"
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启动然后启用。
安装对我不起作用。我在无法在 /etc/rabbitmq
中写入文件的 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
我有一个带有 rabbitmq servirve 的 Kubernetes 环境,它部署了 2 pods 个 rabbitmq。
我需要在rabbitmq上安装一个插件,(Delayed Message Plugin)但是我不喜欢"manual"这种方式,所以如果pod被删除,我必须重新安装插件。
我想知道实现此目标的推荐方法是什么。
仅供参考:手动方式是将文件复制到插件文件夹中,然后启动以下命令:
rabbitmq-plugins enable rabbitmq_delayed_message_exchange
您应该从配置映射装载 RabbitMQ 的配置。
例如:
ConfigMap:
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 life cycle hooks to download the file pre start. Here is an example of postStart
我已结束将持久卷挂载到共享硬盘驱动器,并使用生命周期挂钩将文件复制到正确的路径
lifecycle:
postStart:
exec:
command: ['sh', '-c', 'cp /data/rabbitmq_delayed_message_exchange-20171201-3.7.x.ez /opt/rabbitmq/plugins/']
之前我是用lifecycle丢个wget去下载url然后解压复制文件,不过我觉得上面更"elegant"
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启动然后启用。
安装对我不起作用。我在无法在 /etc/rabbitmq
中写入文件的 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