GitOps-Architektur
Die Plattform wird vollständig über GitOps betrieben.
Git beschreibt den gewünschten Zustand der Infrastruktur und Anwendungen. FluxCD synchronisiert diesen Zustand kontinuierlich auf alle Cluster.
Überblick
Die GitOps-Architektur besteht aus drei Ebenen:
-
Cluster
-
Module
-
Kubernetes-Ressourcen
Die Orchestrierung erfolgt durch FluxCD.
Reconciliation-Modell
Jeder Cluster besitzt eine eigene FluxInstance.
Die FluxInstance synchronisiert ausschließlich den jeweiligen Clusterpfad.
FluxInstance
|
+-- clusters/home.tamay.cloud
|
+-- clusters/tamay.cloud
|
+-- clusters/test.tamay.cloud
Dadurch kann jeder Cluster unabhängig betrieben werden.
Cluster-Ebene
Die Cluster-Verzeichnisse bilden die Composition Layer der Plattform.
Sie enthalten:
-
Infrastruktur-Komponenten
-
Anwendungen
-
Abhängigkeiten
-
Cluster-spezifische Parameter
Der Cluster entscheidet, welche Module installiert werden.
Die eigentliche Implementierung liegt ausschließlich in den Modulen.
Modul-Ebene
Module beschreiben die technische Implementierung einer Komponente.
Beispiel:
modules/infrastructure/traefik
modules/infrastructure/cilium
modules/apps/immich
modules/apps/paperless-ngx
Module sind grundsätzlich clusterunabhängig.
Eine konkrete Installation entsteht erst durch ein Overlay.
Deployment-Ebene
Die eigentliche Bereitstellung erfolgt über Flux Kustomizations.
Beispiel:
Cluster Kustomization
|
v
Overlay
|
v
Base + Components
|
v
Rendered Resources
|
v
Cluster
Plattform-Abhängigkeiten
Abhängigkeiten werden explizit modelliert.
Beispiele:
cert-manager
|
+-- cert-manager-webhook-hetzner
cilium
|
+-- cilium-config
garage-operator
|
+-- garage-buckets
victoria-metrics-operator
|
+-- victoria-metrics-stack
Dadurch bleiben Bereitstellung und Aktualisierung deterministisch.
Parameterisierung
Cluster-spezifische Werte werden über postBuild.substitute bereitgestellt.
Beispiele:
-
Hostnamen
-
Storage-Klassen
-
Cluster Issuer
-
Backup-Ziele
Dies reduziert die Anzahl notwendiger Overlays und hält Module generisch.
Secret Management
Secrets werden verschlüsselt im Repository gespeichert.
Die Entschlüsselung erfolgt während der Reconciliation über SOPS.
Encrypted Secret
|
v
FluxCD
|
v
SOPS
|
v
Kubernetes Secret
Unverschlüsselte Zugangsdaten werden nicht im Repository gespeichert.
Designprinzipien
-
Git ist die einzige Quelle der Wahrheit.
-
Die Cluster definieren Kompositionen.
-
Module definieren Implementierungen.
-
Overlays definieren konkrete Ausprägungen.
-
FluxCD führt die Synchronisation aus.
-
SOPS schützt sensible Informationen.
-
Abhängigkeiten werden deklarativ modelliert.