TDM Consult GmbHBusiness Flies
Zum Inhalt springen

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.js aus bflies-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-cnf

Gemeinsame Regeln ​

  • Images werden mit eindeutigem Release-Tag oder Digest referenziert.
  • imagePullPolicy und 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.