In diesem Dokument wird beschrieben, wie Sie eine Canary-Bereitstellungsstrategie konfigurieren und verwenden.
Was ist ein Canary-Deployment?
Ein Canary-Deployment ist ein progressives Roll-out einer Anwendung, bei dem der Traffic zwischen einer bereits bereitgestellten Version und einer neuen Version aufgeteilt wird. Die neue Version wird für einen Teil der Nutzer eingeführt, bevor sie vollständig eingeführt wird.
Unterstützte Zieltypen
Canary-Deployment in Cloud Deploy unterstützt alle Zieltypen, darunter:
- Google Kubernetes Engine
- Cloud Run (nur Dienste, keine Jobs)
- GKE Enterprise
Canary funktioniert auch mit mehreren Zielen.
Warum sollten Sie eine Canary-Release-Strategie verwenden?
Mit einer Canary-Bereitstellung können Sie Ihre Anwendung teilweise veröffentlichen. So können Sie sichergehen, dass die neue Version Ihrer Anwendung zuverlässig ist, bevor Sie sie für alle Nutzer bereitstellen.
Wenn Sie beispielsweise in GKE oder GKE Enterprise bereitstellen, können Sie die neue Version Ihrer Anwendung in einer begrenzten Anzahl von Pods bereitstellen. Die alte Version wird weiterhin ausgeführt, aber ein größerer Teil des Traffics wird an die neuen Pods gesendet.
Wenn Sie die Bereitstellung in Cloud Run vornehmen, wird der Traffic in Cloud Run entsprechend den von Ihnen konfigurierten Prozentsätzen zwischen der alten und der neuen Version aufgeteilt.
Arten von Canary
Mit Cloud Deploy können Sie die folgenden Arten von Canary-Bereitstellungen konfigurieren:
Automatisiert
Bei einer automatischen Canary-Bereitstellung konfigurieren Sie Cloud Deploy mit einer Reihe von Prozentsätzen, die eine progressive Bereitstellung ausdrücken. Cloud Deploy führt in Ihrem Namen zusätzliche Vorgänge aus, um den Traffic in Prozent zwischen der alten und der neuen Version aufzuteilen.
Benutzerdefiniert automatisiert
Für einen benutzerdefinierten, automatisierten Canary können Sie Folgendes angeben:
- den Namen der Phase
- Das prozentuale Ziel
- Das Skaffold-Profil, das für die Phase verwendet werden soll
- Ob ein Bestätigungsjob enthalten sein soll
- Ob ein Job vor oder nach der Bereitstellung oder beides enthalten sein soll
Sie müssen jedoch keine Informationen zum Traffic-Balancing angeben. Die erforderlichen Ressourcen werden von Cloud Deploy erstellt.
Benutzerdefiniert
Bei einem benutzerdefinierten Canary-Test konfigurieren Sie jede Canary-Phase separat, einschließlich der folgenden:
- den Namen der Phase
- Das prozentuale Ziel
- Das Skaffold-Profil, das für die Phase verwendet werden soll
- Ob ein Bestätigungsjob enthalten sein soll
- Ob ein Job vor oder nach der Bereitstellung oder beides enthalten sein soll
Bei einem vollständig benutzerdefinierten Canary müssen Sie außerdem die gesamte Traffic-Balancing-Konfiguration angeben, wie hier beschrieben.
Phasen eines Canary-Deployments
Wenn Sie einen Release für eine Canary-Bereitstellung erstellen, wird das Roll-out mit einer Phase für jedes Canary-Inkrement sowie einer abschließenden stable
-Phase für 100 % erstellt.
Wenn Sie beispielsweise einen Canary für Steigerungen von 25%, 50 % und 75% konfigurieren, umfasst das Roll-out die folgenden Phasen:
canary-25
canary-50
canary-75
stable
Weitere Informationen zu Roll-out-Phasen, Jobs und Jobausführungen finden Sie unter Roll-outs verwalten.
Was passiert bei einem automatischen oder benutzerdefinierten Canary-Test?
Zur Unterstützung Ihrer Canary-Bereitstellung enthält Cloud Deploy spezielle Verarbeitungsschritte beim Rendern Ihres Kubernetes-Manifests oder Ihrer Cloud Run-Dienstkonfiguration:
GKE/Enterprise
So führt Cloud Deploy ein Canary-Deployment in der netzwerkbasierten GKE und GKE Enterprise aus:
Sie geben den Namen der Deployment-Ressource und der Dienstressource an.
Cloud Deploy erstellt eine zusätzliche Bereitstellungsressource mit dem Namen Ihrer aktuellen Bereitstellung und
-canary
.Cloud Deploy ändert den Dienst, um den Selektor so anzupassen, dass die Pods im aktuellen Deployment und die Canary-Pods ausgewählt werden.
Cloud Deploy berechnet die Anzahl der Pods, die für den Canary verwendet werden sollen, anhand der hier beschriebenen Berechnung. Diese Berechnung unterscheidet sich je nachdem, ob Sie die Überprovisionierung von Pods aktivieren oder deaktivieren.
Wenn wir zur Phase
stable
springen, fügt Cloud Deploy die Labels hinzu, die zum Abgleichen von Pods verwendet werden sollen, damit sie für nachfolgende Canary-Ausführungen verfügbar sind.Cloud Deploy erstellt ein Deployment, das den phasenspezifischen Prozentsatz der Pods enthält, und aktualisiert es für jede Phase. Dazu wird die Anzahl der Pods als Prozentsatz der ursprünglichen Anzahl der Pods berechnet. Dies kann zu einer ungenauen Aufteilung der Zugriffe führen. Wenn Sie eine genaue Traffic-Aufteilung benötigen, können Sie die Gateway API verwenden.
Außerdem werden Secrets und ConfigMaps mit
-canary
kopiert und umbenannt.Während der
stable
-Phase wird die-canary
-Bereitstellung auf null skaliert und die ursprüngliche Bereitstellung durch die neue ersetzt.Cloud Deploy ändert die ursprüngliche Bereitstellung erst in der
stable
-Phase.
Cloud Deploy stellt Pods bereit, um den angeforderten Canary-Prozentsatz so genau wie möglich zu erreichen. Dieser Wert basiert auf der Anzahl der Pods, nicht auf dem Traffic zu den Pods. Wenn Ihr Canary auf dem Traffic basieren soll, müssen Sie die Gateway API verwenden.
Bei einem GKE-Netzwerk-basierten Canary können Sie die Überprovisionierung von Pods aktivieren oder deaktivieren. In den folgenden Abschnitten wird beschrieben, wie Cloud Deploy die Anzahl der Pods berechnet, die für die Canary-Bereitstellung für jede Canary-Phase bereitgestellt werden sollen.
Pod-Bereitstellung mit aktivierter Überdimensionierung
Wenn Sie die Überprovisionierung aktivieren (disablePodOverprovisioning: false
), kann Cloud Deploy anhand der Anzahl der Pods, in denen Ihre vorhandene Bereitstellung ausgeführt wird, genügend zusätzliche Pods erstellen, um den gewünschten Canary-Prozentsatz auszuführen. In der folgenden Formel wird gezeigt, wie Cloud Deploy die Anzahl der Pods berechnet, die für die Canary-Bereitstellung für jede Canary-Phase bereitgestellt werden sollen, wenn die Überprovisionierung von Pods aktiviert ist:
math.Ceil( percentage * ReplicaCountOfDeploymentOnCluster / (100-percentage))
Bei dieser Formel wird die aktuelle Anzahl der Replikate (die Anzahl der Pods, die Sie bereits vor diesem Canary haben) mit dem Canary-Prozentsatz für die Phase multipliziert und das Ergebnis durch (100 minus den Prozentsatz) geteilt.
Wenn Sie beispielsweise bereits vier Pods haben und die Canary-Phase 50 % beträgt, ist die Anzahl der Canary-Pods 4. Das Ergebnis von 100-percentage
wird als Prozentsatz verwendet: 100-50=50
wird als .50
behandelt.
Die Pod-Überdimensionierung ist das Standardverhalten.
Pod-Bereitstellung mit deaktivierter Überdimensionierung
Sie können die Überprovisionierung (disablePodOverprovisioning: true
) deaktivieren, damit Cloud Deploy die Anzahl der Repliken nicht erhöht.
In der folgenden Formel wird gezeigt, wie Cloud Deploy die Pod-Bereitstellung für die Canary-Bereitstellung für jede Canary-Phase berechnet, wenn die Pod-Überprovisionierung deaktiviert ist:
math.Ceil( (ReplicaCountOfDeploymentOnCluster + ReplicaCountOfCanaryDeploymentOnCluster) * percentage)
In dieser Formel ist ReplicaCountOfCanaryDeploymentOnCluster
nur vorhanden, wenn es bereits eine Canary-Phase gab. Wenn dies die erste Canary-Phase ist, gibt es keine ReplicaCountOfCanaryDeploymentOnCluster
.
Wenn Sie mit 4 Pods beginnen, wird diese Zahl mit dem Prozentsatz der Canary-Version multipliziert (z. B. 50 % oder .5
), um 2
zu erhalten. Die ursprüngliche Bereitstellung wird also auf zwei herunterskaliert und zwei neue Pods werden für die Canary-Bereitstellung erstellt. Wenn Sie dann eine Canary-Phase mit 75% haben, haben Sie 2
(ursprüngliche Bereitstellung) +2
(erste Canary-Phase), *.75
, um 3
Canary-Pods und 1
Pod mit der ursprünglichen Bereitstellung zu erhalten.
Gateway GKE/Enterprise
So führt Cloud Deploy ein Canary-Deployment in GKE und GKE Enterprise mit der Gateway API aus:
Zusätzlich zu den Bereitstellungs- und Dienstreferenzen geben Sie eine HTTPRoute-Ressource mit einer
backendRefs
-Regel an, die auf den Dienst verweist.Cloud Deploy erstellt ein neues Deployment mit dem Namen des ursprünglichen Deployments und
-canary
sowie einen neuen Dienst mit dem ursprünglichen Dienstnamen und-canary
.Außerdem werden Secrets, ConfigMaps und horizontale Pod-Autoskalierungen kopiert und in
-canary
umbenannt.Für jede Canary-Phase ändert Cloud Deploy die HTTPRoute, um die Gewichtung zwischen den Pods des ursprünglichen Deployments und den Pods des Canary-Deployments basierend auf dem Prozentsatz für diese Phase zu aktualisieren.
Da es zu Verzögerungen bei der Weitergabe von Änderungen an
HTTPRoute
-Ressourcen kommen kann, können Sie die PropertyrouteUpdateWaitTime
in Ihre Konfiguration aufnehmen. Das System wartet dann eine bestimmte Zeit auf die Weitergabe.Während der
stable
-Phase wird die-canary
-Bereitstellung auf null skaliert und die ursprüngliche Bereitstellung wird aktualisiert, um die Bereitstellung der neuen Version zu verwenden.Außerdem wird die HTTPRoute jetzt auf die von Ihnen angegebene Originalversion zurückgesetzt.
Cloud Deploy ändert das ursprüngliche Deployment oder den ursprünglichen Dienst erst in der
stable
-Phase.
Cloud Run
So führt Cloud Deploy eine Canary-Bereitstellung für Cloud Run aus:
Geben Sie für eine Canary-Bereitstellung in Cloud Run in der YAML-Datei des Dienstes keinen
traffic
-Abschnitt an.Wenn Sie ein neues Canary-Roll-out erstellen, teilt Cloud Deploy den Traffic zwischen der vorherigen Version, die von Cloud Deploy erfolgreich bereitgestellt wurde, und einer neuen Version auf.
Wenn Sie die Unterschiede zwischen den Phasen einer Canary-Bereitstellung sehen möchten, können Sie sich die Änderungen im phasenweise gerenderten Manifest ansehen, das im Release-Inspektor verfügbar ist. Das ist sogar möglich, bevor das Roll-out begonnen hat. Wenn Sie die parallele Bereitstellung verwenden, können Sie auch das gerenderte Manifest jedes untergeordneten Elements prüfen.
Canary-Bereitstellung konfigurieren
In diesem Abschnitt wird beschrieben, wie Sie die Bereitstellungspipeline und die Ziele für eine Canary-Bereitstellung konfigurieren.
Die Anleitung hier enthält nur die für die Canary-Konfiguration spezifischen Schritte. Im Dokument Anwendung bereitstellen finden Sie allgemeine Anweisungen zum Konfigurieren und Ausführen Ihrer Bereitstellungspipeline.
Prüfen, ob Sie die erforderlichen Berechtigungen haben
Zusätzlich zu den anderen Berechtigungen für Identity and Access Management, die Sie für die Verwendung von Cloud Deploy benötigen, benötigen Sie die folgenden Berechtigungen, um zusätzliche Aktionen auszuführen, die für eine Canary-Bereitstellung erforderlich sein können:
clouddeploy.rollouts.advance
clouddeploy.rollouts.ignoreJob
clouddeploy.rollouts.cancel
clouddeploy.rollouts.retryJob
clouddeploy.jobRuns.get
clouddeploy.jobRuns.list
clouddeploy.jobRuns.terminate
Weitere Informationen dazu, welche Rollen diese Berechtigungen enthalten, finden Sie unter IAM-Rollen und -Berechtigungen.
skaffold.yaml
vorbereiten
Wie bei einer Standardbereitstellung benötigt Ihr Canary eine skaffold.yaml
-Datei, in der festgelegt wird, wie Manifeste und Dienstdefinitionen gerendert und bereitgestellt werden.
Für die skaffold.yaml
, die Sie für eine Canary-Bereitstellung erstellen, gelten keine besonderen Anforderungen, die über die für die Standardbereitstellung erforderlichen hinausgehen.
Manifest oder Dienstdefinition vorbereiten
Wie bei einer Standardbereitstellung benötigt Ihr Canary ein Kubernetes-Manifest oder eine Cloud Run-Dienstdefinition.
GKE und GKE Enterprise
Das Manifest für Canary-Versionen muss Folgendes enthalten:
Ein Deployment und ein Dienst.
Der Dienst muss einen Selektor definieren und dieser Selektor muss die Pods der angegebenen Bereitstellung auswählen. Der Standardwert ist
app
.Wenn Sie einen Gateway API-basierten Canary verwenden, muss das Manifest auch eine HTTPRoute enthalten.
Cloud Run
Für Canary-Versionen in Cloud Run reicht die normale Cloud Run-Dienstdefinition ohne traffic
-Strophe aus. Cloud Deploy verwaltet die Aufteilung des Traffics zwischen der letzten erfolgreichen Version und der neuen Version.
Automatischen Canary konfigurieren
Die folgende Anleitung gilt für Cloud Run- und GKE- sowie GKE Enterprise-Dienste, die als netzwerkbasierte Ziele verwendet werden. Wenn Sie die Kubernetes Gateway API mit GKE oder GKE Enterprise verwenden, lesen Sie diese Dokumentation.
Sie konfigurieren den automatischen Canary in der Definition der Bereitstellungspipeline:
GKE und GKE Enterprise
Fügen Sie in der Pipeline-Phase eine strategy
-Property hinzu:
serialPipeline:
stages:
- targetId: prod
profiles: []
strategy:
canary:
runtimeConfig:
kubernetes:
serviceNetworking:
service: "SERVICE_NAME"
deployment: "DEPLOYMENT_NAME"
podSelectorLabel: "LABEL"
canaryDeployment:
percentages: [PERCENTAGES]
verify: true|false
predeploy:
actions: "PREDEPLOY_ACTION"
postdeploy:
actions: "POSTDEPLOY_ACTION"
Bei dieser Konfiguration…
SERVICE_NAME ist der Name des Kubernetes-Dienstes, der in Ihrem Manifest definiert ist.
DEPLOYMENT_NAME ist der Name Ihres Kubernetes-Deployments, der in Ihrem Manifest definiert ist.
LABEL ist ein Pod-Selektor-Label. Sie muss mit der Labelauswahl im Kubernetes-Dienst übereinstimmen, der in Ihrem Manifest definiert ist. Dies ist optional. Der Standardwert ist
app
.PERCENTAGES ist eine durch Kommas getrennte Liste von Prozentwerten, die die Canary-Steigerung darstellen, z. B.
[5, 25, 50]
.100
ist hiervon ausgenommen, da im Canary-Release eine 100-prozentige Bereitstellung vorausgesetzt wird und von derstable
-Phase abgedeckt wird.Sie können die Bereitstellungsüberprüfung (
verify: true
) aktivieren. In diesem Fall wird in jeder Phase einverify
-Job aktiviert.PREDEPLOY_ACTION
Entspricht der ACTION_NAME, die Sie in Ihrer
skaffold.yaml
verwendet haben, um die benutzerdefinierte Aktion zu definieren, die vor der Bereitstellung ausgeführt werden soll.POSTDEPLOY_ACTION
Entspricht der ACTION_NAME, die Sie in Ihrem
skaffold.yaml
verwendet haben, um die benutzerdefinierte Aktion zu definieren, die nach der Bereitstellung ausgeführt werden soll.
Cloud Run
Fügen Sie in der Pipeline-Phase eine strategy
-Property hinzu:
serialPipeline:
stages:
- targetId: prod
profiles: []
strategy:
canary:
runtimeConfig:
cloudRun:
automaticTrafficControl: true
canaryDeployment:
percentages: [PERCENTAGES]
verify: true|false
predeploy:
actions: "PREDEPLOY_ACTION"
postdeploy:
actions: "POSTDEPLOY_ACTION"
Bei dieser Konfiguration…
PERCENTAGES ist eine durch Kommas getrennte Liste von Prozentwerten, die die Canary-Steigerung darstellen, z. B.
[25, 50, 75]
.100
ist hiervon ausgenommen, da im Canary-Release eine 100-prozentige Bereitstellung vorausgesetzt wird und von derstable
-Phase abgedeckt wird.Sie können die Bereitstellungsbestätigung (
verify: true
) aktivieren. In diesem Fall wird jeder Canary-Phase einverify
-Job hinzugefügt.PREDEPLOY_ACTION
Entspricht der ACTION_NAME, die Sie in Ihrer
skaffold.yaml
verwendet haben, um die benutzerdefinierte Aktion zu definieren, die vor der Bereitstellung ausgeführt werden soll.POSTDEPLOY_ACTION
Entspricht der ACTION_NAME, die Sie in Ihrem
skaffold.yaml
verwendet haben, um die benutzerdefinierte Aktion zu definieren, die nach der Bereitstellung ausgeführt werden soll.
Benutzerdefinierten Canary konfigurieren
Sie können Ihren Canary manuell konfigurieren, anstatt sich vollständig auf die Automatisierung von Cloud Deploy zu verlassen. Bei einer benutzerdefinierten Canary-Konfiguration geben Sie in der Definition der Bereitstellungspipeline Folgendes an:
Namen der Einführungsphasen
Bei einer vollständig automatisierten Canary-Version benennt Cloud Deploy die Phasen für Sie (z. B.
canary-25
,canary-75
,stable
). Bei einer benutzerdefinierten Canary-Version können Sie jeder Phase jedoch einen beliebigen Namen geben, solange er für alle Phasen dieser Canary-Phase eindeutig ist und die Einschränkungen für Ressourcennamen eingehalten werden. Der Name der letzten Phase (100%) muss jedochstable
sein.Prozentuale Ziele für jede Phase
Geben Sie die Prozentsätze für jede Phase separat an.
Skaffold-Profile, die für die Phase verwendet werden sollen
Sie können für jede Phase ein separates Skaffold-Profil oder dasselbe Profil oder eine beliebige Kombination verwenden. Für jedes Profil kann ein anderes Kubernetes-Manifest oder eine andere Cloud Run-Dienstdefinition verwendet werden. Sie können auch mehrere Profile für eine bestimmte Phase verwenden. Cloud Deploy kombiniert beides.
Gibt an, ob es für die Phase einen Überprüfungsjob gibt.
Wenn Sie die Bestätigung aktivieren, müssen Sie auch Ihre
skaffold.yaml
für die Bestätigung konfigurieren.Ob es für die Phase Jobs vor der Bereitstellung oder nach der Bereitstellung gibt
Wenn Sie Jobs vor oder nach der Bereitstellung aktivieren, müssen Sie Ihre
skaffold.yaml
für diese Jobs konfigurieren.
Für benutzerdefinierte Canary-Versionen werden alle Zieltypen unterstützt.
Benutzerdefinierte Canary-Konfigurationselemente
Die folgende YAML-Datei zeigt die Konfiguration für die Phasen einer vollständig benutzerdefinierten Canary-Bereitstellung:
strategy:
canary:
# Custom configuration for each canary phase
customCanaryDeployment:
phaseConfigs:
- phaseId: "PHASE1_NAME"
percentage: PERCENTAGE1
profiles: [ "PROFILE_NAME" ]
verify: true | false
predeploy:
actions: "PREDEPLOY_ACTION"
postdeploy:
actions: "POSTDEPLOY_ACTION"
- …
- phaseId: "stable"
percentage: 100
profiles: [ "LAST_PROFILE_NAME" ]
verify: true|false
predeploy:
actions: "PREDEPLOY_ACTION"
postdeploy:
actions: "POSTDEPLOY_ACTION"
In diesem YAML-File
PHASE1_NAME
Ist der Name der Phase. Die Namen der Phasen müssen eindeutig sein.
[ "PROFILE_NAME" ]
Der Name des Profils, das für die Phase verwendet werden soll. Sie können für jede Phase dasselbe Profil verwenden, für jede Phase ein anderes oder eine beliebige Kombination. Sie können auch mehrere Profile angeben. Cloud Deploy verwendet alle von Ihnen angegebenen Profile sowie das Profil oder Manifest, das für die gesamte Phase verwendet wird.
stable
Die letzte Phase muss
stable
heißen.PERCENTAGE1
Der Prozentsatz, der für die erste Phase bereitgestellt werden soll. Jede Phase muss einen eindeutigen Prozentsatz haben. Dieser Wert muss ein ganzer Prozentsatz sein (z. B. nicht
10.5
). Die Phasen müssen in aufsteigender Reihenfolge angegeben werden.verify: true|false
Gibt an, ob Cloud Deploy einen Überprüfungsjob für die Phase einschließen soll. Für jede Phase, in der „verify“ verwendet wird, verwendet Skaffold dasselbe Profil für „verify“, das für die Rendering- und Bereitstellungsschritte dieser Phase angegeben ist.
PREDEPLOY_ACTION
Entspricht der ACTION_NAME, die Sie in Ihrer
skaffold.yaml
verwendet haben, um die benutzerdefinierte Aktion zu definieren, die vor der Bereitstellung ausgeführt werden soll.POSTDEPLOY_ACTION
Entspricht der ACTION_NAME, die Sie in Ihrem
skaffold.yaml
verwendet haben, um die benutzerdefinierte Aktion zu definieren, die nach der Bereitstellung ausgeführt werden soll.
Der Prozentsatz für die letzte Phase muss 100
betragen. Die Phasen werden in der Reihenfolge ausgeführt, in der du sie in diesem customCanaryDeployment
-Satz konfigurierst. Wenn die Prozentwerte jedoch nicht in aufsteigender Reihenfolge sind, schlägt der Befehl zum Registrieren der Bereitstellungspipeline mit einer Fehlermeldung fehl.
Die Konfiguration für einen benutzerdefinierten Canary enthält keine runtimeConfig
-Strophe. Wenn Sie runtimeConfig
angeben, wird es als benutzerdefinierter automatischer Canary betrachtet.
Benutzerdefinierte automatisierte Canary-Version konfigurieren
Ein benutzerdefinierter, automatisierter Canary ähnelt einem benutzerdefinierten Canary, da Sie die einzelnen Canary-Phasen mit benutzerdefinierten Phasennamen, Prozentwerten, Skaffold-Profilen, Überprüfungsjobs sowie Pre-Deploy- und Post-Deploy-Jobs angeben. Bei einem benutzerdefinierten Canary müssen Sie jedoch keine Konfigurationen angeben, die die Traffic-Aufteilung definieren. Das übernimmt Cloud Deploy für Sie. Sie müssen jedoch die Skaffold-Profile angeben, die für jede Phase verwendet werden sollen.
Wenn Sie einen benutzerdefinierten, automatisierten Canary konfigurieren möchten, fügen Sie einen runtimeConfig
-Abschnitt wie hier und einen customCanaryDeployment
-Abschnitt wie hier ein.
Canary-Deployment mit dem Service Mesh der Kubernetes Gateway API konfigurieren
Sie können zwar eine Cloud Deploy-Kanarienbereitstellung verwenden, um Ihre Anwendung in einem dienstbasierten Kubernetes-Netzwerk bereitzustellen, aber es gibt auch die Möglichkeit, das Kubernetes-Service-Mesh der Gateway API zu verwenden. In diesem Abschnitt wird beschrieben, wie Sie das tun.
Sie können die Gateway API mit Istio oder einer beliebigen unterstützten Implementierung verwenden.
Richten Sie Ihre Gateway API-Ressourcen ein:
Hierbei handelt es sich lediglich um Beispiele.
Fügen Sie Ihrem Kubernetes-Manifest, das Sie beim Erstellen des Release an Cloud Deploy gesendet haben, Folgendes hinzu:
Eine
HTTPRoute
, die auf Ihre Gateway-Ressource verweistEine Bereitstellung
Ein Dienst
Konfigurieren Sie die Bereitstellungspipeline und das Ziel, für das Sie einen Canary-Release bereitstellen möchten:
Die Konfiguration für das Ziel ist mit der für jedes andere Ziel identisch.
Die Bereitstellungspipelinekonfiguration enthält in der Fortschrittssequenz für das jeweilige Ziel einen
gatewayServiceMesh
-Abschnitt, der auf dieHTTPRoute
-Konfiguration der Kubernetes Gateway API sowie auf die Bereitstellung und den Dienst verweist.strategy: canary: runtimeConfig: kubernetes: gatewayServiceMesh: httpRoute: "ROUTE" service: "SERVICE" deployment: "DEPLOYMENT" routeUpdateWaitTime: "WAIT_TIME" podSelectorLabel: "LABEL" canaryDeployment: percentages: - 50
Wobei:
ROUTE ist die httpRoute-Konfiguration, die das gewünschte Routingverhalten definiert.
SERVICE ist Ihre Dienstkonfiguration, die Cloud Deploy für Canary-Bereitstellungen in GKE und GKE Enterprise benötigt.
DEPLOYMENT ist Ihre Bereitstellungskonfiguration, die Cloud Deploy für Canary-Bereitstellungen in GKE und GKE Enterprise benötigt.
WAIT_TIME ist die Zeitspanne, in der Cloud Deploy wartet, bis die Änderungen an der
HTTPRoute
-Ressource übernommen wurden, um abgelehnte Anfragen zu vermeiden. Beispiel:routeUpdateWaitTime: 60s
.Wenn Sie die Canary-Version mit der Gateway API ohne Istio ausführen und die Gateway API mit einem Google Cloud-Load Balancer verbunden ist, kann beim Skalieren der Canary-Instanz ein kleiner Teil des Traffics verloren gehen. Sie können diese Einstellung konfigurieren, wenn Sie dieses Verhalten beobachten.
LABEL ist ein Pod-Selektor-Label. Sie muss mit der Labelauswahl im Kubernetes-Dienst und der Bereitstellung übereinstimmen, die in Ihrem Manifest definiert sind. Dies ist optional. Der Standardwert ist
app
.
Parallele Bereitstellung mit einer Canary-Bereitstellungsstrategie verwenden
Sie können eine Canary-Bereitstellung mithilfe einer parallelen Bereitstellung ausführen. Das bedeutet, dass das Ziel, auf das Sie nach und nach umstellen, aus zwei oder mehr untergeordneten Zielen bestehen kann. Sie können beispielsweise gleichzeitig in Clustern in verschiedenen Regionen nach und nach einrichten.
Wie unterscheidet sich ein paralleler Canary von einem Canary mit einzelnem Ziel
Wie bei der Canary-Bereitstellung mit nur einem Ziel benötigen Sie bei der Bereitstellung auf GKE-Ziele eine Kubernetes-Bereitstellungskonfiguration und eine Kubernetes-Dienstkonfiguration in Ihrem Manifest.
Wie bei der Canary-Bereitstellung mit nur einem Ziel muss die Konfiguration der Bereitstellungspipeline in der Phasendefinition für die entsprechende Phase einen
strategy.canary
-Abschnitt enthalten.Außerdem müssen Sie ein Multi-Ziel konfigurieren und die untergeordneten Ziele konfigurieren, auf die dieses Multi-Ziel verweist.
Wenn Sie einen Release erstellen, werden ein Controller-Roll-out und die untergeordneten Roll-outs erstellt.
Sowohl für die Kontrollgruppe als auch für die untergeordnete Gruppe gibt es separate Phasen für alle konfigurierten Canary-Prozentsätze und eine
stable
-Phase für den Canary mit 100%.Sie können ein untergeordnetes Roll-out nicht fortsetzen.
Sie können nur Controller-Roll-outs fortsetzen. Wenn Sie das Controller-Roll-out in die nächste Phase verschieben, werden die untergeordneten Roll-outs von Cloud Deploy ebenfalls fortgesetzt.
Fehlgeschlagene Jobs im Controller-Roll-out können nicht wiederholt werden.
Sie können einen Job nur in untergeordneten Roll-outs noch einmal versuchen.
Fehlgeschlagene Jobs im Controller-Roll-out können nicht ignoriert werden.
Sie können fehlgeschlagene Jobs nur in untergeordneten Roll-outs ignorieren.
Sie können ein Controller-Roll-out abbrechen, aber keine untergeordneten Roll-outs.
Sie können Jobausführungen nur bei einem untergeordneten Roll-out beenden, nicht bei einem Controller-Roll-out.
Was tun, wenn ein paralleles Roll-out in Canary fehlschlägt
Wenn ein untergeordnetes Roll-out fehlschlägt, kann das Controller-Roll-out in einen anderen Status übergehen, je nachdem, was mit den untergeordneten Roll-outs passiert:
Wenn ein oder mehrere untergeordnete Roll-outs fehlschlagen, aber mindestens ein untergeordnetes Roll-out weiterhin
IN_PROGRESS
ist, bleibt das Controller-Roll-outIN_PROGRESS
.Wenn ein oder mehrere untergeordnete Roll-outs fehlschlagen, aber mindestens ein untergeordnetes Roll-out erfolgreich ist, ist der Status des Controller-Roll-outs
HALTED
, wenn nach der aktuellen Phase weitere Phasen folgen.Wenn dies die Phase
stable
ist, ist das Controller-Roll-outFAILED
.Mit
HALTED
können Sie fehlgeschlagene Jobs im fehlgeschlagenen untergeordneten Roll-out entweder ignorieren oder erneut ausführen. Sie können auch das Controller-Roll-out abbrechen und weitere Aktionen für die untergeordneten Roll-outs verhindern.Wenn das Controller-Roll-out aufgrund eines fehlgeschlagenen untergeordneten Roll-outs den Status
HALTED
hat und Sie den fehlgeschlagenen Job im untergeordneten Roll-out ignorieren, kehrt das Controller-Roll-out zum StatusIN_PROGRESS
zurück.
HTTPRoute in einem anderen Cluster bereitstellen
Wenn Sie einen Canary mit der Gateway API-Service Mesh-Konfiguration haben, können Sie einen alternativen Cluster angeben, in dem die HTTPRoute bereitgestellt werden soll.
Dazu verwenden Sie in der Konfiguration Ihrer Canary-Strategie einen routeDestinations
-Abschnitt, um den Zielcluster oder die Zielcluster für die HTTPRoute anzugeben, und eine boolesche Einstellung, um den Dienst an denselben Cluster zu übertragen, der kein Zielcluster ist. Sie erstellen außerdem einen associatedEntities
-Abschnitt in Ihrer Zielkonfiguration, um die Cluster zu identifizieren.
Konfigurieren Sie
associatedEntities
für Ihr Ziel.Jede Entität ist ein Cluster, in dem Cloud Deploy die HTTP-Route und optional den Kubernetes-Dienst bereitstellt. Fügen Sie in Ihrer Zieldefinition einen
associatedEntities
-Abschnitt ein:associatedEntities: [KEY]: gkeClusters: - cluster: [PATH] internalIp: [true|false] proxyUrl:
Wobei:
KEY
ist ein beliebiger Name für diese Gruppe verknüpfter Entitäten. Mit diesem Namen wird in der Canary-Konfiguration auf die Entitäten aus derrouteDestinations
verwiesen.PATH
ist der Ressourcenpfad, der den GKE-Cluster angibt, in dem Ihre HTTPRoute (und optional der Dienst) bereitgestellt wird.Mit
internalIp
wird angegeben, ob die interne IP-Adresse (private IP-Adresse) verwendet werden soll, wenn für den Cluster sowohl eine interne als auch eine öffentliche IP-Adresse konfiguriert ist. Der Standardwert istfalse
.
Sie können eine beliebige Anzahl von Clustern mit oder ohne
internalIp
angeben.Konfigurieren Sie
routeDestinations
in Ihrer Canary-Konfiguration.Jedes Routenziel verweist auf einen
associatedEntities
-Abschnitt und gibt an, ob der Dienst auch im alternativen Cluster bereitgestellt werden soll. Fügen Sie in der Canary-Konfiguration in dergatewayServiceMesh
-Stanza Folgendes hinzu:routeDestinations: destinationIds: ["KEY"] propagateService: [true|false]
Wobei:
KEY
ist der Name, den Sie inassociatedEntities
im Ziel konfiguriert haben. Verwenden Sie diesen Namen, um in Ihrer Canary-Konfiguration auf die Entitäten aus demrouteDestinations
zu verweisen.Sie können auch den Wert
@self
angeben, um die HTTPRoute zusätzlich zum zugehörigen Ziel im Zielcluster bereitzustellen.Mit
propagateService
wird angegeben, ob der Dienst zusätzlich zur HTTPRoute im zugehörigen Cluster bereitgestellt werden soll. Der Standardwert istfalse
.
Konfigurierten Canary ausführen
So führen Sie das Canary-Deployment aus:
Registrieren Sie die konfigurierte Bereitstellungspipeline und die Ziele.
gcloud deploy apply --file=PIPELINE
Die Bereitstellungspipeline enthält die automatische oder benutzerdefinierte Canary-Konfiguration für die ausgewählte Laufzeit.
Bei diesem Befehl wird davon ausgegangen, dass Ihre Ziele in derselben Datei definiert sind oder anderweitig bereits registriert wurden. Falls nicht, müssen Sie Ihre Ziele auch registrieren.
So erstellst du einen Release:
gcloud deploy releases create RELEASE_NAME \ --delivery-pipeline=PIPELINE_NAME \ --region=REGION
Die mit
PIPELINE_NAME
angegebene Bereitstellungspipeline enthält die in diesem Dokument beschriebene automatische oder benutzerdefinierte Canary-Konfiguration.Canary-Version aktualisieren:
gcloud-CLI
gcloud deploy rollouts advance ROLLOUT_NAME \ --release=RELEASE_NAME \ --delivery-pipeline=PIPELINE_NAME \ --region=REGION
Wobei:
ROLLOUT_NAME
ist der Name der aktuellen Einführung, die Sie in die nächste Phase übergehen.RELEASE_NAME
ist der Name des Releases, zu dem dieses Roll-out gehört.PIPELINE_NAME
ist der Name der Lieferpipeline, die Sie zum Verwalten der Bereitstellung dieses Release verwenden.REGION
ist der Name der Region, in der die Version erstellt wurde, z. B.us-central1
. Das ist ein Pflichtfeld.Weitere Informationen zum Befehl
gcloud deploy rollouts advance
finden Sie in der Google Cloud SDK-Referenz.Google Cloud Console
Klicken Sie auf Ihre Pipeline, die in der Liste der Lieferpipelines angezeigt wird.
Die Seite mit den Details der Lieferpipeline zeigt eine grafische Darstellung des Fortschritts der Lieferpipeline.
Klicken Sie auf dem Tab Roll-outs unter Details zur Bereitstellungspipeline auf den Namen Ihres Roll-outs.
Die Seite mit den Details zum Roll-out wird angezeigt.
In diesem Beispiel hat das Roll-out eine
canary-50
-Phase und einestable
-Phase. Ihr Roll-out kann mehr oder andere Phasen haben.Klicken Sie auf Roll-out fortsetzen.
Das Roll-out wird in die nächste Phase fortgesetzt.
Übersprungene Phasen
Wenn Sie einen Canary-Release bereitstellen und Ihre Anwendung noch nicht für diese Laufzeit bereitgestellt wurde, überspringt Cloud Deploy die Canary-Phase und führt die stabile Phase aus. Weitere Informationen finden Sie unter Phasen beim ersten Mal überspringen.