Add helm chart

This commit is contained in:
Jochem
2024-07-03 21:29:02 +02:00
parent b0e7eaa3d1
commit 614feeee46
19 changed files with 1281 additions and 0 deletions

View File

@@ -0,0 +1,3 @@
{{- define "librenms.configChecksum" -}}
{{- include (print $.Template.BasePath "/librenms-configmap.yml") . | sha256sum -}}
{{- end -}}

View File

@@ -0,0 +1,29 @@
---
kind: ConfigMap
apiVersion: v1
metadata:
name: {{ .Release.Name }}
data:
TZ: {{ .Values.librenms.timezone}}
DB_TIMEOUT: "60"
REDIS_HOST: {{ .Release.Name }}-redis-master
REDIS_PORT: "6379"
REDIS_DB: "0"
RRDCACHED_SERVER: "{{ .Release.Name }}-rrdcached:42217"
CACHE_DRIVER: redis
SESSION_DRIVER: redis
DB_HOST: {{ .Release.Name }}-mysql
DB_USERNAME: {{.Values.mysql.auth.username}}
DB_DATABASE: {{.Values.mysql.auth.database}}
---
kind: ConfigMap
apiVersion: v1
metadata:
name: {{ .Release.Name }}-files
data:
custom.php: |-
{{ tpl (.Files.Get "files/custom.php") . | indent 4 }}
env: |-
{{ tpl (.Files.Get "files/env") . | indent 4 }}
init.sh: |-
{{ tpl (.Files.Get "files/init.sh") . | indent 4 }}

View File

@@ -0,0 +1,42 @@
{{- if .Values.librenms.snmp_scanner.enabled }}
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: {{ .Release.Name }}-snmp-scanner
spec:
schedule: "{{.Values.librenms.snmp_scanner.cron }}"
jobTemplate:
spec:
template:
metadata:
annotations:
checksum/config: {{ include "librenms.configChecksum" . }}
spec:
volumes:
- name: files
configMap:
name: {{ .Release.Name }}-files
containers:
- name: snmp-scanner
image: '{{ .Values.librenms.image.repository }}:{{ .Values.librenms.image.tag }}'
imagePullPolicy: Always
envFrom:
- configMapRef:
name: {{ .Release.Name }}
volumeMounts:
- name: files
mountPath: /opt/librenms/config.d/custom.php
subPath: custom.php
readOnly: true
command:
- '/opt/librenms/snmp-scan.py'
- '-v'
{{- if .Values.librenms.snmp_scanner.resources }}
resources: {{ toYaml .Values.librenms.snmp_scanner.resources | nindent 14 }}
{{- end }}
{{- with .Values.librenms.snmp_scanner.extraEnvs }}
env:
{{- toYaml . | nindent 8 }}
{{- end }}
restartPolicy: OnFailure
{{ end }}

View File

@@ -0,0 +1,74 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Release.Name }}-frontend
spec:
replicas: {{ .Values.librenms.frontend.replicas }}
selector:
matchLabels:
app.kubernetes.io/name: {{ .Release.Name }}
app.kubernetes.io/instance: frontend
template:
metadata:
annotations:
checksum/config: {{ include "librenms.configChecksum" . }}
labels:
app.kubernetes.io/name: {{ .Release.Name }}
app.kubernetes.io/instance: frontend
spec:
volumes:
- name: env-volume
emptyDir: {}
- name: files
configMap:
name: {{ .Release.Name }}-files
- name: mysql
secret:
secretName: {{ .Release.Name }}-mysql
optional: false
initContainers:
- name: init
image: busybox:1.28
command: ["/bin/sh","/data/files/init.sh"]
volumeMounts:
- name: env-volume
mountPath: /data/env-volume
- name: files
mountPath: /data/files
containers:
- name: librenms
image: '{{ .Values.librenms.image.repository }}:{{ .Values.librenms.image.tag }}'
imagePullPolicy: Always
envFrom:
- configMapRef:
name: {{ .Release.Name }}
env:
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: {{ .Release.Name }}-mysql
key: mysql-password
{{- with .Values.librenms.extraEnvs }}
{{- toYaml . | nindent 8 }}
{{- end }}
volumeMounts:
- name: files
mountPath: /data/files
- name: files
mountPath: /data/config/custom.php
subPath: custom.php
readOnly: true
- name: mysql
mountPath: "/opt/secrets/mysql/"
- name: env-volume
mountPath: /data/.env
subPath: env
{{- if .Values.librenms.frontend.resources }}
resources: {{ toYaml .Values.librenms.frontend.resources | nindent 10 }}
{{- end }}
{{- if .Values.librenms.frontend.readinessProbe }}
readinessProbe: {{ toYaml .Values.librenms.frontend.readinessProbe | nindent 10 }}
{{- end }}
ports:
- name: http
containerPort: 8000

View File

@@ -0,0 +1,75 @@
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: {{ .Release.Name }}-poller
spec:
replicas: {{ .Values.librenms.poller.replicas }}
selector:
matchLabels:
app.kubernetes.io/name: {{ .Release.Name }}
app.kubernetes.io/instance: {{ .Release.Name }}
serviceName: "poller"
template:
metadata:
annotations:
checksum/config: {{ include "librenms.configChecksum" . }}
labels:
app.kubernetes.io/name: {{ .Release.Name }}
app.kubernetes.io/instance: {{ .Release.Name }}
spec:
volumes:
- name: env-volume
emptyDir: {}
- name: files
configMap:
name: {{ .Release.Name }}-files
- name: mysql
secret:
secretName: {{ .Release.Name }}-mysql
initContainers:
- name: init
image: busybox:1.28
command: ["/bin/sh","/data/files/init.sh"]
volumeMounts:
- name: env-volume
mountPath: /data/env-volume
- name: files
mountPath: /data/files
containers:
- name: poller
image: '{{ .Values.librenms.image.repository }}:{{ .Values.librenms.image.tag }}'
imagePullPolicy: Always
env:
- name: SIDECAR_DISPATCHER
value: "1"
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: {{ .Release.Name }}-mysql
key: mysql-password
{{- with .Values.librenms.poller.extraEnvs }}
{{- toYaml . | nindent 8 }}
{{- end }}
envFrom:
- configMapRef:
name: {{ .Release.Name }}
volumeMounts:
- name: files
mountPath: /data/config/custom.php
subPath: custom.php
readOnly: true
- name: env-volume
mountPath: /data/.env
subPath: env
- name: mysql
mountPath: "/opt/secrets/mysql/"
readOnly: true
{{- if .Values.librenms.poller.resources }}
resources: {{ toYaml .Values.librenms.poller.resources | nindent 10 }}
{{- end }}
readinessProbe:
exec:
command: ["nc", "-z", "-v", "-w1", "{{ .Release.Name }}-mysql", "3306"]
initialDelaySeconds: 0
periodSeconds: 1
failureThreshold: 3

View File

@@ -0,0 +1,13 @@
apiVersion: v1
kind: Service
metadata:
name: {{ .Release.Name }}
spec:
selector:
app.kubernetes.io/name: {{ .Release.Name }}
app.kubernetes.io/instance: frontend
ports:
- name: {{ .Release.Name }}
protocol: TCP
port: 8000
targetPort: 8000

View File

@@ -0,0 +1,62 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Release.Name }}-rrdcached
spec:
strategy:
type: Recreate
replicas: 1
selector:
matchLabels:
app.kubernetes.io/name: {{ .Release.Name }}
app.kubernetes.io/instance: rrdcached
template:
metadata:
labels:
app.kubernetes.io/name: {{ .Release.Name }}
app.kubernetes.io/instance: rrdcached
spec:
securityContext:
fsGroup: 1000
volumes:
{{- if .Values.librenms.rrdcached.persistence.enabled }}
- name: db
persistentVolumeClaim:
claimName: {{ .Release.Name }}-rrdcached
- name: journal
persistentVolumeClaim:
claimName: {{ .Release.Name }}-rrdcached-journal
{{end}}
- name: mysql
secret:
secretName: {{ .Release.Name }}-mysql
optional: false # default setting; "mysecret" must exist
containers:
- name: rrdcached
image: '{{ .Values.librenms.rrdcached.image.repository }}:{{ .Values.librenms.rrdcached.image.tag }}'
imagePullPolicy: Always
{{- if .Values.librenms.rrdcached.persistence.enabled }}
volumeMounts:
- name: db
mountPath: /data/db
- name: journal
mountPath: /data/journal
- name: mysql
mountPath: "/opt/mysql/"
readOnly: true
{{end}}
env:
{{- with .Values.librenms.rrdcached.envs }}
{{- toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.librenms.rrdcached.extraEnvs }}
{{- toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.librenms.rrdcached.livenessProbe }}
livenessProbe:
{{- toYaml . | nindent 10 }}
{{- end }}
{{- if .Values.librenms.rrdcached.resources }}
resources: {{ toYaml .Values.librenms.rrdcached.resources | nindent 10 }}
{{- end }}

View File

@@ -0,0 +1,31 @@
{{- if .Values.librenms.rrdcached.persistence.enabled }}
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: {{ .Release.Name }}-rrdcached
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: {{ .Values.librenms.rrdcached.persistence.rrdcached.size }}
{{- if .Values.librenms.rrdcached.persistence.rrdcached.storageClassName }}
storageClassName: {{.Values.librenms.rrdcached.persistence.rrdcached.storageClassName}}
{{end}}
volumeMode: Filesystem
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: {{ .Release.Name }}-rrdcached-journal
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: {{ .Values.librenms.rrdcached.persistence.journal.size }}
{{- if .Values.librenms.rrdcached.persistence.journal.storageClassName }}
storageClassName: {{.Values.librenms.rrdcached.persistence.journal.storageClassName}}
{{end}}
volumeMode: Filesystem
{{end}}

View File

@@ -0,0 +1,28 @@
apiVersion: v1
kind: Service
metadata:
name: {{ .Release.Name }}-rrdcached
spec:
selector:
app.kubernetes.io/name: {{ .Release.Name }}
app.kubernetes.io/instance: rrdcached
ports:
- name: rrdcached
protocol: TCP
port: 42217
targetPort: 42217
---
apiVersion: v1
kind: Service
metadata:
name: {{ .Release.Name }}-rrdcached-headless
spec:
selector:
app.kubernetes.io/name: {{ .Release.Name }}
app.kubernetes.io/instance: rrdcached
ports:
- name: rrdcached
protocol: TCP
port: 42217
targetPort: 42217
clusterIP: None