Déploiements Canary sur Cloud Run

Ce document explique comment configurer et utiliser des déploiements Canary pour déployer vos applications sur Cloud Run. Le déploiement Canary de Cloud Deploy est compatible avec les services et les pools de nœuds de calcul Cloud Run, mais pas avec les tâches.

Un déploiement Canary est un déploiement progressif d'une nouvelle version de votre application, dans lequel vous augmentez progressivement le pourcentage de trafic envoyé à la nouvelle version, tout en surveillant les performances de l'application. Cela vous permet de détecter rapidement les problèmes potentiels et de minimiser l'impact sur vos utilisateurs.

Fonctionnement des déploiements Canary pour Cloud Run

Lorsque vous déployez sur Cloud Run à l'aide d'une stratégie de déploiement Canary, Cloud Deploy met à jour votre service existant avec une nouvelle révision. La nouvelle révision reçoit un pourcentage de trafic spécifié, et l'ancienne révision continue de recevoir le reste. Vous augmentez progressivement la répartition du trafic vers la nouvelle révision au fil du temps.

Avec Cloud Deploy, vous pouvez configurer des déploiements Canary sur Cloud Run en une seule ou plusieurs étapes.

Les instructions fournies ici ne concernent que la configuration Canary. Le document Déployer un service, une tâche ou un pool de nœuds de calcul Cloud Run contient les instructions générales pour configurer et exécuter votre pipeline de déploiement.

Assurez-vous de disposer des autorisations requises.

En plus des autres autorisations Identity and Access Management dont vous avez besoin pour utiliser Cloud Deploy, vous devez disposer des autorisations suivantes pour effectuer des actions supplémentaires qui peuvent être nécessaires pour un déploiement Canary :

  • clouddeploy.rollouts.advance
  • clouddeploy.rollouts.ignoreJob
  • clouddeploy.rollouts.cancel
  • clouddeploy.rollouts.retryJob
  • clouddeploy.jobRuns.get
  • clouddeploy.jobRuns.list
  • clouddeploy.jobRuns.terminate

Consultez les rôles et les autorisations IAM pour en savoir plus sur les rôles disponibles qui incluent ces autorisations.

Préparer votre fichier skaffold.yaml

Votre fichier skaffold.yaml définit la façon dont vos définitions de service Cloud Run sont affichées et déployées. Pour un déploiement Canary sur Cloud Run, assurez-vous qu'il pointe correctement vers vos fichiers de définition de service et qu'il définit tous les artefacts de compilation nécessaires (comme les images de conteneurs). Aucune configuration spéciale spécifique à Canary n'est requise dans skaffold.yaml au-delà de ce qui est nécessaire pour un déploiement standard. Vous pouvez utiliser des profils Skaffold pour gérer différentes variations de définition de service pour les phases Canary personnalisées.

Préparer la définition de votre service ou de votre pool de nœuds de calcul

Votre fichier de définition de service Cloud Run normal suffit, mais sans stanza traffic. Cloud Deploy gère la répartition du trafic entre la dernière révision réussie et la nouvelle révision.

Service

Exemple de fichier service.yaml (sans stanza traffic) :

 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

Pool de nœuds de calcul

Exemple de fichier worker-pool.yaml (sans stanza instanceSplit) :

 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

Configurer un déploiement Canary automatisé

Configurez un déploiement Canary automatisé directement dans la définition de votre pipeline de diffusion pour une étape Cloud Run spécifique. Cloud Deploy demande automatiquement à Cloud Run de répartir le trafic entre la dernière révision stable et la nouvelle révision en fonction des pourcentages spécifiés.

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

Dans cette configuration :

  • PERCENTAGES est une liste de valeurs de pourcentage séparées par des virgules représentant vos incréments Canary, par exemple [25, 50, 75]. Notez que cela n'inclut pas 100, car le déploiement à 100% est supposé dans le déploiement Canary et est géré par la phase stable.

  • Vous pouvez activer la validation du déploiement en configurant la verify stanza. Si vous le faites, une tâche verify est ajoutée à chaque phase Canary.

  • Vous pouvez activer les hooks de pré-déploiement en configurant la predeploy stanza. Si vous le faites, une tâche predeploy est ajoutée à la première phase Canary.

  • Vous pouvez activer les hooks de post-déploiement en configurant la postdeploy stanza. Si vous le faites, une tâche postdeploy est ajoutée à la phase stable.

  • Chaque propriété tasks sous verify, predeploy et postdeploy se compose d' une ou de plusieurs tâches à exécuter dans le cadre de cette tâche. Toutes les tâches configurées s'exécutent de manière séquentielle dans l'ordre dans lequel elles sont définies.

Configurer un déploiement Canary automatisé personnalisé

Cette configuration combine la définition de phase personnalisée (noms, pourcentages, profils, validation, hooks) avec la gestion automatique du trafic de Cloud Deploy pour Cloud Run. Vous définissez les phases, mais Cloud Deploy gère la demande à Cloud Run de déplacer le trafic en fonction des pourcentages.

Pour configurer cela, incluez à la fois le paramètre runtimeConfig.cloudRun.automaticTrafficControl: true et la section customCanaryDeployment (définissant phaseConfigs) dans le bloc strategy.canary. Cloud Deploy utilise les profils Skaffold spécifiés pour afficher la définition de service (qui ne doit toujours pas comporter de stanza traffic), mais gère automatiquement le trafic en fonction des pourcentages de phase.

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]

Exécuter le déploiement Canary Cloud Run

  1. Enregistrer le pipeline et les cibles : appliquez vos fichiers de configuration de pipeline de diffusion et de cible Cloud Run.

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

    Le pipeline de diffusion inclut la configuration Canary automatisée ou personnalisée pour l'environnement d'exécution de votre choix.

  2. Créer une version : démarrez le déploiement en fournissant le nom de l'image.

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

    Le pipeline de diffusion identifié par PIPELINE_NAME contient la configuration Canary automatisée ou personnalisée décrite dans ce document.

  3. Avancer le déploiement Canary :

    Gcloud CLI

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

    Où :

    ROLLOUT_NAME est le nom du déploiement actuel que vous faites passer à la phase suivante.

    RELEASE_NAME est le nom de la version à laquelle appartient ce déploiement.

    PIPELINE_NAME est le nom du pipeline de diffusion que vous utilisez pour gérer le déploiement de cette version.

    REGION est le nom de la région dans laquelle la version a été créée, par exemple us-central1. Ce champ est obligatoire.

    Pour en savoir plus sur la commande gcloud deploy rollouts advance, consultez la documentation de référence de Google Cloud SDK.

    Google Cloud Console

    1. Ouvrez la page des pipelines de diffusion.

    2. Cliquez sur votre pipeline dans la liste des pipelines de diffusion.

      La page d'informations du pipeline de diffusion affiche une représentation graphique de la progression de votre pipeline de diffusion.

    3. Dans l'onglet Déploiements, sous Détails du pipeline de diffusion, cliquez sur le nom de votre déploiement.

      La page d'informations du déploiement s'affiche pour ce déploiement.

      Informations sur le déploiement dans la console Google Cloud

      Notez que dans cet exemple, le déploiement comporte une phase canary-50 et une phase stable. Votre déploiement peut comporter plus de phases ou des phases différentes.

    4. Cliquez sur Avancer le déploiement.

      Le déploiement passe à la phase suivante.

Phases ignorées

Si vous déployez un déploiement Canary et que votre application n'a pas encore été déployée dans cet environnement d'exécution, Cloud Deploy ignore la phase Canary et exécute la phase stable. Consultez la section Ignorer les phases la première fois pour découvrir pourquoi cela se produit.

Étape suivante