Deployment
Deployments verwalten die laufenden Pods von Frontend, Backend und Datenbank. Die gemeinsame Basis definiert Container, Ports, Probes und Security Contexts; Overlays setzen Images und Ressourcenwerte.
Frontend-Deployment
Das geplante Deployment bflies-frontend liefert die gebaute Vue-Anwendung über einen Webserver aus. Analog zu ETE sind vorgesehen:
- Mount der
config.jsausbflies-frontend-cfg, - eigener interner HTTP-Port,
- Startup-, Readiness- und Liveness-Probes,
- Ausführung als nicht privilegierter Benutzer,
- entfernte Linux-Capabilities,
emptyDir-Volumes für erforderliche Cache- und Laufzeitverzeichnisse,- kleine, je Umgebung gepatchte CPU-/Memory-Anforderungen.
Backend-Deployment
Das geplante Deployment bflies-backend startet die Spring-Boot-Anwendung. Es erhält ConfigMap- und Secret-Werte sowie folgende Betriebsparameter:
- Containerport der HTTP-API,
- Spring-Boot-Startup-, Readiness- und Liveness-Endpunkte,
- Graceful Shutdown und angemessene
terminationGracePeriodSeconds, - nicht privilegierter Security Context,
- explizite CPU-/Memory-Requests und Limits,
- zunächst eine Replik, später Skalierung nur bei gemessenem Bedarf.
HTTP-Sessions sollen nicht als Voraussetzung für die Skalierung des neuen Backends verwendet werden.
Datenbank-Deployment
Das geplante Deployment bflies-mysql betreibt genau eine Datenbankinstanz und verwendet die Strategie Recreate. Es bindet:
- den PersistentVolumeClaim für
/var/lib/mysql, - die MySQL-ConfigMap,
- das Datenbank-Secret,
- eine Datenbank-Readiness- beziehungsweise Liveness-Prüfung.
Vor der Umsetzung ist zu prüfen, ob der Clusterstandard stattdessen einen Datenbank-Operator oder ein StatefulSet vorsieht. Die Dokumentation wird dann entsprechend angepasst.
yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app.kubernetes.io/instance: bflies-int
app.kubernetes.io/name: bflies-mysql
name: bflies-mysql
namespace: bflies-int
spec:
progressDeadlineSeconds: 600
replicas: 1
revisionHistoryLimit: 10
selector:
matchLabels:
app.kubernetes.io/instance: bflies-int
app.kubernetes.io/name: bflies-mysql
strategy:
type: Recreate
template:
metadata:
labels:
app.kubernetes.io/instance: bflies-int
app.kubernetes.io/name: bflies-mysql
spec:
containers:
- env:
- name: MYSQL_DATABASE
value: bflies
- name: MYSQL_USER
value: bflies
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
key: root
name: bflies-mysql-sec
optional: false
- name: MYSQL_PASSWORD
valueFrom:
secretKeyRef:
key: user
name: bflies-mysql-sec
optional: false
image: docker.tdm-consult.com/docker/mysql:8.4.9
imagePullPolicy: Always
livenessProbe:
exec:
command:
- mysqladmin
- ping
- '-u'
- root
- '-p${MYSQL_ROOT_PASSWORD}'
failureThreshold: 3
initialDelaySeconds: 5
periodSeconds: 30
successThreshold: 1
timeoutSeconds: 1
name: database
ports:
- containerPort: 3306
protocol: TCP
resources:
limits:
cpu: 500m
memory: 2Gi
requests:
cpu: 500m
memory: 512Mi
volumeMounts:
- mountPath: /var/lib/mysql
name: bflies-pvc
subPath: mysql
- mountPath: /etc/mysql/conf.d/my.cnf
name: bflies-mysql-cnf
subPath: my.cnf
dnsPolicy: ClusterFirst
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
terminationGracePeriodSeconds: 30
volumes:
- name: bflies-pvc
persistentVolumeClaim:
claimName: bflies-int-iscsi-pvc
- configMap:
defaultMode: 420
name: bflies-mysql-cnf
name: bflies-mysql-cnfGemeinsame Regeln
- Images werden mit eindeutigem Release-Tag oder Digest referenziert.
imagePullPolicyund Rolloutstrategie werden bewusst festgelegt.- Selektoren und Pod-Labels bleiben zwischen Deployment und Service konsistent.
- Die GitLab-Pipeline ersetzt keine beliebigen YAML-Platzhalter, sondern setzt Images über Kustomize.