Skip to content
🟡In Arbeit52%
Vollständigkeit:
60%
Korrektheit:
70%
⏳ Noch nicht geprüft

Deployment-Voraussetzungen

Dieses Dokument spezifiziert die Voraussetzungen, die vor Beginn der CIVITAS/CORE-V2-Installation erfüllt sein müssen. Es gliedert sich in Cluster-Anforderungen, Werkzeuge, DNS, Secrets und Netzwerk-Vorgaben.

Cluster-Anforderungen

Der Kubernetes-Cluster (k3s Single-Node auf der CIVITAS-VM) muss folgende Voraussetzungen erfüllen:

AnforderungSpezifikationBegründung
Kubernetes-Version≥ 1.32, x86_64Von CIVITAS/CORE V2 gefordert
Ingress Controllernginx (als DaemonSet)Notwendig für externe Erreichbarkeit
cert-managerInstalliert mit ClusterIssuer (selfsigned-ca)Wird von Komponenten für interne TLS-Zertifikate benötigt
Storage ClassRWO-fähig (z. B. local-path von k3s)Für persistente Volumes (PostgreSQL, etc.)
Cluster-Admin-RechteVollständig (kubeconfig mit Cluster-Rollen)Erforderlich für CRD-Installation (CloudNativePG, Strimzi)

Kubernetes ≥ 1.32 wird durch die Installation von k3s v1.32.3+k3s1 (oder neuer) in Phase 1a sichergestellt.

Linkerd Service Mesh (offener Punkt)

Die V2-Dokumentation empfiehlt Linkerd für mTLS-Kommunikation und Observability. Linkerd ist optional. Die Entscheidung über Installation und Konfiguration ist noch offen und wird in einem separaten Schritt getroffen.

Benötigte Werkzeuge (Phase 0)

Auf der Ziel-VM müssen vor dem Deployment folgende Werkzeuge installiert sein:

ToolMinimale VersionZweckInstallation
kubectlv1.32+Kubernetes-CLIVia k3s-Installation (wird mitgeliefert)
helm3.18+Kubernetes-Package-ManagerSeparater Download via curl
helmfile1.1.9+Deklarative Helm-Chart-OrchestrierungBinary-Download via curl
helm-diff-PluginAktuellWird von helmfile benötigthelm plugin install
gitBeliebigDeployment-Repository klonenVia APT

Diese Werkzeuge werden in Phase 0 (Preflight) auf Vollständigkeit und Mindestversion geprüft. Fehlende Werkzeuge werden automatisch installiert. Bei abweichenden Versionen erfolgt ein Abbruch.

DNS-Einträge

Bevor Phase 2b beginnt, müssen folgende DNS-Einträge gesetzt sein und auflösbar sein:

EintragZielZweck
idm.$DOMAINÖffentliche IP der OPNsense (Caddy)Keycloak-Authentifizierung
portal.$DOMAINÖffentliche IP der OPNsense (Caddy)Benutzer- und Datenportal

Die Auflösung muss von der VM aus funktionieren (dig +short liefert IP). Caddy auf OPNsense leitet die Anfragen über den WireGuard-Tunnel an die VM weiter (Port 8080, HTTP).

Hinweis: Die DNS-Prüfung erfolgt zweistufig:

  1. Phase 0: Warnung (weich) – DNS muss noch nicht gesetzt sein.
  2. Phase 2b: Harter Abbruch – DNS muss auflösbar sein.

Secrets

Vor Phase 2c (helmfile sync) muss folgendes Secret im Kubernetes-Cluster existieren. Da CIVITAS/CORE V2 im Single-Namespace-Modus arbeitet, wird das Secret im Ziel-Namespace angelegt.

keycloak-smtp

yaml
apiVersion: v1
kind: Secret
metadata:
  name: keycloak-smtp
  namespace: <instanceSlug>
type: Opaque
stringData:
  host: "<SMTP_HOST>"
  port: "<SMTP_PORT>"
  from: "<SMTP_FROM_ADDRESS>"
  user: "<SMTP_USER>"
  password: "<SMTP_PASS>"

Das Secret wird in Phase 2b aus den Umgebungsvariablen des Skripts erzeugt (kubectl create secret generic keycloak-smtp ...). Die Werte stammen aus den bestehenden SMTP-Env-Vars (SMTP_HOST, SMTP_PORT, SMTP_USER, SMTP_PASS, SMTP_FROM).

Hinweis: Standardmäßig generiert helmfile Secrets für alle Komponenten automatisch. Nur keycloak-smtp muss zwingend vorab existieren, da das System sonst keine E-Mails versenden kann (Passwort-Reset, Einladungen). Ohne gültiges SMTP-Secret kann der initiale Admin kein Passwort setzen und muss dies manuell über die Keycloak-Admin-Konsole nachholen.

Deployment-Repository

Das zentrale Deployment-Repository wird in Phase 2a auf die Ziel-VM geklont:

https://gitlab.com/civitas-connect/civitas-core/civitas-core-v2/civitas-core-deployment.git
  • Zielverzeichnis: /opt/civitas-core-v2
  • Symlink: /opt/civitas-core → /opt/civitas-core-v2
  • Branch/Tag: Vor Implementierung festzulegen (kompatibel zur gewählten helmfile-Version)

Das Repository enthält:

  • defaults/ — Standardkonfiguration (nicht verändern)
  • components/ — 14 Komponenten-Definitionen als Helm-Chart-Wrapper
  • deployment/ — Instanzspezifische Konfiguration (eigenes Git-Repo)

Netzwerk-Vorgaben

Die VM muss vor Beginn der Installation folgende Netzwerk-Voraussetzungen erfüllen:

VorgabePrüfungZeitpunkt
SOHO-Gateway erreichbarping -c2 192.168.12.1Phase 0
SMTP-Server erreichbartcp_reachable $SMTP_HOST $SMTP_PORTPhase 0
DNS auflösbar (weich)dig +short idm.$DOMAIN (Warnung)Phase 0
DNS auflösbar (hart)dig +short idm.$DOMAIN + portal.$DOMAINPhase 2b
Deployment-Repository erreichbargit ls-remote $REPO_URLPhase 2a

WireGuard ist während der Phasen -1 bis 2c nicht aktiv. Der Tunnel wird erst in Phase 2d nach erfolgreichem helmfile sync konfiguriert und gestartet. Bis dahin erfolgt die Kommunikation über das SOHO-LAN.

Storage-Vorgaben

Die VM-Disk (300 GiB, ZFS thin-provisioned auf rpool) muss ausreichend Platz für folgende Komponenten bieten:

KomponenteGeschätzter Bedarf
Container-Images und k3s-Daten10–20 GiB
PostgreSQL-Daten (CloudNativePG)20–50 GiB (Start), skalierbar
ETCD-Daten1–5 GiB
Kafka-Daten10–30 GiB
Logs und Metriken5–10 GiB

Bei 300 GiB Gesamtspeicher ist mit Engpässen zu rechnen, sobald die Plattform produktiv genutzt wird. Eine Storage-Erweiterung oder Aufräumstrategie ist vor dem Produktivbetrieb zu spezifizieren.

Offene Punkte (vor Implementierung zu klären)

PunktStatusEntscheidung bei
Branch/Tag des Deployment-RepositorysOffen – muss kompatibel zu helmfile 1.1.9+ festgelegt werdenVor Implementierung
Linkerd-Installation (ja/nein)Offen – empfohlen, aber nicht zwingendArchitekturentscheidung
Profil: development oder productionOffen – beeinflusst Ressourcen, Replicas, LoggingBetriebsentscheidung
instanceSlug (Namespace-Name)Offen – z. B. cc-prdFestlegung vor Skriptbau