mosquitto

This commit is contained in:
azykov@mail.ru
2026-07-21 22:13:15 +03:00
parent cf2c016c0a
commit 7739e3501a
15 changed files with 293 additions and 17 deletions
@@ -0,0 +1,6 @@
apiVersion: v2
name: mosquitto
description: Single-node Eclipse Mosquitto MQTT broker for homelab IoT
type: application
version: 0.1.0
appVersion: "2"
@@ -0,0 +1,14 @@
{{- define "mosquitto.fullname" -}}
{{- .Release.Name | trunc 63 | trimSuffix "-" -}}
{{- end -}}
{{- define "mosquitto.labels" -}}
app.kubernetes.io/name: mosquitto
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
{{- end -}}
{{- define "mosquitto.selectorLabels" -}}
app.kubernetes.io/name: mosquitto
app.kubernetes.io/instance: {{ .Release.Name }}
{{- end -}}
@@ -0,0 +1,22 @@
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ include "mosquitto.fullname" . }}-config
labels:
{{- include "mosquitto.labels" . | nindent 4 }}
data:
mosquitto.conf: |
persistence true
persistence_location /mosquitto/data/
log_dest stdout
listener {{ .Values.service.mqttPort }}
allow_anonymous false
password_file /mosquitto/secrets/{{ .Values.auth.secretKey }}
{{- if .Values.websockets.enabled }}
listener {{ .Values.websockets.port }}
protocol websockets
allow_anonymous false
password_file /mosquitto/secrets/{{ .Values.auth.secretKey }}
{{- end }}
@@ -0,0 +1,25 @@
apiVersion: v1
kind: Service
metadata:
name: {{ include "mosquitto.fullname" . }}
labels:
{{- include "mosquitto.labels" . | nindent 4 }}
{{- if .Values.service.loadBalancerPool }}
loadBalancerPool: {{ .Values.service.loadBalancerPool }}
{{- end }}
spec:
type: {{ .Values.service.type }}
{{- if .Values.service.loadBalancerIP }}
loadBalancerIP: {{ .Values.service.loadBalancerIP }}
{{- end }}
selector:
{{- include "mosquitto.selectorLabels" . | nindent 4 }}
ports:
- name: mqtt
port: {{ .Values.service.mqttPort }}
targetPort: mqtt
{{- if .Values.websockets.enabled }}
- name: ws
port: {{ .Values.websockets.port }}
targetPort: ws
{{- end }}
@@ -0,0 +1,70 @@
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: {{ include "mosquitto.fullname" . }}
labels:
{{- include "mosquitto.labels" . | nindent 4 }}
spec:
serviceName: {{ include "mosquitto.fullname" . }}
replicas: 1
selector:
matchLabels:
{{- include "mosquitto.selectorLabels" . | nindent 6 }}
template:
metadata:
labels:
{{- include "mosquitto.selectorLabels" . | nindent 8 }}
spec:
securityContext:
runAsUser: {{ .Values.securityContext.runAsUser }}
runAsGroup: {{ .Values.securityContext.runAsGroup }}
fsGroup: {{ .Values.securityContext.runAsGroup }}
containers:
- name: mosquitto
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
ports:
- name: mqtt
containerPort: {{ .Values.service.mqttPort }}
{{- if .Values.websockets.enabled }}
- name: ws
containerPort: {{ .Values.websockets.port }}
{{- end }}
env:
- name: MOSQUITTO_UNSAFE_ALLOW_SYMLINKS
value: "1"
volumeMounts:
- name: config
mountPath: /mosquitto/config
- name: secrets
mountPath: /mosquitto/secrets
readOnly: true
{{- if .Values.persistence.enabled }}
- name: data
mountPath: /mosquitto/data
{{- end }}
resources:
{{- toYaml .Values.resources | nindent 12 }}
volumes:
- name: config
configMap:
name: {{ include "mosquitto.fullname" . }}-config
- name: secrets
secret:
secretName: {{ .Values.auth.existingSecret }}
defaultMode: 0400
{{- if not .Values.persistence.enabled }}
- name: data
emptyDir: {}
{{- end }}
{{- if .Values.persistence.enabled }}
volumeClaimTemplates:
- metadata:
name: data
spec:
accessModes: ["ReadWriteOnce"]
storageClassName: {{ .Values.persistence.storageClassName }}
resources:
requests:
storage: {{ .Values.persistence.size }}
{{- end }}
@@ -0,0 +1,38 @@
image:
repository: eclipse-mosquitto
tag: "2"
pullPolicy: IfNotPresent
# not really needed, as StatefulSet has hardcoded "replicas: 1"
replicaCount: 1
securityContext:
runAsUser: 1883
runAsGroup: 1883
persistence:
enabled: true
size: 1Gi
service:
type: LoadBalancer
mqttPort: 1883
loadBalancerPool: "mqtt"
# or loadBalancerIP: X.X.X.X
auth:
# Mount a Secret with a pre-generated mosquitto passwd file instead of
# putting credentials in values.yaml / git. See README for how to create it.
existingSecret: mosquitto-passwd
secretKey: passwd
websockets:
enabled: false
port: 9001
resources:
requests:
cpu: 50m
memory: 32Mi
limits:
memory: 128Mi