Bei einem Canary-Deployment wird eine neue Version der Anwendung zu einem kleinen Prozentsatz der Benutzer veröffentlicht und schrittweise die Stabilität und Funktionalität im Live-Betrieb überwacht. Wenn keine Probleme auftreten, wird die neue Version allmählich auf alle Benutzer ausgerollt.
In diesem Diagramm:
Load Balancer (LB) verteilt die Benutzeranfragen
auf die Produktionspods (Prod) und die Canary-Pods.Prod V1).Canary V2) gerichtet.Monitoring System.Admin überwacht die Metriken. Bei Erfolg initiiert
der Admin das vollständige Rollout, bei Fehlern das Rollback.V2) umgeleitet.V1) zurückgeleitet.Das folgende Beispiel zeigt, wie ein Canary-Deployment in einer Kubernetes-Umgebung umgesetzt werden könnte:
apiVersion: apps/v1
kind: Deployment
metadata:
name: app-canary
spec:
replicas: 1 # Eine kleine Anzahl von Pods für das Canary-Release
selector:
matchLabels:
app: example-app
track: canary
template:
metadata:
labels:
app: example-app
track: canary
spec:
containers:
- name: example-app
image: example-app:v2 # Die neue Version der Anwendung
---
apiVersion: v1
kind: Service
metadata:
name: example-app-service
spec:
selector:
app: example-app
ports:
- protocol: TCP
port: 80
targetPort: 9376In diesem Beispiel:
app-canary, das die neue
Version der Anwendung (v2) mit einer geringen Anzahl von Replikaten
ausführt.example-app-service wird
verwendet, um den Verkehr zu verwalten. Er wählt Pods aus, die mit
app: example-app markiert sind, was sowohl die
ursprünglichen als auch die Canary-Pods einschließt.Canary-Releases erfordern eine fortgeschrittene Infrastruktur für Verkehrssteuerung und Monitoring, um effektiv zu sein.