11

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
  • 111
  • 1
  • 1
  • 3

4 Answers4

11

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
  • 2,722
  • 13
  • 18
4

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

Feiyu Zhou
  • 4,344
  • 32
  • 36
Hardeep
  • 49
  • 2
  • 4
2

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
  • 59
  • 1
  • 6
1

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
  • 4,449
  • 3
  • 9
  • 24