Canary-Analyse in Google Kubernetes Engine mit Spinnaker automatisieren

In dieser Anleitung wird beschrieben, wie Sie das automatisierte Canary-Analyse-Feature von Spinnaker in Google Kubernetes Engine (GKE) konfigurieren.

Einführung

Spinnaker ist ein von Netflix und Google angebotenes System für Continuous Delivery im Open-Source-Format. Es bietet Ihnen die Möglichkeit, Anwendungsbereitstellungen auf unterschiedlichen Computing-Plattformen wie App Engine, GKE, Compute Engine, AWS und Azure zu verwalten. Sie können mit Spinnaker moderne Bereitstellungsmethoden wie etwa Canary-Bereitstellungen implementieren.

Bei einer Canary-Bereitstellung geben Sie eine neue Version Ihrer Anwendung für einen kleinen Teil Ihres Produktionstraffics frei, um ihr Verhalten zu analysieren, bevor Sie die Version vollständig bereitstellen. Sie mindern dadurch die Risiken des Deployments einer neuen Version für alle Ihre Nutzer. Wenn Sie Canary-Deployments verwenden möchten, müssen Sie das Verhalten der alten und der neuen Version Ihrer Anwendung genau vergleichen. Die Unterschiede können geringfügig sein, daher kann ihre Identifizierung einige Zeit in Anspruch nehmen. Möglicherweise müssen auch zahlreiche unterschiedliche Messwerte geprüft werden. Weitere Informationen zum Canary-Muster finden Sie unter Strategien für das Deployment und das Testen von Anwendungen.

Spinnaker bietet zu diesem Zweck ein automatisiertes Canary-Analyse-Feature. Damit werden die Messwerte beider Versionen aus Ihrem Monitoringsystem gelesen. Anschließend erfolgt ein automatischer Vergleich anhand einer statistischen Analyse. In dieser Anleitung wird beschrieben, wie Sie eine automatisierte Canary-Analyse für eine in GKE bereitgestellte und mit Cloud Monitoring überwachte Anwendung machen.

Spinnaker ist eine moderne Plattform zum Deployment und zur Verwaltung von Anwendungen. Sie eignet sich auch für komplexe Bereitstellungsszenarios von Organisationen, in denen spezielle Engineering-Funktionen freigegeben werden. Sie können die Anleitung auch ausführen, wenn Sie noch nicht mit Spinnaker vertraut sind. Die Implementierung automatisierter Canary-Analysen in der Produktion erfolgt meist jedoch durch Teams mit Spinnaker-Erfahrung, die ein starkes Monitoringsystem haben und wissen, wann ein Release sicher ist.

Informationen zu dieser Anleitung

In dieser Anleitung wird eine einfache "Hello World"-Anwendung verwendet, deren Fehlerrate mit einer Umgebungsvariable konfiguriert wurde. Für die Anwendung steht ein vordefiniertes Docker-Image zur Verfügung. Wie in der folgenden Abbildung veranschaulicht stellt die Anwendung Messwerte im Prometheus-Format bereit. Dies ist ein in der Kubernetes-Community beliebtes und mit Cloud Monitoring kompatibles Open-Source-System für das Monitoring.

Architektur der Anwendung

Ziele

  • Spinnaker für Google Cloud installieren
  • In GKE eine Anwendung ohne Canary-Deployment zur Verfügung stellen
  • Canary-Bereitstellung der Anwendung konfigurieren und ausführen
  • Automatisierte Canary-Analyse konfigurieren
  • Automatisierte Canary-Analyse testen

Kosten

Vorbereitung

  1. Wählen Sie ein Google Cloud-Projekt aus oder erstellen Sie eines.

    Zur Seite „Ressourcen verwalten“

  2. Aktivieren Sie die Abrechnung für Ihr Projekt.

    Abrechnung aktivieren

Nach Abschluss dieser Anleitung können Sie weitere Kosten durch Löschen von erstellten Ressourcen vermeiden. Weitere Informationen finden Sie im Abschnitt Bereinigen.

Spinnaker für Google Cloud mit Cloud Shell bereitstellen

In diesem Abschnitt konfigurieren Sie die für diese Anleitung erforderliche Infrastruktur. Dazu führen Sie alle Terminalbefehle in dieser Anleitung über Cloud Shell aus.

Mit Spinnaker für Google Cloud können Sie Spinnaker in einer produktionsfertigen Konfiguration einrichten und verwalten, die für Google Cloud optimiert ist. Spinnaker für Google Cloud richtet viele Ressourcen (GKE, Memorystore, Cloud Storage-Buckets und Dienstkonten) ein, die für die Ausführung von Spinnaker in Google Cloud erforderlich sind. Außerdem bindet es Spinnaker in verwandte Dienste wie Cloud Build ein und bietet eine Cloud Shell-basierte Verwaltungsumgebung für Spinnaker-Installationen mit Hilfsprogrammen und allgemeinen Tools wie spin und hal.

  1. Öffnen Sie in Cloud Shell Spinnaker für Google Cloud. Dadurch wird das Spinnaker für Google Cloud-Repository in Ihre Cloud Shell-Umgebung geklont und die detaillierte Installationsanleitung gestartet.

    Zu Cloud Shell

  2. Installieren Sie Spinnaker für Google Cloud:

    PROJECT_ID=${DEVSHELL_PROJECT_ID} ~/cloudshell_open/spinnaker-for-gcp/scripts/install/setup_properties.sh
    ~/cloudshell_open/spinnaker-for-gcp/scripts/install/setup.sh
    
  3. Installieren Sie das Plug-in für die Einbindung von Monitoring-Prometheus:

    export KUBE_NAMESPACE=prometheus
    export GCP_PROJECT=$DEVSHELL_PROJECT_ID
    export DATA_DIR=/prometheus/
    export DATA_VOLUME=prometheus-storage-volume
    export SIDECAR_IMAGE_TAG=0.7.0
    export GCP_REGION=us-east1-c
    export KUBE_CLUSTER=spinnaker-1
    
    kubectl create namespace ${KUBE_NAMESPACE}
    kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/prometheus-stackdriver-gke/master/prometheus-service-account.yaml
    kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/prometheus-stackdriver-gke/master/prometheus-configmap.yaml
    curl -sS https://raw.githubusercontent.com/GoogleCloudPlatform/prometheus-stackdriver-gke/master/gke-prometheus-deployment.yaml | \
      envsubst | \
      kubectl apply -f -
    
  4. Starten Sie Cloud Shell neu, um neue Umgebungseinstellungen zu laden.

    Menüoption zum Neustart von Cloud Shell.

  5. Stellen Sie eine Verbindung zu Spinnaker her:

    ~/cloudshell_open/spinnaker-for-gcp/scripts/manage/connect_unsecured.sh
    
  6. Wählen Sie in Cloud Shell das Symbol Webvorschau und dann Vorschau auf Port 8080 aus.

    Cloud Shell-Neustartoption im Menü

Anwendung mit Spinnaker bereitstellen

In diesem Abschnitt konfigurieren Sie Spinnaker für die Bereitstellung einer Anwendung im GKE-Cluster.

Spinnaker-Anwendung erstellen

Erstellen Sie vor der Bereitstellung die Spinnaker-Anwendung.

  1. Wählen Sie in Spinnaker Aktionen und dann Anwendung erstellen aus.

    Drop-down-Menü für Anwendung erstellen

  2. Geben Sie im Dialogfeld Neue Anwendung folgende Werte ein:

    • Name: sampleapp
    • E-Mail-Adresse des Inhabers: [example@example.com]

  3. Wählen Sie Erstellen.

Sie befinden sich jetzt in der Spinnaker-Anwendung "sampleapp". Da sie noch nicht konfiguriert ist, sind die meisten Tabs leer.

Deployment-Pipeline erstellen und ausführen

In diesem Abschnitt stellen Sie die Anwendung zuerst mit einer einfachen Spinnaker-Pipeline bereit, die mithilfe eines successRate-Parameters ein GKE-Deployment mit vier Pods erstellt. Diese Pods geben nach dem Zufallsprinzip Fehler mit einer Rate aus, die dem Parameter successRate entspricht. In dieser Anleitung werden 500 Fehler mit einer Rate von 100 - successRate ausgegeben.

  1. Erstellen Sie in Cloud Shell die Pipeline mit der bereitgestellten JSON-Datei. Mit dem folgenden Befehl wird die JSON-Definition der Pipeline direkt an die Spinnaker-API gesendet.

    cd ~
    wget https://raw.githubusercontent.com/spinnaker/spinnaker/master/solutions/kayenta/pipelines/simple-deploy.json
    sed "s/my-kubernetes-account/spinnaker-install-account/g" simple-deploy.json > updated-simple-deploy.json
    spin pipeline save --file updated-simple-deploy.json
    
  2. Im Bereich "Pipelines" von Spinnaker wird eine Pipeline mit dem Namen Simple deploy angezeigt. Falls sie nicht aufgelistet ist, laden Sie die Seite neu. Wählen Sie Manuelle Ausführung starten aus.

    Manuelle Ausführung der Pipeline "Simple Deploy" starten

  3. Wählen Sie im Fenster Ausführung bestätigen die Erfolgsquote 70 aus und klicken Sie dann auf Ausführen. Die Anwendungskonfiguration und die vier Pods werden nach wenigen Sekunden von der Pipeline bereitgestellt.

  4. Erstellen Sie in Cloud Shell einen Pod, der bis zum Ende der Anleitungen Anfragen an die neue Anwendung stellt.

    kubectl -n default run injector --generator=run-pod/v1 --image=alpine:3.10 -- \
        /bin/sh -c "apk add --no-cache curl; \
        while true; do curl -sS --max-time 3 \
        http://sampleapp:8080/; done"
    

Injektor-Logs prüfen

  1. Das Verhalten der Anwendung können Sie in den Injektor-Logs prüfen.

    kubectl -n default logs -f \
        $(kubectl -n default get pods -l run=injector \
        -o=jsonpath='{.items[0].metadata.name}')
    
  2. In den Logs werden zahlreiche interne Serverfehler angezeigt. Wenn Sie den Injektor-Logs nicht weiter folgen möchten, drücken Sie Strg+C.

Anwendungsstatus prüfen

Nachdem die Anwendung nun bereitgestellt wurde und Traffic ausgibt, prüfen Sie, ob sie sich ordnungsgemäß verhält. Da Sie die Anwendung für diese Anleitung mit einer Erfolgsquote von nur 70 % bereitgestellt haben, wissen Sie bereits, dass dies nicht der Fall ist.

Die Anwendung stellt einen /metrics-Endpunkt mit Messwerten im Prometheus-Format bereit, die von Monitoring aufgenommen werden. In diesem Bereich visualisieren Sie diese Messwerte in Monitoring.

  1. Wechseln Sie in der Google Cloud Console zu Monitoring:

    Zu Monitoring

  2. Wenn der Metrics Explorer im Navigationsbereich angezeigt wird, wählen Sie Metrics Explorer aus. Wählen Sie andernfalls Ressourcen und dann Metrics Explorer aus.

  3. Wählen Sie den Tab Messwert aus.

  4. Klicken Sie auf das Kästchen Find resource type and metric und geben Sie external.googleapis.com/prometheus/requests ein.

  5. Geben Sie zum Verfeinern der Grafik im Feld Gruppieren nach den Wert http_code ein.

    In der folgenden Grafik sind die Raten der von der Anwendung beantworteten HTTP-Anfragen nach HTTP-Statuscode gruppiert:

    Grafik der von der Anwendung beantworteten HTTP-Anfragen

    Wenn in Monitoring keine Daten vorhanden sind oder Sie den Messwert external.googleapis.com/prometheus/requests nicht finden können, warten Sie einige Minuten, bis die Daten von Monitoring aufgenommen wurden, bevor Sie den Metrics Explorer neu laden.

    Laut Grafik weist die Anwendung derzeit erwartungsgemäß eine inakzeptable Fehlerrate von rund 30 % auf. Im weiteren Verlauf dieser Anleitung richten Sie eine Canary-Deployment-Pipeline und eine automatische Analyse ein, um Anwendungs-Deployments mit einer derart hohen Fehlerrate zukünftig zu vermeiden.

Canary-Deployment erstellen

In diesem Abschnitt erstellen Sie eine Canary-Deployment-Pipeline ohne automatisierte Analyse. Damit testen Sie die neue Version der Anwendung, bevor Sie sie vollständig für die Produktion bereitstellen. Der Einfachheit halber nutzt die Pipeline, die Sie in diesem Abschnitt erstellen, das Kubernetes Load-Balancing, um Traffic an die Canary-Version zu senden. Daher können Sie nicht auswählen, welcher Teil des Traffics an die Canary-Version weitergeleitet wird. Zum Implementieren erweiterter Traffic-Routingrichtlinien können Sie Istio verwenden.

Die folgende Abbildung zeigt verschiedene Phasen der Pipeline:

Darstellung der Phasen einer Canary-Deployment-Pipeline

  • Schritt 0: Ebenso wie für die Pipeline Simple Deploy wird auch hier ein Parameter für die Erfolgsquote verwendet. In der neuen Pipeline werden mit dem Parameter unterschiedliche Erfolgsquoten simuliert. Dies ist die Konfiguration der Pipeline.

  • Schritt 1: In der Phase Find Baseline Version (Referenzversion suchen) wird aus der Pipeline Simple Deploy die letzte Ausführung der aktuell in der Produktion verwendeten Anwendungsversion abgerufen. In dieser Anleitung wird die Erfolgsquote der aktuell bereitgestellten Anwendung abgerufen.

    Parallel zur Phase Find Baseline Version (Referenzversion suchen) wird in der Phase Deploy Canary Config (Canary-Konfiguration bereitstellen) die Konfiguration mit der neuen Erfolgsquote für die Canary-Version der Anwendung bereitgestellt.

  • Schritt 2: In den Phasen Deploy Canary (Canary-Version bereitstellen) und Deploy Baseline (Referenzversion bereitstellen) werden die beiden Versionen zum Vergleich bereitgestellt. Die Canary-Version verwendet die in der Phase Deploy Canary Config (Canary-Konfiguration bereitstellen) erstellte Konfiguration. Für die Referenzversion wird die Konfiguration der Produktionsversion verwendet.

  • Schritt 3: In der Phase Manual Judgment (Manuelle Beurteilung) wird die Pipeline angehalten, bis Sie fortfahren. Während dieser Phase können Sie überprüfen, ob sich die Canary-Version ordnungsgemäß verhält.

  • Schritt 4: Nachdem Sie die Phase Manual Judgment (Manuelle Beurteilung) abgeschlossen haben, wird sowohl Delete Canary (Canary-Version löschen) als auch Delete Baseline (Referenzversion löschen). die Infrastruktur bereinigen.

    Parallel zur Bereinigung wird die Phase Deploy in Production (In Produktion bereitstellen) gestartet. Die Pipeline Simple Deploy wird dabei mit dem ursprünglich von Ihnen angegebenen Parameter für die Erfolgsquote ausgelöst. Die im Canary-Deployment getestete Version der Anwendung wird jetzt in der Produktion bereitgestellt.

    Die Phase Deploy to Production (In Produktion bereitstellen) wird nur ausgelöst, wenn Sie in der Phase Manual Judgment (Manuelle Beurteilung) auf Continue (Weiter) klicken.

  • Schritt 5: In der abschließenden Phase Successful Deployment (Erfolgreiche Bereitstellung) wird der Erfolg der gesamten Pipeline validiert. Dabei wird geprüft, ob Sie in der Phase Manual Judgment (Manuelle Beurteilung) Ihre Freigabe erteilt haben. Die Ausführung erfolgt nur, wenn die unter Deploy to Production (In Produktion bereitstellen) Delete Canary (Canary löschen) und Delete Baseline (Referenzversion löschen) erfolgreich ausgeführt wurden.

Jetzt können Sie die Pipeline Canary Deploy erstellen und ausführen.

  1. Rufen Sie zum Erstellen der Pipeline Canary Deploy mit folgendem Befehl die ID der Pipeline Simple Deploy ab. Fügen Sie die ID anschließend in die Pipeline Canary Deploy ein:

    cd ~
    wget https://raw.githubusercontent.com/spinnaker/spinnaker/master/solutions/kayenta/pipelines/canary-deploy.json
    export PIPELINE_ID=$(spin pipeline get -a sampleapp -n 'Simple deploy' | jq -r '.id')
    jq '(.stages[] | select(.refId == "9") | .pipeline) |= env.PIPELINE_ID | (.stages[] | select(.refId == "8") | .pipeline) |= env.PIPELINE_ID' canary-deploy.json | \
        sed "s/my-kubernetes-account/spinnaker-install-account/g" > updated-canary-deploy.json
        spin pipeline save --file updated-canary-deploy.json
    
  2. Wenn Sie die Pipeline Canary Deploy in Spinnaker nicht sehen, laden Sie die Seite sampleapp neu und wählen Sie Pipelines aus.

  3. So starten Sie die Pipeline Canary Deploy:

    1. Wählen Sie Manuelle Ausführung starten aus.
    2. Wählen Sie für Erfolgsquote den Wert 80 aus.
    3. Wählen Sie Ausführen aus.
  4. Wenn die Pipeline die Phase Manual Judgment (Manuelle Beurteilung) erreicht, wählen Sie noch nicht Weiter aus, da Sie die Canary-Version mit der Basisversion vergleichen müssen.

    Manuelle Beurteilungsphase der Canary-Pipeline.

  5. Führen Sie in Cloud Shell den Befehl kubectl -n default get pods aus, um die neuen Pods canary und baseline anzeigen zu lassen:

    NAME                                READY STATUS  RESTARTS  AGE
    injector-66bd655ffd-9ntwx           1/1   Running 0         30m
    sampleapp-5cdf8f55dd-995rz          1/1   Running 0         28m
    sampleapp-5cdf8f55dd-dqq8n          1/1   Running 0         28m
    sampleapp-5cdf8f55dd-ntq57          1/1   Running 0         28m
    sampleapp-5cdf8f55dd-rlpzp          1/1   Running 0         28m
    sampleapp-baseline-567b8d6849-gsgqr 1/1   Running 0          4m
    sampleapp-canary-54b9759dd6-gmjhc   1/1   Running 0          4m
    
  6. Wechseln Sie in der Google Cloud Console zu Monitoring:

    Zu Monitoring

  7. Wenn der Metrics Explorer im Navigationsbereich angezeigt wird, wählen Sie Metrics Explorer aus. Wählen Sie andernfalls Ressourcen und dann Metrics Explorer aus.

  8. Wählen Sie den Tab Messwert aus.

  9. Geben Sie die folgenden Parameter an, um die Fehlerquote für die Baseline- und die Canary-Version anzuzeigen:

    1. Messwert: external.googleapis.com/prometheus/requests
    2. Filter:
      1. http_code gleicht 500.
      2. version verschieden (!=) von prod

    Wenn in Monitoring Daten fehlen, warten Sie einige Minuten, bis sie angezeigt werden.

  10. Vergleichen Sie die Canary-Version (im folgenden Diagramm violett) mit der Referenzversion (im folgenden Diagramm blau). Die Farben in Ihrer Grafik können abweichen. Die Canary-Version in dieser Anleitung hat eine niedrigere Fehlerrate als die Referenzversion. Daher kann die Canary-Version ruhigen Gewissens in der Produktion bereitgestellt werden. Wäre die Fehlerrate der Canary-Version höher, sollte das Deployment an diesem Punkt gestoppt und die Anwendung überarbeitet werden.

    Diagramm mit den Fehlerraten der Canary-Version und der Referenzversion im Vergleich

  11. Wählen Sie in Spinnaker im Dialogfeld Manuelle Beurteilung die Option Weiter aus.

  12. Wenn das Deployment abgeschlossen ist, kehren Sie zu Monitoring zurück.

    Zu Monitoring

  13. Wenn der Metrics Explorer im Navigationsbereich angezeigt wird, wählen Sie Metrics Explorer aus. Wählen Sie andernfalls Ressourcen und dann Metrics Explorer aus.

  14. Wählen Sie den Tab Messwert aus.

  15. Wählen Sie das Feld Ressourcentyp und Messwert finden und dort im Menü den Namen der Ressource und des Messwerts aus. Verwenden Sie in den Feldern des Textfelds folgende Werte:

    1. Wählen Sie für Messwert den Wert external.googleapis.com/prometheus/requests aus oder geben Sie ihn ein.
    2. Geben Sie im Feld Gruppieren nach http_code ein.

    In der folgenden Grafik ist die Rate der beantworteten HTTP-Anfragen nach HTTP-Statuscode unterteilt:

    Vergleichsdiagramm der HTTP-Anfragenrate

    Diese Grafik zeigt die Rate der HTTP-Codes 200 und 500 für alle Pods: Produktion, Referenz und Canary. Da die Fehlerrate der Canary-Version niedriger ist, haben Sie sie in der Produktion bereitgestellt. Nach einer kurzen Zeit der Bereitstellung, während der die Gesamtzahl der Anfragen zurückgegangen ist, hat sich die Fehlerrate insgesamt verringert. Die Canary-Version wurde somit ordnungsgemäß in der Produktion bereitgestellt.

Canary-Analyse automatisieren

Ein Canary-Deployment ist nützlich, aber bei der derzeitigen Konfiguration ist ein manueller Prozess. Sie müssen vor der vollständigen Bereitstellung von Hand prüfen, ob sich die Canary-Version erwartungsgemäß verhält. Auch sind die Unterschiede zwischen der Canary-Version und der Referenzversion nicht immer klar erkennbar.

Es empfiehlt sich daher, die Canary-Analyse zu automatisieren. Etwaige problematische Messwerte lassen sich mit einer automatisierten statistischen Analyse leichter erkennen als von Hand. In diesem Abschnitt wird die Phase Manuelle Beurteilung durch eine automatisierte Canary-Analyse ersetzt.

Canary-Unterstützung aktivieren

Konfigurieren Sie zuerst in Spinnaker die automatisierte Canary-Analyse-Funktion Kayenta. Verwenden Sie für die Konfiguration von Kayenta das Tool Halyard, mit dem Sie auch Spinnaker konfigurieren und bereitstellen.

  1. Konfigurieren Sie Kayenta so, dass Monitoring als Back-End verwendet wird:

    hal config canary google enable
    hal config canary google account add kayenta-tutorial --project $DEVSHELL_PROJECT_ID
    hal config canary google edit --stackdriver-enabled=true
    
  2. Wenden Sie die neue Konfiguration an:

    ~/cloudshell_open/spinnaker-for-gcp/scripts/manage/push_and_apply.sh
    

    Die Bereitstellung kann mehrere Minuten dauern.

Automatische Canary-Analyse-Funktion konfigurieren

Nachdem Sie Kayenta aktiviert haben, konfigurieren Sie die Funktion für sampleapp.

  1. Wählen Sie in Spinnaker Config aus.

  2. Wählen Sie im Bereich Features die Option Canary und dann Änderungen speichern aus.

    Screenshot mit Pipeline-Funktionen

Canary-Konfiguration erstellen

In Spinnaker werden verschiedene Messwerte in einer automatisierten statistischen Canary-Analyse getestet. Als Ergebnis wird eine Punktzahl ausgegeben. Die Punktzahl kann zwischen 0 und 100 liegen. Sie steht für die Anzahl der Messwerte, die beim Vergleich der Referenzversion und der Canary-Version erfolgreich sind oder fehlschlagen. Sie können das Ergebnis beeinflussen, indem Sie Messwerte in andere Gruppen verschieben und die Gruppen unterschiedlich gewichten. Ob die Bereitstellung fortgesetzt werden soll, entscheiden Sie anhand des Analyseergebnisses. Wenn Sie wie in dieser Anleitung nur einen Messwert verwenden, erhalten Sie als Punktzahl entweder 0 (fehlgeschlagen) oder 100 (erfolgreich).

Eine Anwendung kann mehrere Canary-Konfigurationen haben. Diese können von mehreren Anwendungen gemeinsam genutzt werden. Canary-Konfigurationen haben zwei Hauptkomponenten:

  • Die zu analysierenden Messwerte (gegebenenfalls in verschiedenen Gruppen)
  • Eine Untergrenze und eine Akzeptanzgrenze für die Punktzahl

In einer Bereitstellungspipeline wird eine Canary-Konfiguration in der Phase Canary Analysis (Canary-Analyse) verwendet. Diese Phase kann mehrere Canary-Läufe umfassen. Wenn die Punktzahl eines Laufs die Untergrenze unterschreitet, wird die Phase angehalten. Die weiteren Ausführungen werden unterbunden. Die Punktzahl des letzten Laufs muss über einer bestimmten Akzeptanzgrenze liegen, damit die gesamte Phase als erfolgreich gilt.

So erstellen Sie eine Canary-Konfiguration:

  1. Nachdem die Canary-Version aktiviert ist, wird der Abschnitt Pipelines durch Delivery (Bereitstellung) ersetzt (wenn Sie den Abschnitt Delivery nicht sehen, laden Sie Spinnaker neu). Gehen Sie im Abschnitt Delivery zu Canary Configs.
  2. Wählen Sie Konfiguration hinzufügen aus.
  3. Geben Sie als Konfigurationsname kayenta-test ein.
  4. Wählen Sie im Bereich Messwerte die Option Messwert hinzufügen aus.
  5. Geben Sie im Dialogfeld Messwert hinzufügen die folgenden Werte ein und wählen Sie OK aus:

    • Name: error_rate
    • Fehler bei: increase
    • Ressourcentyp: k8s_container
    • Messwerttyp: external.googleapis.com/prometheus/requests
    • Aligner: ALIGN_RATE
    • Filtervorlage: Wählen Sie Neu erstellen aus.

      • Geben Sie unter Name der neuen Filtervorlage http_code ein.
      • Geben Sie unter Vorlage der neuen Filtervorlage Folgendes ein: metric.labels.http_code = "500" AND resource.label.pod_name = starts_with("${scope}")
      • Klicken Sie auf Speichern.
  6. Wählen Sie im Bereich Scoring für die Gruppe 1 den Wert 100 aus.

  7. Wählen Sie Save Changes (Änderungen speichern) aus.

Canary-Analysephase zur Pipeline hinzufügen

Nachdem Sie nun eine Canary-Konfiguration haben, ändern Sie die vorhandene Bereitstellungspipeline. Ersetzen Sie dabei die Phase Manual Judgment (Manuelle Beurteilung) durch die Phase Canary Analysis (Canary-Analyse) mit dieser Konfiguration.

  1. Wechseln Sie zu Delivery > Pipelines. Wählen Sie anschließend für die Pipeline Canary Deploy Configure aus.

    Screenshot der Konfigurationsschaltfläche für das Canary-Deployment.

  2. Wählen Sie Stufe hinzufügen aus.

  3. Wählen Sie für Typ die Option Canary-Analyse aus.

  4. Ändern Sie im Abschnitt Abhängig von die Abhängigkeiten der neuen Phase in:

    • Deploy Canary (Canary-Version bereitstellen)
    • Deploy Baseline (Referenzversion bereitstellen)
  5. Geben Sie im Abschnitt Canary-Analyse-Konfiguration folgende Werte ein:

    Parametername Wert Definition
    Analysetyp Echtzeit (manuell) Der automatische Modus, in dem Canary und die Referenzversion für Sie erstellt werden, ist für Kubernetes noch nicht verfügbar.
    Konfigurationsname kayenta-test Der Name der zuvor erstellten Canary-Konfiguration.
    Lebensdauer 0 Stunden 5 Minuten Die voraussichtliche Dauer der Canary-Analyse.
    Verzögerung 0 Die Aufwärmzeit der Anwendung bis zum Start der Analyse.
    Intervall 5 Das Zeitfenster, das Kayenta zum Ausführen einer einzelnen statistischen Analyse verwendet.
    Referenz sampleapp-baseline Das GKE-Deployment Kayenta dient als Baseline.
    Ort der Referenzversion default Der GKE-Namespace, in dem die Referenzversion ausgeführt wird.
    Canary sampleapp-canary Die GKE-Bereitstellung von Kayenta dient als Canary.
    Ort der Canary-Version default Der GKE-Namespace, in dem die Canary-Version ausgeführt wird.
    Marginal 75 Der Schwellenwert für einen marginalen Canary-Pass.
    Pass 95 Der Schwellenwert für einen gesamten Canary-Pass.
  6. Wählen Sie im Abschnitt Execution Options (Ausführungsoptionen) die Option Ignore the failure (Fehler ignorieren) aus. Ignorieren Sie den Fehler, damit Sie die Referenzversion und die Canary-Version auch nach einer fehlgeschlagenen Canary-Analyse löschen können. Wir ändern im weiteren Verlauf der Anleitung die Phasen, um einen möglichen Canary-Fehler zu berücksichtigen.

  7. Wählen Sie im Schema der Pipeline Deploy to Production (In Produktion bereitstellen) aus.

    Screenshot der Schaltfläche "Deploy to Production" für die Pipeline

  8. Ändern Sie im Abschnitt Depends On (Abhängig von) die folgenden Parameter:

    1. Fügen Sie Canary Analysis (Canary-Analyse) hinzu.
    2. Entfernen Sie Manual Judgment (Manuelle Beurteilung).
  9. Ändern Sie den Parameter Conditional on Expression (Von Ausdruck abhängig), damit die Version nur nach erfolgreicher Canary-Analyse in der Produktion bereitgestellt wird.

    ${ #stage('Canary Analysis')['status'].toString() == 'SUCCEEDED'}
    
  10. Wählen Sie im Schema der Pipeline die Option Delete Canary (Canary löschen) aus und ändern Sie im Bereich Depends On (Abhängig von) die folgenden Parameter:

    1. Fügen Sie Canary Analysis (Canary-Analyse) hinzu.
    2. Entfernen Sie Manual Judgment (Manuelle Beurteilung).
  11. Wählen Sie im Schema der Pipeline Delete Baseline (Referenzversion löschen). Ändern Sie anschließend den Abschnitt Depends on (Abhängig von).

    1. Fügen Sie Canary Analysis (Canary-Analyse) hinzu.
    2. Entfernen Sie Manual Judgment (Manuelle Beurteilung).
  12. Damit die gesamte Pipeline fehlschlägt, wenn die Canary-Analyse fehlschlägt, wählen Sie im Schema der Pipeline Successful deployment (Erfolgreiche Bereitstellung) und dann für die vorhandene Vorbedingung das Symbol für Bearbeiten aus.

    Vorhandene Vorbedingung für die erfolgreiche Bereitstellung bearbeiten

    1. Ändern Sie den Wert für Expression (Ausdruck):

      ${ #stage('Canary Analysis')['status'].toString() == 'SUCCEEDED'}
      
    2. Wählen Sie Update (Aktualisieren) aus.

  13. Ersetzen Sie die Phase Manual Judgment (Manuelle Beurteilung) durch die neu erstellte Phase Canary-Analysis (Canary-Analyse).

    1. Wählen Sie im Schema der Pipeline Manual Judgment (Manuelle Beurteilung) aus.
    2. Wählen Sie Remove stage (Phase entfernen) aus.
  14. Wählen Sie Save Changes (Änderungen speichern) aus.

    Die Pipeline sieht jetzt wie in der folgenden Abbildung aus:

    Canary-Analysepipeline visualisieren

Neue Pipeline testen

Nachdem Sie die automatisierte Canary-Analyse konfiguriert haben, testen Sie, ob sich die Pipeline erwartungsgemäß verhält.

  1. Wechseln Sie zu Delivery > Pipelines. Dort finden Sie die Pipeline Canary Deploy oder Automated Canary Deploy, wenn Sie die Befehlszeile verwendet haben. Wählen Sie Start Manual Execution aus.

  2. Wählen Sie als Success Rate (Erfolgsquote) 60 und dann Run (Ausführen) aus.

  3. Sie können den aktuellen Fortschritt der Canary-Analyse prüfen. Wählen Sie dazu Canary Analysis (Canary-Analyse) und dann Task Status (Aufgabenstatus) aus. Nach einigen Minuten schlägt die Phase Canary Analysis (Canary-Analyse) fehl, da die Erfolgsquote in der Produktion aktuell bei 80 liegt. Wenn die Phase Canary Analysis (Canary-Analyse) fehlschlägt, rufen Sie den zugehörigen Bericht auf.

    1. Wählen Sie Canary Analysis (Canary-Analyse) aus.
    2. Wählen Sie Canary Summary (Canary-Zusammenfassung) aus.
    3. Klicken Sie auf das Symbol für Bericht.

      Die Canary-Version hat im Bericht eine höhere Fehlerrate als die Referenzversion.

      Berichtssymbol für die Zusammenfassung der Canary-Analyse

  4. Wiederholen Sie die Schritte dieses Abschnitts. Damit die Canary-Analyse dieses Mal erfolgreich ist, wählen Sie jedoch für Success Rate (Erfolgsquote) den Wert 90 aus.

Bereinigen

Damit Ihrem Google Cloud-Konto die in dieser Anleitung verwendeten Ressourcen nicht in Rechnung gestellt werden, löschen Sie entweder das Projekt, das die Ressourcen enthält, oder Sie behalten das Projekt und löschen die einzelnen Ressourcen.

  1. Wechseln Sie in der Cloud Console zur Seite Ressourcen verwalten.

    Zur Seite „Ressourcen verwalten“

  2. Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie dann auf Löschen.
  3. Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Shut down (Beenden), um das Projekt zu löschen.

Ressourcen löschen

Wenn Sie das in dieser Anleitung verwendete Google Cloud-Projekt beibehalten möchten, löschen Sie die einzelnen Ressourcen:

  1. Löschen Sie den GKE-Cluster.

    gcloud container clusters delete spinnaker-1
    
  2. Wenn Sie zur Bestätigung aufgefordert werden, geben Sie Y ein.

Nächste Schritte