how to setup basic rabbitmq on kubernetes

5/22/2019

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:

  • persistence
  • security
  • cluster setup

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
-- Martin
kubernetes
kubernetes-ingress
kubernetes-statefulset
rabbitmq

4 Answers

11/18/2019

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 :)

-- CoderMan
Source: StackOverflow

10/8/2019

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
-- Hardeep
Source: StackOverflow

5/22/2019

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

-- hariK
Source: StackOverflow

5/22/2019

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.

-- Nepomucen
Source: StackOverflow