Skip to content

Commit 4110253

Browse files
reixdRainer 'rei' SchuthCopilot
authored
Add rabbitmq cluster helm chart (#28)
Co-authored-by: Rainer 'rei' Schuth <rainer.schuth@digital-results-international.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
1 parent 6c53f10 commit 4110253

12 files changed

Lines changed: 641 additions & 0 deletions

File tree

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# Patterns to ignore when building packages.
2+
# This supports shell glob matching, relative path matching, and
3+
# negation (prefixed with !). Only one pattern per line.
4+
.DS_Store
5+
# Common VCS dirs
6+
.git/
7+
.gitignore
8+
.bzr/
9+
.bzrignore
10+
.hg/
11+
.hgignore
12+
.svn/
13+
# Common backup files
14+
*.swp
15+
*.bak
16+
*.tmp
17+
*.orig
18+
*~
19+
# Various IDEs
20+
.project
21+
.idea/
22+
*.tmproj
23+
.vscode/

charts/rabbitmq-cluster/Chart.yaml

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
---
2+
apiVersion: v2
3+
name: rabbitmq-cluster
4+
description: Helm chart to define a RabbitMQ cluster via official rabbitmq.com CRDs (RabbitmqCluster).
5+
type: application
6+
version: 1.2.0
7+
appVersion: "4.2-management"
8+
kubeVersion: ">= 1.33.0-0"
9+
home: https://www.rabbitmq.com/kubernetes/operator/operator-overview.html
10+
sources:
11+
- https://github.com/CloudPirates-io/helm-charts/tree/main/charts/rabbitmq-cluster-operator
12+
keywords:
13+
- cloudpirates
14+
- rabbitmq
15+
- operator
16+
- crd
17+
- messaging
18+
- amqp
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
{{/*
2+
Expand the name of the chart.
3+
*/}}
4+
{{- define "rabbitmq-cluster.name" -}}
5+
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
6+
{{- end }}
7+
8+
{{/*
9+
Create a default fully qualified app name.
10+
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
11+
If release name contains chart name it will be used as a full name.
12+
*/}}
13+
{{- define "rabbitmq-cluster.fullname" -}}
14+
{{- if .Values.fullnameOverride }}
15+
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }}
16+
{{- else }}
17+
{{- $name := default .Chart.Name .Values.nameOverride }}
18+
{{- if contains $name .Release.Name }}
19+
{{- .Release.Name | trunc 63 | trimSuffix "-" }}
20+
{{- else }}
21+
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }}
22+
{{- end }}
23+
{{- end }}
24+
{{- end }}
25+
26+
{{/*
27+
Create chart name and version as used by the chart label.
28+
*/}}
29+
{{- define "rabbitmq-cluster.chart" -}}
30+
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
31+
{{- end }}
32+
33+
{{/*
34+
Common labels
35+
*/}}
36+
{{- define "rabbitmq-cluster.labels" -}}
37+
helm.sh/chart: {{ include "rabbitmq-cluster.chart" . }}
38+
{{ include "rabbitmq-cluster.selectorLabels" . }}
39+
{{- if .Chart.AppVersion }}
40+
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
41+
{{- end }}
42+
app.kubernetes.io/managed-by: {{ .Release.Service }}
43+
{{- end }}
44+
45+
{{/*
46+
Selector labels
47+
*/}}
48+
{{- define "rabbitmq-cluster.selectorLabels" -}}
49+
app.kubernetes.io/name: {{ include "rabbitmq-cluster.name" . }}
50+
app.kubernetes.io/instance: {{ .Release.Name }}
51+
{{- end }}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
2+
{{/*
3+
slugify the string to be (k8s) DNS name compatible
4+
*/}}
5+
{{- define "com.klicktipp.slugify-string" -}}
6+
{{- $r := . | lower | replace "." "-" | replace "/" "-" | replace "_" "-" | replace "--" "-" | replace " " "-" | trimPrefix "-" | trunc 63 | trimSuffix "-" }}
7+
{{- $r }}
8+
{{- end -}}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
{{- if .Values.ingress.enabled -}}
2+
---
3+
# ingress
4+
apiVersion: networking.k8s.io/v1
5+
kind: Ingress
6+
metadata:
7+
name: {{ include "rabbitmq-cluster.fullname" . }}
8+
labels:
9+
{{- include "rabbitmq-cluster.labels" . | nindent 4 }}
10+
{{- with .Values.ingress.annotations }}
11+
annotations:
12+
{{- toYaml . | nindent 4 }}
13+
{{- end }}
14+
spec:
15+
{{- with .Values.ingress.className }}
16+
ingressClassName: {{ . }}
17+
{{- end }}
18+
{{- if .Values.ingress.tls }}
19+
tls:
20+
{{- range .Values.ingress.tls }}
21+
- hosts:
22+
{{- range .hosts }}
23+
- {{ . | quote }}
24+
{{- end }}
25+
secretName: {{ .secretName }}
26+
{{- end }}
27+
{{- end }}
28+
rules:
29+
{{- range .Values.ingress.hosts }}
30+
- host: {{ .host | quote }}
31+
http:
32+
paths:
33+
{{- range .paths }}
34+
- path: {{ .path }}
35+
{{- with .pathType }}
36+
pathType: {{ . }}
37+
{{- end }}
38+
backend:
39+
service:
40+
name: {{ include "rabbitmq-cluster.fullname" $ }}
41+
port:
42+
name: management
43+
{{- end }}
44+
{{- end }}
45+
{{- end }}
Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
{{- $clusterRef := .Values.rabbitmq.cluster.name | default (include "rabbitmq-cluster.fullname" .) }}
2+
{{- $vhost := "/" }}
3+
{{- if $.Values.rabbitmq.vhost.enabled }}
4+
{{- $vhost = (.Values.rabbitmq.vhost.name | default (include "rabbitmq-cluster.fullname" .)) }}
5+
{{- end }}
6+
7+
{{- if and .Values.monitoring.enabled (.Capabilities.APIVersions.Has "monitoring.coreos.com/v1") }}
8+
{{- if .Values.monitoring.serviceMonitor.enabled }}
9+
---
10+
apiVersion: monitoring.coreos.com/v1
11+
kind: ServiceMonitor
12+
metadata:
13+
name: {{ $clusterRef | quote }}
14+
labels:
15+
{{- include "rabbitmq-cluster.labels" . | nindent 4 }}
16+
spec:
17+
selector:
18+
matchLabels:
19+
{{- include "rabbitmq-cluster.selectorLabels" . | nindent 6 }}
20+
namespaceSelector:
21+
matchNames:
22+
- {{ .Release.Namespace | quote }}
23+
endpoints:
24+
- port: prometheus
25+
scheme: http
26+
interval: 15s
27+
scrapeTimeout: 14s
28+
29+
- port: prometheus-tls
30+
scheme: https
31+
interval: 15s
32+
scrapeTimeout: 14s
33+
tlsConfig:
34+
insecureSkipVerify: true # set to false and uncomment lines below to enable tls verification
35+
# ca:
36+
# secret:
37+
# key: ca.crt
38+
# name: tls-secret # name of the secret containing the CA cert which signed the RabbitMQ Prometheus TLS cert
39+
# serverName: '*.RABBITMQ-INSTANCE-NAME.NAMESPACE.svc.cluster.local'
40+
41+
- port: prometheus
42+
scheme: http
43+
path: /metrics/detailed
44+
params:
45+
family:
46+
- queue_coarse_metrics
47+
- queue_metrics
48+
interval: 15s
49+
scrapeTimeout: 14s
50+
51+
- port: prometheus-tls
52+
scheme: https
53+
path: /metrics/detailed
54+
params:
55+
family:
56+
- queue_coarse_metrics
57+
- queue_metrics
58+
interval: 15s
59+
scrapeTimeout: 14s
60+
tlsConfig:
61+
insecureSkipVerify: true
62+
{{- end }} {{/* END if servicemonitor enabled */}}
63+
64+
{{- range $queue := .Values.rabbitmq.topology.queues }}
65+
{{- if ($queue.alert_when_has_messages | default false ) }}
66+
---
67+
apiVersion: monitoring.coreos.com/v1
68+
kind: PrometheusRule
69+
metadata:
70+
name: {{ (printf "%s-%s-%s-unroutable" $clusterRef $vhost $queue.name) | include "com.klicktipp.slugify-string" | quote }}
71+
labels:
72+
{{- include "rabbitmq-cluster.labels" $ | nindent 4 }}
73+
spec:
74+
groups:
75+
- name: rabbitmq.queue.alerts
76+
rules:
77+
- alert: RabbitMQQueueNotEmpty
78+
expr: |
79+
max(
80+
rabbitmq_detailed_queue_messages{queue={{ $queue.name | quote }}}
81+
) > 0
82+
for: 1m
83+
labels:
84+
severity: warning
85+
annotations:
86+
summary: "RabbitMQ fallback queue has messages"
87+
description: "Queue {{ $queue.name }} has {{`{{`}} $value {{`}}`}} messages (> 0)."
88+
89+
- alert: RabbitMQQueueHighBacklog
90+
expr: |
91+
max(
92+
rabbitmq_detailed_queue_messages{queue={{ $queue.name | quote }}}
93+
) > 1000
94+
for: 5m
95+
labels:
96+
severity: critical
97+
annotations:
98+
summary: "RabbitMQ fallback queue backlog is critical"
99+
description: "Queue {{ $queue.name }} has {{`{{`}} $value {{`}}`}} messages (> 1000). Immediate action required."
100+
101+
{{- end }} {{/* END if alert_when_has_messages enabled */}}
102+
{{- end }} {{/* END queue loop */}}
103+
104+
{{- end }} {{/* END if monitoring enabled */}}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
{{- if .Values.pdb.enabled }}
2+
---
3+
# pod disruption budget
4+
apiVersion: policy/v1
5+
kind: PodDisruptionBudget
6+
metadata:
7+
name: {{ include "rabbitmq-cluster.fullname" . }}
8+
labels:
9+
{{- include "rabbitmq-cluster.labels" . | nindent 4 }}
10+
spec:
11+
{{- if kindIs "string" .Values.pdb.maxUnavailable }}
12+
maxUnavailable: "{{ .Values.pdb.maxUnavailable }}"
13+
{{- else }}
14+
maxUnavailable: {{ .Values.pdb.maxUnavailable }}
15+
{{- end }}
16+
selector:
17+
matchLabels:
18+
{{- include "rabbitmq-cluster.selectorLabels" . | nindent 6 }}
19+
{{- end }}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
---
2+
{{- if .Values.rabbitmq.cluster.enabled }}
3+
apiVersion: rabbitmq.com/v1beta1
4+
kind: RabbitmqCluster
5+
metadata:
6+
name: {{ .Values.rabbitmq.cluster.name | default (include "rabbitmq-cluster.fullname" .) }}
7+
labels:
8+
{{- include "rabbitmq-cluster.labels" . | nindent 4 }}
9+
spec:
10+
image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
11+
replicas: {{ .Values.rabbitmq.cluster.replicas }}
12+
{{- if .Values.rabbitmq.cluster.persistence.enabled }}
13+
persistence:
14+
storage: {{ .Values.rabbitmq.cluster.persistence.storage | quote }}
15+
{{- if .Values.rabbitmq.cluster.persistence.storageClassName }}
16+
storageClassName: {{ .Values.rabbitmq.cluster.persistence.storageClassName | quote }}
17+
{{- end }}
18+
{{- end }}
19+
delayStartSeconds: {{ .Values.rabbitmq.cluster.delayStartSeconds | int }}
20+
{{- with .Values.rabbitmq.cluster.resources }}
21+
resources:
22+
{{- toYaml . | nindent 4 }}
23+
{{- end }}
24+
{{- with .Values.rabbitmq.cluster.affinity }}
25+
affinity:
26+
{{- toYaml . | nindent 4 }}
27+
{{- end }}
28+
terminationGracePeriodSeconds: {{ .Values.terminationGracePeriodSeconds | int }}
29+
rabbitmq:
30+
additionalPlugins:
31+
{{- $additionalPlugins := .Values.rabbitmq.cluster.additionalPlugins | default (list) }}
32+
{{- $extraPlugins := .Values.rabbitmq.cluster.extraPlugins | default (list) }}
33+
{{- range (concat $additionalPlugins $extraPlugins | uniq) }}
34+
- {{ . | quote }}
35+
{{- end }}
36+
{{- with .Values.rabbitmq.cluster.override }}
37+
override:
38+
{{- nindent 4 (toYaml .) }}
39+
{{- end }}
40+
{{- end }}

0 commit comments

Comments
 (0)