为 RabbitMQ 添加自定义插件¶
问题描述¶
RabbitMQ 有很多插件,但是在安装 RabbitMQ 时,只能安装默认的插件,如果需要安装其他插件,需要在安装完成后,手动安装。
解决方案¶
在创建的 RabbitMQ 的 yaml 中,增加 initContainer,用于下载插件,然后将插件挂在到 RabbitMQ 的插件目录中,最后在 rabbitmq 的 config 中,增加了插件的配置,并在启用的插件模块中启用插件。
示例¶
这里以 rabbitmq_message_timestamp-3.8.0.ez 为例,主要做的内容如下:
- 增加了 initContainer,用于下载插件
- 然后将插件挂在到 RabbitMQ 的插件目录中
- 在 rabbitmq 的 config 中,增加了插件的配置
- 并在启用的插件模块中启用插件
修改示例实例代码
-
```yaml
apiVersion: rabbitmq.com/v1beta1
kind: RabbitmqCluster
metadata:
...
status:
...
spec:
image: docker.m.daocloud.io/library/rabbitmq:3.9.25-management-alpine
override:
service:
spec:
ports:
- name: amqp
port: 5672
protocol: TCP
targetPort: 5672
- name: management
port: 15672
protocol: TCP
targetPort: 15672
- name: prometheus
port: 15692
protocol: TCP
targetPort: 15692
statefulSet:
spec:
template:
spec:
# 以下为增加部分
+ volumes:
+ - name: community-plugins
+ emptyDir: { }
+ initContainers:
+ - command:
+ - sh
+ - -c
+ - curl -L -v https://github.com/rabbitmq/rabbitmq-message-timestamp/releases/download/v3.8.0/rabbitmq_message_timestamp-3.8.0.ez --output rabbitmq_message_timestamp-3.8.0.ez
+ image: docker.m.daocloud.io/curlimages/curl:7.70.0
+ imagePullPolicy: IfNotPresent
+ name: copy-community-plugins
+ resources:
+ limits:
+ cpu: 100m
+ memory: 500Mi
+ requests:
+ cpu: 100m
+ memory: 500Mi
+ terminationMessagePolicy: FallbackToLogsOnError
+ volumeMounts:
+ - mountPath: /community-plugins/
+ name: community-plugins
# 以上为增加部分
containers:
- name: rabbitmq
ports:
- containerPort: 5672
name: amqp
protocol: TCP
- containerPort: 15672
name: management
protocol: TCP
- containerPort: 15692
name: prometheus
protocol: TCP
resources: {}
# 以下为增加部分
+ volumeMounts:
+ - mountPath: /opt/rabbitmq/community-plugins
+ name: community-plugins
# 以上为增加部分
persistence:
storage: 1Gi
storageClassName: hwameistor-storage-lvm-hdd
rabbitmq:
+ envConfig: |
+ PLUGINS_DIR=/opt/rabbitmq/plugins:/opt/rabbitmq/community-plugins
# 以上一行为增加部分
additionalConfig: |
log.console.level = info
default_user=rabbitmq
default_pass=UE81O6Y4^w$iWP86g
cluster_partition_handling = pause_minority
vm_memory_high_watermark_paging_ratio = 0.99
disk_free_limit.relative = 1.0
collect_statistics_interval = 10000
additionalPlugins:
+ - rabbitmq_message_timestamp # 增加次插件启用
- rabbitmq_peer_discovery_k8s
- rabbitmq_prometheus
- rabbitmq_management
replicas: 1
resources:
limits:
cpu: 200m
memory: 512Mi
requests:
cpu: 200m
memory: 512Mi
secretBackend: {}
service:
type: ClusterIP
terminationGracePeriodSeconds: 604800
tls: {}
这里的插件采用 github 官方作为下载地址,生成使用,建议自行维护插件位置,以免下载失败。
注意事项¶
目前支持手工在 YAML 编辑自定义资源的方式增加对应的插件,存在一定的操作风险性,建议谨慎操作。