I need to setup a basic rabbit mq instance (no cluster setup) without persistence or security requirements on a kubernetes cluster.
What I need:
Single rabbit mq pod running as stateful set with replicas = 1, and reach it from inside and outside of cluster via specific url (amgp port and mangement interface port)
What I don't need:
The helm charts I found so far are all adressing production setups with clustering, persistence and so on, but I don't need this stuff as I will use instance only for testing
This is what I have so far:
apiVersion: v1
kind: Service
metadata:
name: rs-rmq-mgt
spec:
selector:
app: rs-rmq
ports:
- protocol: TCP
port: 1337
targetPort: 15672
type: NodePort
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: rs-rmq
spec:
selector:
matchLabels:
app: rs-rmq
serviceName: "rs-rmq"
replicas: 1
template:
metadata:
labels:
app: rs-rmq
spec:
containers:
- name: rs-rmq
image: rabbitmq:management
ports:
- containerPort: 25672
- containerPort: 5672
- containerPort: 4369
- containerPort: 15672
I think the simplest way to do that is using Helm:
helm install stable/rabbitmq
Then just read the instructions in the output notes from the chart :)
Use this StatefulSet
yaml file for basic rabbitmq instance:
apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
name: rabbitmq
spec:
replicas: 1
serviceName: rabbitmq
selector:
matchLabels:
app: rabbitmq
template:
metadata:
labels:
app: rabbitmq
spec:
containers:
- name: rabbitmq
image: rabbitmq:3-management
env:
- name: "RABBITMQ_ERLANG_COOKIE"
value: "1WqgH8N2v1qDBDZDbNy8Bg9IkPWLEpu79m6q+0t36lQ="
volumeMounts:
- mountPath: /var/lib/rabbitmq
name: rabbitmq-data
volumes:
- name: rabbitmq-data
hostPath:
path: /data/rabbitmq
type: DirectoryOrCreate
If you don't need more than a replica and persistent. You can go with a simple pod deployment rather than sts. Please refer sts doc
kubectl run rabbitmq --image=rabbitmq:management --expose --port=15672 --restart=Never
--dry-run -o yaml > rabbitmq.yml
Edit the relevant container ports and create the pod.
kubectl create -f rabbitmq.yml
Expose the service as NodePort.
kubectl expose po rabbitmq --port 15672
Now, you can access it externally via
NodesIP:NodePort
and internally by using,
[svc].[namespace].svc
The proper way to do it, is to install rabbitmq via dedicated helm-chart (stable/rabbitmq) with helm (Kubernetes package manager). The main reason for that: this way is thoroughly tested and verified by open source community.
If you want to take a shortcut, please refer to the following task from Kubernetes official website: Starting a message queue service (rabbitmq). You will find there links to all necessary manifest files.