Freigabe ohne Angst: Kanarienvogel, blau-grüne und Flaggen
Zuerst auf 5%, dann entscheiden. Wie die progressive Entbindung funktioniert.
Zuerst auf 5%, dann entscheiden. Wie die progressive Entbindung funktioniert.

Es gibt eine besondere Art von Stille in einem Team-Chat direkt nach einem großen Produktions-Einsatz. Alle sehen auf das Armaturenbrett. Niemand möchte der Erste sein, der sagt: "Ist es nur ich, oder steigen die Fehler an?"
Progressive Delivery ersetzt dieses Schweigen durch einen Plan: erst ein paar Benutzer freigeben, verfolgen, was passiert, und erst dann entscheiden, ob man weitermacht. Wenn etwas nicht stimmt, merkt nur eine kleine Gruppe das, und das System kann die Änderung automatisch rückgängig machen.
- Das ist ein Update. Kubernetes' Standard: Ersetzen Sie ein paar Kapseln nach dem anderen. Einfach, aber sobald die Einführung beginnt, mischen sich neue und alte Versionen und Sie haben wenig Kontrolle darüber, wer was sieht.
Blau-grün. Die neue Version (grün) neben der alten (blau) ausführen. Test grün, dann alle Verkehrsmittel gleichzeitig. Zurückrollen bedeutet, zurück zu wechseln. Die Kosten: Verdoppelung der Ressourcen während des Wechselns und ein "Big Bang"-Moment für die Nutzer.
- Ein Kanarienvogel. Ein kleiner Prozentsatz des Traffics wird an die neue Version geschickt, z. B. 5%, dann 25%, dann 50%, dann 100%, wobei die Metriken in jedem Schritt überprüft werden. Langsamer, aber sicherer, um Probleme zu erkennen, die nur im realen Verkehr auftreten.
- Das ist ein Flaggen-Feature. Code mit der neuen Funktion ausgeschaltet bereitstellen, dann für bestimmte Benutzer, einen Prozentsatz oder alle aktivieren, ohne erneut zu bereitstellen. Das trennt Einsatz (code in die Produktion bringen) von Freisetzung (den Benutzern das zu zeigen).
| mit einem Durchmesser von | Blau-grün | Kanarienvögel | Merkmale der Flagge | |
|---|---|---|---|---|
| Kontrolle der Exposition | Niedrig | Alles oder nichts . | Nach dem Verkehr schrittweise | Sehr gut, je nach Benutzer |
| Rückwärtsgeschwindigkeit | Langsam . | - Ich bin gleich da. | Schnell . | - Ich bin gleich da. |
| Zusätzliche Infrastruktur | Keine | Verdoppeln während des Umschaltens | Einige | Flaggendienst |
| Am besten für | Veränderungen mit geringem Risiko | Große Schalter | Risikogene Änderungen im Backend | Merkmale des Produkts |
Das Einsatzwesen sollte langweilig sein. Die Freilassung sollte eine Entscheidung sein.
Auf Kubernetes, Argo-Rollouts (und - Das ist Flagger., sein Gegenstück im Flux-Ökosystem) ergänzt Kanarien- und blau-grüne Strategien mit automatischer Analyse.
A Rollout ersetzt eine Deployment:
apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
name: shop-api
spec:
replicas: 10
strategy:
canary:
steps:
- setWeight: 5
- pause: { duration: 5m }
- analysis:
templates:
- templateName: error-rate
- setWeight: 25
- pause: { duration: 10m }
- setWeight: 50
- pause: { duration: 10m }
selector:
matchLabels: { app: shop-api }
template:
# same pod template as a Deployment
Die Analyse step führt eine Prometheus-Abfrage aus, zum Beispiel die Fehlerquote des Kanarienvögels, und vergleicht sie mit einem Schwellenwert:
apiVersion: argoproj.io/v1alpha1
kind: AnalysisTemplate
metadata:
name: error-rate
spec:
metrics:
- name: error-rate
interval: 1m
count: 5
successCondition: result[0] < 0.01
provider:
prometheus:
address: http://prometheus.monitoring:9090
query: |
sum(rate(http_requests_total{app="shop-api",version="canary",code=~"5.."}[2m]))
/
sum(rate(http_requests_total{app="shop-api",version="canary"}[2m]))
Wenn die Fehlerquote über 1% liegt, wird die Einführung abgebrochen und der Datenverkehr geht zurück zur stabilen Version. Niemand musste wach sein.
Für präzise Verkehrsprosente integriert sich Rollouts mit Gateway-API-Implementierungen, Service-Meshes und Eingangscontrollern. Ohne sie wird das Gewicht mit Hilfe der Replikenzahl annähernd ermittelt.
Die Flaggen bedeuteten früher entweder eine hausgemachte if Eine Umgebungsvariable oder ein kommerzieller Dienst mit einem eigenen SDK überall. OpenFeature wird nicht verwendet, ein CNCF-Projekt, standardisiert die API: Ihr Code verwendet ein SDK, und Sie können verschiedene Flag-Anbieter dahinter (flagd, LaunchDarkly, Flagsmith, Unleash, GrowthBook und andere) einbinden.
enabled, _ := client.BooleanValue(ctx, "new-checkout", false, evalCtx)
if enabled {
return newCheckout(w, r)
}
return oldCheckout(w, r)
Gute Flaggengewohnheiten:
Die besten Einrichtungen verknüpfen Releases mit Ihren Service-Level-Zielen. Wenn eine neue Version das Fehlerbudget schneller als normal verbraucht, stoppt und rückläuft die Einführung. Das macht "die Dashboards nervös beobachten" zu einem automatischen Sicherheitsnetz, basierend auf dem, was Benutzer tatsächlich erleben.
Beginnen Sie mit Feature-Flags für Produktänderungen, sie sind der einfachste Gewinn. Fügen Sie Kanarien-Veröffentlichungen mit automatischer Analyse für Ihre wichtigsten Dienste hinzu. Verwenden Sie blau-grün, wenn Sie einen sauberen Schalter brauchen, wie eine große Versionänderung. Und halten Sie Updates für alles mit geringem Risiko.
Meine Meinung: Loslassen in kleinen Schritten, lassen die Metriken die erste Entscheidung treffen, und stellen Sie sicher, dass Sie immer einen Klick zurück sind.
Desly