Cloud Delivery auf AKS
Überblick
Der Bereitstellungsmechanismus für Kubernetes/Azure. Implementiert Bereitstellungssicherheit und den Verifizierungs-Gate auf AKS. Stack-spezifisch konzipiert – diese Fertigkeit wird nur geladen, wenn eine Aufgabe k8s/AKS betrifft, sodass Projekte ohne Cloud-Bereitstellung (z. B. lokales Docker Compose) diesen Inhalt nie sehen.
Bereitstellungsregeln
- Lokale Entwicklung nutzt den gesamten Stack via Docker Compose, ein Befehl, umfassend – eine Anforderung erster Güte.
- Images werden in CI erstellt → GHCR, identifiziert durch Content-Digest, dann unverändert befördert Preview → Staging → Production. Nie pro Umgebung neugebaut.
- Kurzlebige Preview-Umgebungen pro PR. Jeder PR wird in seinem eigenen isolierten Namespace auf AKS bereitgestellt, bei Merge/Schließen abgebaut. Das Integrationstest-Bett; günstig zu erstellen und zu zerstören.
- Kubernetes-Health-Gating. Jede Workload definiert Liveness-, Readiness- und Startup-Probes (verbunden mit den Endpunkten in
observability-and-slos), eine Rolling-Update-Strategie mit begrenztemmaxUnavailable/maxSurgeund einem PodDisruptionBudget. Verwenden Sie ein HPA für Last. - Progressive Bereitstellung in Produktion. Canary oder Blue-Green via Argo Rollouts / Flagger mit automatischer Metrikanalyse, die an SLOs gebunden ist; ein fehlgeschlagenes Canary wird automatisch abgebrochen.
- Rollback ist erstklassig und wird geübt. Unveränderliche, digest-addressed Images machen Rollback zu einer erneuten Bereitstellung des zuvor guten Digests (
kubectl rollout undo/ Abbruch des Rollouts). Vor dem Ausliefern riskanter Änderungen verifiziert. - Migrationen sind ein separater, geordneter Pipeline-Schritt, expand-sicher (siehe
zero-downtime-migrations), werden vor dem Code ausgeführt, der von ihnen abhängt – nie in den Pod gebündelt, der das neue Schema benötigt. - CI ist das Gate: Lint, Typprüfung, Vertragsprüfungen, Tests, Security-Scans werden bei jeder Änderung ausgeführt und blockieren den Merge im Modus
enforced. CI baut auch das Image und veröffentlicht seinen Provenance-Attestation und befördert dann diesen Digest unverändert. - Dev/Prod-Parität & Konfiguration aus der Umgebung. Geheimnisse aus Azure Key Vault (via Secrets Store CSI-Treiber oder versiegelte Secrets) – niemals in Images oder festgeschriebenen
.env. Ports/Konfiguration aus der Umgebung. Nur für Dev bestimmte Werkzeuge (pgTAP, Test-Runner) werden nie in Produktions-Images ausgeliefert.
Die Pipeline
| Stufe | Auslöser | Umgebung | Digest |
|---|---|---|---|
| preview | PR geöffnet / synchronisiert | kurzlebiger ns preview-<app>-pr-<N> | hier gebaut, getaggt sha-<pr-head> |
| staging | Merge in main | persistenter ns staging | Neutag des Preview-Digests als sha-<merge> |
| production | Release veröffentlicht + Genehmigung | ns production | Digest des Eltern-Commits des Release-Commits |
Warum der Eltern-Commit. Der Release-Commit von release-please ändert nur CHANGELOG.md und das Manifest, daher ist sein Baum nie einer, den Staging durchlaufen hat – was immer Preview für den Release-PR selbst gebaut hat, wurde nie über Preview hinaus befördert. Sein Eltern-Commit ist der letzte Feature-Merge, was genau das ist, was Staging validiert hat, vorausgesetzt, release-please hält seinen Release-Branch an der Spitze von main (sein Standardverhalten). Den Digest aus Git abzuleiten, anstatt aus dem Live-Cluster-Zustand, hält die Beförderung reproduzierbar.
Sicherheit beim Neutag. Squash-Merge erzeugt einen anderen Commit-SHA und, wenn sich main während des PRs verschoben hat, einen anderen Baum. Zwei Absicherungen:
- Erfordern „Branches aktuell halten vor Merge“ – eine Untermenge der Regel für erforderliche Status-Checks – sodass der Squash-Baum per Konstruktion dem PR-Kopf-Baum entspricht. Diese Absicherung benötigt Branch-Protection, existiert also nur im Modus
enforced; ein Projekt im Modusadvisoryhat den untenstehenden Baumvergleich als einzige Absicherung und sollte den Neubaupfad als Routine statt als Ausnahme erwarten. - Verifizieren statt annehmen: Vergleiche
git rev-parse <merge>^{tree}mit dem PR-Kopf-Baum. Gleich → Neutag. Ungleich → Neubau beim Merge-SHA. Das ist nicht der Neubau pro Umgebung, den die Bereitstellungsregeln verbieten: Ein ungleicher Baum bedeutet, dass der Inhalt selbst sich von dem unterscheidet, was Preview validiert hat, also gibt es kein beförderbares Artefakt – und das neugebaute Image tritt in Staging als neuer Kandidat ein, nicht als Beförderung. Beachten Sie, was verloren geht, wenn dieser Pfad genommen wird: Dieses Image wurde nie in einer Preview-Umgebung überprüft, daher gilt „das ausgelieferte Image ist das überprüfte Image“ nicht dafür. Staging ist dann seine erste Validierung, nicht seine zweite.
Der Neutag ist eine Pointer-Operation – kein Neubau, kein Pull:
docker buildx imagetools create -t "$REPO:sha-$MERGE_SHA" "$REPO@sha256:$DIGEST"
Der Attestation bleibt an den PR-Kopf-SHA gebunden, also erfassen Sie die Kopf→Merge-Zuordnung im Bereitstellungsdatensatz; die Image-Konfiguration kann ohne Neubau nicht bearbeitet werden.
Das Genehmigungs-Gate – eine Eigenschaft, zwei Mechanismen:
| Modus | Mechanismus |
|---|---|
enforced | GitHub-Umgebung production mit erforderlichen Reviewern |
advisory | Ein workflow_dispatch-Promote-Job; das Ausführen ist die Entscheidung |
Kurzreferenz
| Aspekt | Mechanismus |
|---|---|
| Geheimnisse | Key Vault → CSI-Treiber; rotiert; nie im Image |
| Health | Liveness + Readiness + Startup-Probes; Readiness prüft echte Abhängigkeiten |
| Sicheres Rollout | Canary/Blue-Green, SLO-gesteuert, automatischer Abbruch bei Fehlschlag |
| Rollback | Erneute Bereitstellung des zuvor guten Digests; vor riskanten Auslieferungen geübt |
| PR-Umgebung | Isolierter Namespace, bei Merge abgebaut |
| Schema | Separater geordneter Schritt, expand-sicher, vor Code |
| Beförderung | Neutag des Digests; nie Neubau pro Umgebung |
| Genehmigung | Umwelt-Reviewer (enforced) oder manuelle Dispatch (advisory) |
Warum dies isoliert ist: Alle Azure/k8s-Spezifika leben hier hinter einem stack-spezifischen Auslöser. Ein lokales oder Cloud-fremdes Projekt ersetzt seine eigene Bereitstellungsfertigkeit; die Prinzipien (unveränderliches Artefakt, reversibles + progressives Bereitstellen, entkoppelte Migrationen) stammen aus resilience-and-deploy-safety.
Vollständige Begründung: Artikel XIX der Verfassung, gebündelt in engineering-constitution/references/engineering-constitution.md.