Canary-Bereitstellungen in Cloud Run

In diesem Dokument wird beschrieben, wie Sie Canary-Deployments konfigurieren und verwenden, um Ihre Anwendungen in Cloud Run bereitzustellen. Cloud Deploy unterstützt Canary-Deployments für Cloud Run-Dienste und Worker-Pools, aber nicht für Jobs.

Ein Canary-Deployment ist ein schrittweiser Roll-out einer neuen Version Ihrer Anwendung. Dabei erhöhen Sie allmählich den Prozentsatz des Traffics, der an die neue Version gesendet wird, und beobachten gleichzeitig die Leistung der Anwendung. So können Sie potenzielle Probleme frühzeitig erkennen und die Auswirkungen auf Ihre Nutzer minimieren.

Funktionsweise von Canary-Deployments für Cloud Run

Wenn Sie mit einer Canary-Deployment-Strategie in Cloud Run bereitstellen, aktualisiert Cloud Deploy Ihren vorhandenen Dienst mit einer neuen Überarbeitung. Die neue Überarbeitung erhält einen bestimmten Prozentsatz des Traffics und die alte Überarbeitung den Rest. Sie erhöhen die Aufteilung des Traffics auf die neue Version im Laufe der Zeit schrittweise.

Mit Cloud Deploy können Sie Canary-Deployments in Cloud Run in einer oder mehreren Phasen konfigurieren.

Die Anleitung hier enthält nur Informationen, die speziell für die Canary-Konfiguration gelten. Das Dokument Cloud Run-Dienst, -Job oder -Worker-Pool bereitstellen enthält die allgemeine Anleitung zum Konfigurieren und Ausführen Ihrer Bereitstellungs pipeline.

Sie müssen die erforderlichen Berechtigungen haben.

Zusätzlich zu anderen Berechtigungen für Identity and Access Management, die Sie für die Verwendung von Cloud Deploy benötigen, sind die folgenden Berechtigungen erforderlich, um zusätzliche Aktionen auszuführen, die für ein Canary-Deployment 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 verfügbaren Rollen diese Berechtigungen enthalten, finden Sie unter IAM-Rollen und -Berechtigungen.

skaffold.yaml vorbereiten

In der Datei skaffold.yaml wird definiert, wie Ihre Cloud Run-Dienstdefinitionen gerendert und bereitgestellt werden. Für ein Canary-Deployment in Cloud Run muss die Datei korrekt auf Ihre Dienstdefinitionsdateien verweisen und alle erforderlichen Build-Artefakte (z. B. Container-Images) definieren. Über das, was für ein Standard-Deployment erforderlich ist, hinaus ist in skaffold.yaml keine spezielle Canary-Konfiguration erforderlich. Sie können Skaffold-Profile verwenden, um verschiedene Dienstdefinitionsvarianten für benutzerdefinierte Canary-Phasen zu verwalten.

Dienst- oder Worker-Pool-Definition vorbereiten

Ihre normale Cloud Run-Dienstdefinitionsdatei reicht aus, aber ohne traffic-Abschnitt. Cloud Deploy teilt den Traffic zwischen der letzten erfolgreichen Überarbeitung und der neuen Überarbeitung auf.

Dienst

Beispiel für service.yaml (ohne traffic-Abschnitt):

 apiVersion: serving.knative.dev/v1
 kind: Service
 metadata:
   name: my-cloudrun-service
 spec:
   template:
     spec:
       containers:
       - image: gcr.io/my-project/my-cloudrun-app
         ports:
         - containerPort: 8080

Worker-Pool

Beispiel für worker-pool.yaml (ohne instanceSplit-Abschnitt):

 apiVersion: run.googleapis.com/v1
 kind: WorkerPool
 metadata:
   name: my-wp
   annotations:
     run.googleapis.com/launch-stage: BETA
 spec:
   template:
     spec:
       containers:
       - image: us-docker.pkg.dev/cloudrun/container/worker-pool

Automatisierte Canary-Bereitstellung konfigurieren

Konfigurieren Sie eine automatisierte Canary-Bereitstellung direkt in der Definition Ihrer Bereitstellungspipeline für eine bestimmte Cloud Run-Phase. Cloud Deploy weist Cloud Run automatisch an, den Traffic gemäß den angegebenen Prozentsätzen zwischen der letzten stabilen Version und der neuen Version aufzuteilen.

serialPipeline:
  stages:
  - targetId: prod
    profiles: []
    strategy:
      canary:
        runtimeConfig:
          cloudRun:
            automaticTrafficControl: true
        canaryDeployment:
          percentages: [PERCENTAGES]
          verify:
            tasks: [TASKS]
          predeploy:
            tasks: [TASKS]
          postdeploy:
            tasks: [TASKS]

In dieser Konfiguration:

  • PERCENTAGES“ ist eine durch Kommas getrennte Liste von Prozent werten, die Ihre Canary-Schritte darstellen, z. B. „[25, 50, 75]“. Der Wert 100 ist nicht enthalten, da bei der Canary-Bereitstellung von einer Bereitstellung von 100% ausgegangen wird und diese von der Phase stable verarbeitet wird.

  • Sie können die Bereitstellungsprüfung aktivieren, indem Sie den Abschnitt verify konfigurieren. In diesem Fall wird jeder Canary-Phase ein verify-Job hinzugefügt.

  • Sie können Pre-Deploy-Hooks aktivieren, indem Sie den predeploy Abschnitt konfigurieren. In diesem Fall wird der ersten Canary-Phase ein predeploy-Job hinzugefügt.

  • Sie können Post-Deploy-Hooks aktivieren, indem Sie den postdeploy Abschnitt konfigurieren. In diesem Fall wird der Phase stable ein postdeploy-Job hinzugefügt.

  • Jede tasks Property unter verify, predeploy und postdeploy besteht aus einer oder mehreren Aufgaben, die als Teil dieses Jobs ausgeführt werden sollen. Alle konfigurierten Aufgaben werden sequenziell in der Reihenfolge ausgeführt, in der sie definiert sind.

Benutzerdefinierte automatisierte Canary-Bereitstellung konfigurieren

Hier werden die benutzerdefinierte Phasenkonfiguration (Namen, Prozentsätze, Profile, Überprüfung, Hooks) mit der automatischen Traffic-Verwaltung von Cloud Deploy für Cloud Run kombiniert. Sie definieren die Phasen, aber Cloud Deploy weist Cloud Run an, den Traffic basierend auf den Prozentsätzen zu verschieben.

Konfigurieren Sie dazu sowohl die Einstellung runtimeConfig.cloudRun.automaticTrafficControl: true als auch den Abschnitt customCanaryDeployment (in dem phaseConfigs definiert werden) im Block strategy.canary. Cloud Deploy verwendet die angegebenen Skaffold-Profile, um die Dienstdefinition zu rendern (die weiterhin keinen traffic-Abschnitt haben sollte), verwaltet aber den Traffic automatisch gemäß den Phasenprozentsätzen.

serialPipeline:
  stages:
  - targetId: cloudrun-prod
    profiles: []
    strategy:
      canary:
        # Include runtimeConfig for automatic traffic management
        runtimeConfig:
          cloudRun:
            automaticTrafficControl: true
        # Include customCanaryDeployment for phase customization
        customCanaryDeployment:
          phaseConfigs:
          - phaseId: "warmup-cr"
            percentage: 10
            profiles: ["base-config"] # Profile rendering service def (no traffic stanza)
            verify:
              tasks: [TASKS]
          - phaseId: "scaling-cr"
            percentage: 50
            profiles: ["base-config"] # Can use the same profile
            verify:
              tasks: [TASKS]
          - phaseId: "stable"
            percentage: 100
            profiles: ["base-config"]
            verify:
              tasks: [TASKS]

Cloud Run-Canary-Bereitstellung ausführen

  1. Pipeline und Ziele registrieren: Wenden Sie die Konfigurationsdateien für die Bereitstellungspipeline und das Cloud Run-Ziel an.

    
    gcloud deploy apply --file=delivery-pipeline.yaml --region=REGION
    gcloud deploy apply --file=cloudrun-targets.yaml --region=REGION
    

    Die Bereitstellungspipeline enthält die automatisierte oder benutzerdefinierte Canary-Konfiguration für die von Ihnen ausgewählte Laufzeit.

  2. Release erstellen: Starten Sie die Bereitstellung und geben Sie den Imagenamen an.

    
    gcloud deploy releases create RELEASE_NAME \
                                    --delivery-pipeline=PIPELINE_NAME \
                                    --region=REGION
    

    Die durch PIPELINE_NAME identifizierte Bereitstellungspipeline enthält die in diesem Dokument beschriebene automatisierte oder benutzerdefinierte Canary-Konfiguration.

  3. Canary-Bereitstellung fortsetzen:

    gcloud CLI

    gcloud deploy rollouts advance ROLLOUT_NAME \
                                --release=RELEASE_NAME \
                                --delivery-pipeline=PIPELINE_NAME \
                                --region=REGION
    

    Wobei:

    ROLLOUT_NAME ist der Name des aktuellen Roll-outs, der in die nächste Phase überführt wird.

    RELEASE_NAME ist der Name des Releases, zu dem dieser Roll-out gehört.

    PIPELINE_NAME ist der Name der Bereitstellungspipeline, mit der Sie die Bereitstellung dieses Releases verwalten.

    REGION ist der Name der Region, in der das Release 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

    1. Öffnen Sie die Seite der Liefer pipelines.

    2. Klicken Sie auf Ihre Pipeline, die in der Liste der Lieferpipelines angezeigt wird.

      Die Detailseite der Lieferpipeline zeigt eine grafische Darstellung des Fortschritts der Lieferpipeline.

    3. Klicken Sie auf dem Tab Roll-outs unter Details der Lieferpipeline auf den Namen Ihres Roll-outs.

      Die Roll-out-Detailseite wird für diesen Roll-out angezeigt.

      Details zur Einführung in der Google Cloud Console

      In diesem Beispiel hat der Roll-out eine Phase canary-50 und eine Phase stable. Ihr Roll-out kann mehr oder andere Phasen haben.

    4. Klicken Sie auf Roll-out fortsetzen.

      Der Roll-out wird in die nächste Phase überführt.

Übersprungene Phasen

Wenn Sie eine Canary-Bereitstellung durchführen und Ihre Anwendung noch nicht in dieser Laufzeit bereitgestellt wurde, überspringt Cloud Deploy die Canary-Phase und führt die stabile Phase aus. Unter Phasen beim ersten Mal überspringen erfahren Sie, warum das passiert.

Nächste Schritte