我有一个Kubernetes环境和一个狂犬病病毒谁部署2荚狂犬of。
我需要在rabbitmq (延迟消息插件)上安装一个插件,但我不喜欢“手动”方式,所以如果删除了这个插件,我必须再次安装插件。
我想知道实现这一目标的推荐方法是什么。
FYI:手动方法是将文件复制到plugins文件夹中,然后启动以下命令:
rabbitmq-plugins enable rabbitmq_delayed_message_exchange发布于 2018-06-29 11:49:41
您应该从配置映射中挂载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: |
...然后在您的部署或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
...首先有几种安装插件的方法。一种是以当前正在使用的图像为基础,添加插件,然后使用新的映像。或者,您可以利用库伯奈特生命周期钩下载文件的启动前。这是一个postStart实例
发布于 2018-07-02 10:24:32
我已经结束了在共享硬驱动的基础上安装一个持久的volumen,并使用生命周期挂钩将文件复制到正确的路径
lifecycle:
postStart:
exec:
command: ['sh', '-c', 'cp /data/rabbitmq_delayed_message_exchange-20171201-3.7.x.ez /opt/rabbitmq/plugins/']以前,我使用生命周期将wget抛到下载url,然后解压缩并复制文件,但我认为上面的内容更“优雅”。
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/']发布于 2020-07-17 11:34:44
我使用了以下生命周期挂钩来启用插件:
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: ultrafastesthttps://stackoverflow.com/questions/51096003
复制相似问题