From 718160c8b70ba315ef66359dde40745d2fa09570 Mon Sep 17 00:00:00 2001 From: "Adrian A. Baumann" Date: Sat, 1 Nov 2025 01:24:09 +0100 Subject: [PATCH] First version of helm-charts --- k8s/helm-chart/Chart.yaml | 14 ++++ k8s/helm-chart/templates/_helpers.tpl | 51 ++++++++++++ .../templates/django-deployment.yaml | 59 ++++++++++++++ k8s/helm-chart/templates/django-service.yaml | 17 ++++ k8s/helm-chart/templates/ingress.yaml | 33 ++++++++ .../templates/kroki-deployment.yaml | 48 ++++++++++++ k8s/helm-chart/templates/kroki-service.yaml | 16 ++++ k8s/helm-chart/templates/pvc.yaml | 19 +++++ k8s/helm-chart/values.yaml | 77 +++++++++++++++++++ 9 files changed, 334 insertions(+) create mode 100644 k8s/helm-chart/Chart.yaml create mode 100644 k8s/helm-chart/templates/_helpers.tpl create mode 100644 k8s/helm-chart/templates/django-deployment.yaml create mode 100644 k8s/helm-chart/templates/django-service.yaml create mode 100644 k8s/helm-chart/templates/ingress.yaml create mode 100644 k8s/helm-chart/templates/kroki-deployment.yaml create mode 100644 k8s/helm-chart/templates/kroki-service.yaml create mode 100644 k8s/helm-chart/templates/pvc.yaml create mode 100644 k8s/helm-chart/values.yaml diff --git a/k8s/helm-chart/Chart.yaml b/k8s/helm-chart/Chart.yaml new file mode 100644 index 0000000..12ec0a3 --- /dev/null +++ b/k8s/helm-chart/Chart.yaml @@ -0,0 +1,14 @@ +apiVersion: v2 +name: vorgabenui +description: Helm chart for VorgabenUI Django application with Kroki diagram service +type: application +version: 0.1.0 +appVersion: "0.939" +keywords: + - django + - kroki + - diagrams + - vorgabenui +maintainers: + - name: adebaumann + email: adebaumann@baumann.gr \ No newline at end of file diff --git a/k8s/helm-chart/templates/_helpers.tpl b/k8s/helm-chart/templates/_helpers.tpl new file mode 100644 index 0000000..1e933c4 --- /dev/null +++ b/k8s/helm-chart/templates/_helpers.tpl @@ -0,0 +1,51 @@ +{{/* +Expand the name of the chart. +*/}} +{{- define "vorgabenui.name" -}} +{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Create a default fully qualified app name. +We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). +If release name contains chart name it will be used as a full name. +*/}} +{{- define "vorgabenui.fullname" -}} +{{- if .Values.fullnameOverride }} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }} +{{- else }} +{{- $name := default .Chart.Name .Values.nameOverride }} +{{- if contains $name .Release.Name }} +{{- .Release.Name | trunc 63 | trimSuffix "-" }} +{{- else }} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }} +{{- end }} +{{- end }} +{{- end }} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "vorgabenui.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Common labels +*/}} +{{- define "vorgabenui.labels" -}} +helm.sh/chart: {{ include "vorgabenui.chart" . }} +{{ include "vorgabenui.selectorLabels" . }} +{{- if .Chart.AppVersion }} +app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} +{{- end }} +app.kubernetes.io/managed-by: {{ .Release.Service }} +{{- end }} + +{{/* +Selector labels +*/}} +{{- define "vorgabenui.selectorLabels" -}} +app.kubernetes.io/name: {{ include "vorgabenui.name" . }} +app.kubernetes.io/instance: {{ .Release.Name }} +{{- end }} \ No newline at end of file diff --git a/k8s/helm-chart/templates/django-deployment.yaml b/k8s/helm-chart/templates/django-deployment.yaml new file mode 100644 index 0000000..626ed9d --- /dev/null +++ b/k8s/helm-chart/templates/django-deployment.yaml @@ -0,0 +1,59 @@ +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ include "vorgabenui.fullname" . }} + namespace: {{ .Values.global.namespace }} + labels: + {{- include "vorgabenui.labels" . | nindent 4 }} + app.kubernetes.io/component: django +spec: + replicas: {{ .Values.django.replicaCount }} + selector: + matchLabels: + {{- include "vorgabenui.selectorLabels" . | nindent 6 }} + app.kubernetes.io/component: django + template: + metadata: + labels: + {{- include "vorgabenui.selectorLabels" . | nindent 8 }} + app.kubernetes.io/component: django + spec: + securityContext: + {{- toYaml .Values.django.securityContext | nindent 8 }} + initContainers: + - name: loader + image: "{{ .Values.django.dataLoader.image.repository }}:{{ .Values.django.dataLoader.image.tag }}" + command: [ "sh","-c","cp -n preload/preload.sqlite3 /data/db.sqlite3; chown -R 999:999 /data; ls -la /data; sleep 10; exit 0" ] + volumeMounts: + - name: data + mountPath: /data + containers: + - name: web + image: "{{ .Values.django.image.repository }}:{{ .Values.django.image.tag }}" + imagePullPolicy: {{ .Values.django.image.pullPolicy }} + ports: + - containerPort: {{ .Values.django.service.port }} + volumeMounts: + - name: data + mountPath: /app/data + readinessProbe: + httpGet: + path: / + port: 8000 + initialDelaySeconds: 5 + periodSeconds: 10 + timeoutSeconds: 2 + failureThreshold: 6 + livenessProbe: + httpGet: + path: / + port: 8000 + initialDelaySeconds: 20 + periodSeconds: 20 + timeoutSeconds: 2 + failureThreshold: 3 + volumes: + - name: data + persistentVolumeClaim: + claimName: {{ include "vorgabenui.fullname" . }}-data-pvc \ No newline at end of file diff --git a/k8s/helm-chart/templates/django-service.yaml b/k8s/helm-chart/templates/django-service.yaml new file mode 100644 index 0000000..94ab720 --- /dev/null +++ b/k8s/helm-chart/templates/django-service.yaml @@ -0,0 +1,17 @@ +--- +apiVersion: v1 +kind: Service +metadata: + name: {{ include "vorgabenui.fullname" . }} + namespace: {{ .Values.global.namespace }} + labels: + {{- include "vorgabenui.labels" . | nindent 4 }} + app.kubernetes.io/component: django +spec: + type: {{ .Values.django.service.type }} + selector: + {{- include "vorgabenui.selectorLabels" . | nindent 4 }} + app.kubernetes.io/component: django + ports: + - port: {{ .Values.django.service.port }} + targetPort: {{ .Values.django.service.port }} \ No newline at end of file diff --git a/k8s/helm-chart/templates/ingress.yaml b/k8s/helm-chart/templates/ingress.yaml new file mode 100644 index 0000000..4c409dc --- /dev/null +++ b/k8s/helm-chart/templates/ingress.yaml @@ -0,0 +1,33 @@ +{{- if .Values.ingress.enabled }} +--- +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: {{ include "vorgabenui.fullname" . }} + namespace: {{ .Values.global.namespace }} + labels: + {{- include "vorgabenui.labels" . | nindent 4 }} + {{- with .Values.ingress.annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} +spec: + {{- if .Values.ingress.className }} + ingressClassName: {{ .Values.ingress.className }} + {{- end }} + rules: + - host: {{ .Values.ingress.host }} + http: + paths: + - path: {{ .Values.ingress.path }} + pathType: {{ .Values.ingress.pathType }} + backend: + service: + name: {{ include "vorgabenui.fullname" . }} + port: + number: {{ .Values.django.service.port }} + {{- if .Values.ingress.tls }} + tls: + {{- toYaml .Values.ingress.tls | nindent 4 }} + {{- end }} +{{- end }} \ No newline at end of file diff --git a/k8s/helm-chart/templates/kroki-deployment.yaml b/k8s/helm-chart/templates/kroki-deployment.yaml new file mode 100644 index 0000000..6416fb8 --- /dev/null +++ b/k8s/helm-chart/templates/kroki-deployment.yaml @@ -0,0 +1,48 @@ +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ include "vorgabenui.fullname" . }}-kroki + namespace: {{ .Values.global.namespace }} + labels: + {{- include "vorgabenui.labels" . | nindent 4 }} + app.kubernetes.io/component: kroki +spec: + replicas: {{ .Values.kroki.replicaCount }} + selector: + matchLabels: + {{- include "vorgabenui.selectorLabels" . | nindent 6 }} + app.kubernetes.io/component: kroki + template: + metadata: + labels: + {{- include "vorgabenui.selectorLabels" . | nindent 8 }} + app.kubernetes.io/component: kroki + spec: + containers: + - name: kroki + image: "{{ .Values.kroki.image.repository }}:{{ .Values.kroki.image.tag }}" + ports: + - containerPort: {{ .Values.kroki.service.port }} + readinessProbe: + httpGet: + path: / + port: 8000 + initialDelaySeconds: 5 + periodSeconds: 10 + timeoutSeconds: 2 + failureThreshold: 6 + livenessProbe: + httpGet: + path: / + port: 8000 + initialDelaySeconds: 20 + periodSeconds: 20 + timeoutSeconds: 2 + failureThreshold: 3 + {{- range $service := .Values.kroki.services }} + - name: {{ $service }} + image: "{{ $service.image.repository }}:{{ $service.image.tag }}" + ports: + - containerPort: {{ $service.port }} + {{- end }} \ No newline at end of file diff --git a/k8s/helm-chart/templates/kroki-service.yaml b/k8s/helm-chart/templates/kroki-service.yaml new file mode 100644 index 0000000..2011b05 --- /dev/null +++ b/k8s/helm-chart/templates/kroki-service.yaml @@ -0,0 +1,16 @@ +--- +apiVersion: v1 +kind: Service +metadata: + name: {{ include "vorgabenui.fullname" . }}-kroki + namespace: {{ .Values.global.namespace }} + labels: + {{- include "vorgabenui.labels" . | nindent 4 }} + app.kubernetes.io/component: kroki +spec: + selector: + {{- include "vorgabenui.selectorLabels" . | nindent 4 }} + app.kubernetes.io/component: kroki + ports: + - port: {{ .Values.kroki.service.port }} + targetPort: {{ .Values.kroki.service.port }} \ No newline at end of file diff --git a/k8s/helm-chart/templates/pvc.yaml b/k8s/helm-chart/templates/pvc.yaml new file mode 100644 index 0000000..9c5f516 --- /dev/null +++ b/k8s/helm-chart/templates/pvc.yaml @@ -0,0 +1,19 @@ +{{- if .Values.persistence.enabled }} +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: {{ include "vorgabenui.fullname" . }}-data-pvc + namespace: {{ .Values.global.namespace }} + labels: + {{- include "vorgabenui.labels" . | nindent 4 }} +spec: + accessModes: + {{- toYaml .Values.persistence.accessModes | nindent 4 }} + resources: + requests: + storage: {{ .Values.persistence.size }} + {{- if .Values.persistence.storageClass }} + storageClassName: {{ .Values.persistence.storageClass }} + {{- end }} +{{- end }} \ No newline at end of file diff --git a/k8s/helm-chart/values.yaml b/k8s/helm-chart/values.yaml new file mode 100644 index 0000000..9ee886b --- /dev/null +++ b/k8s/helm-chart/values.yaml @@ -0,0 +1,77 @@ +# Global settings +global: + namespace: vorgabenui + +# Django application settings +django: + replicaCount: 1 + image: + repository: git.baumann.gr/adebaumann/vui + tag: "0.939" + pullPolicy: Always + + # Data loader init container + dataLoader: + image: + repository: git.baumann.gr/adebaumann/vui-data-loader + tag: "0.8" + + # Security context + securityContext: + fsGroup: 999 + fsGroupChangePolicy: "OnRootMismatch" + + # Service settings + service: + type: ClusterIP + port: 8000 + +# Kroki diagram service settings +kroki: + replicaCount: 1 + + # Main kroki service + image: + repository: git.baumann.gr/adebaumann/kroki + tag: "0.026" + + # Additional diagram services + services: + mermaid: + image: + repository: git.baumann.gr/adebaumann/kroki-mermaid + tag: "0.026" + port: 8002 + bpmn: + image: + repository: git.baumann.gr/adebaumann/kroki-bpmn + tag: "0.026" + port: 8003 + excalidraw: + image: + repository: git.baumann.gr/adebaumann/kroki-excalidraw + tag: "0.026" + port: 8004 + + # Service settings + service: + port: 8000 + +# Persistent storage +persistence: + enabled: true + storageClass: "" + accessModes: + - ReadWriteOnce + size: 2Gi + +# Ingress settings +ingress: + enabled: true + className: "" + annotations: + nginx.ingress.kubernetes.io/rewrite-target: / + host: vorgabenportal.knowyoursecurity.com + path: / + pathType: Prefix + tls: [] \ No newline at end of file