Compare commits

...

2 Commits

Author SHA1 Message Date
718160c8b7 First version of helm-charts 2025-11-01 01:24:09 +01:00
Adrian A. Baumann
94363d49ce Deploy 939 2025-10-31 12:35:26 +01:00
11 changed files with 336 additions and 2 deletions

View File

@@ -25,7 +25,7 @@ spec:
mountPath: /data
containers:
- name: web
image: git.baumann.gr/adebaumann/vui:0.938
image: git.baumann.gr/adebaumann/vui:0.939
imagePullPolicy: Always
ports:
- containerPort: 8000

14
k8s/helm-chart/Chart.yaml Normal file
View File

@@ -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

View File

@@ -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 }}

View File

@@ -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

View File

@@ -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 }}

View File

@@ -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 }}

View File

@@ -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 }}

View File

@@ -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 }}

View File

@@ -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 }}

View File

@@ -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: []

View File

@@ -28,6 +28,6 @@
<div class="flex-fill">{% block content %}Main Content{% endblock %}</div>
<div class="col-md-2">{% block sidebar_right %}{% endblock %}</div>
</div>
<div>VorgabenUI v0.936</div>
<div>VorgabenUI v0.939</div>
</body>
</html>