Ce document explique comment configurer et utiliser les déploiements Canary pour déployer vos applications sur Cloud Run (services uniquement, pas les jobs) à l'aide de Cloud Deploy.
Un déploiement Canary est un déploiement progressif d'une nouvelle version de votre application. Vous augmentez progressivement le pourcentage de trafic envoyé vers 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 leur 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 spécifié du trafic, 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 ou plusieurs étapes.
Les instructions fournies ici ne concernent que la configuration canary. Le document Déployer un service ou un job 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
Pour en savoir plus sur les rôles disponibles qui incluent ces autorisations, consultez Rôles et autorisations IAM.
Préparer votre 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 conteneur). Aucune configuration spéciale spécifique aux versions 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 variantes de définition de service pour les phases canary personnalisées.
Préparer la définition de votre service
Votre fichier de définition de service Cloud Run habituel suffit, mais sans section traffic
. Cloud Deploy gère la répartition du trafic entre la dernière révision ayant abouti et la nouvelle révision.
Exemple 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
Configurer un déploiement Canary automatisé
Configurez une analyse Canary automatisée directement dans la définition de votre pipeline de livraison 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: true|false
predeploy:
actions: "PREDEPLOY_ACTION"
postdeploy:
actions: "POSTDEPLOY_ACTION"
Dans cette configuration :
PERCENTAGES est une liste de valeurs de pourcentage séparées par une virgule, représentant vos incréments de canary, par exemple
[25, 50, 75]
. Notez que cela n'inclut pas100
, car un déploiement à 100 % est supposé dans le canary et est géré par la phasestable
.Vous pouvez activer la vérification du déploiement (
verify: true
). Si vous le faites, un jobverify
est ajouté à chaque phase Canary.PREDEPLOY_ACTION
Identique à l'ACTION_NAME que vous avez utilisé dans votre
skaffold.yaml
pour définir l'action personnalisée que vous souhaitez exécuter avant le déploiement.POSTDEPLOY_ACTION
Identique à l'ACTION_NAME que vous avez utilisé dans votre
skaffold.yaml
pour définir l'action personnalisée que vous souhaitez exécuter après le déploiement.
Configurer un canary personnalisé
Vous pouvez configurer votre canary manuellement au lieu de vous fier entièrement à l'automatisation fournie par Cloud Deploy. Avec la configuration canary personnalisée, vous spécifiez les éléments suivants dans la définition de votre pipeline de diffusion :
Noms des phases de déploiement
Dans un déploiement canary entièrement automatisé, Cloud Deploy nomme les phases pour vous (
canary-25
,canary-75
,stable
, par exemple). Toutefois, avec un canary personnalisé, vous pouvez attribuer n'importe quel nom à chaque phase, à condition qu'il soit unique parmi toutes les phases de cette étape canary et qu'il respecte les restrictions concernant les ID de ressources. Toutefois, le nom de la phase finale (100 %) doit êtrestable
.Objectifs de pourcentage pour chaque phase
Spécifiez les pourcentages séparément, pour chaque phase.
Profils Skaffold à utiliser pour la phase
Vous pouvez utiliser un profil Skaffold distinct pour chaque phase, le même profil ou n'importe quelle combinaison. Chaque profil peut utiliser une définition de service Cloud Run différente. Vous pouvez également utiliser plusieurs profils pour une phase donnée. Cloud Deploy les combine.
Indique s'il existe un job de validation pour la phase.
N'oubliez pas que si vous activez la validation, vous devez également configurer votre
skaffold.yaml
pour la validation.Indique si des jobs de pré-déploiement ou de post-déploiement sont associés à la phase.
Si vous activez des jobs de pré-déploiement ou de post-déploiement, vous devez configurer votre
skaffold.yaml
pour ces jobs.
Tous les types de cibles sont acceptés pour les déploiements Canary personnalisés.
Éléments de configuration Canary personnalisés
Le code YAML suivant montre la configuration des phases du déploiement canary entièrement personnalisé :
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"
Dans ce fichier YAML
PHASE1_NAME
Nom de la phase. Chaque nom de phase doit être unique.
[ "PROFILE_NAME" ]
Nom du profil à utiliser pour la phase. Vous pouvez utiliser le même profil pour chaque phase, un profil différent pour chacune d'elles ou une combinaison des deux. Vous pouvez également spécifier plusieurs profils. Cloud Deploy utilise tous les profils que vous spécifiez, ainsi que le profil ou le fichier manifeste utilisé par l'ensemble de l'étape.
stable
La phase finale doit être nommée
stable
.PERCENTAGE1
Il s'agit du pourcentage à déployer pour la première phase. Chaque phase doit avoir une valeur de pourcentage unique, qui doit être un pourcentage entier (par exemple, pas
10.5
). Les phases doivent être dans l'ordre croissant.verify: true|false
Indique à Cloud Deploy s'il faut inclure un job de validation pour la phase. Notez que pour que chaque phase utilise la validation, Skaffold utilise le même profil de validation que celui spécifié pour le rendu et le déploiement de cette phase.
PREDEPLOY_ACTION
Identique à l'ACTION_NAME que vous avez utilisé dans votre
skaffold.yaml
pour définir l'action personnalisée que vous souhaitez exécuter avant le déploiement.POSTDEPLOY_ACTION
Il s'agit du même ACTION_NAME que celui que vous avez utilisé dans votre
skaffold.yaml
pour définir l'action personnalisée que vous souhaitez exécuter après le déploiement.
Le pourcentage de la dernière phase doit être de 100
. Les phases sont exécutées dans l'ordre dans lequel vous les configurez dans cette strophe customCanaryDeployment
. Toutefois, si les valeurs de pourcentage ne sont pas dans l'ordre croissant, la commande permettant d'enregistrer le pipeline de déploiement échoue et génère une erreur.
Notez que la configuration d'un canary personnalisé n'inclut pas de strophe runtimeConfig
. Si vous incluez runtimeConfig
, il s'agit d'une mise à niveau Canary automatisée personnalisée.
Configurer une analyse Canary automatisée personnalisée
Cela 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 les instructions envoyées à Cloud Run pour 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 utilisera les profils Skaffold spécifiés pour afficher la définition du service (qui ne doit toujours pas comporter de strophe traffic
), mais gérera 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: true
- phaseId: "scaling-cr"
percentage: 50
profiles: ["base-config"] # Can use the same profile
verify: true
- phaseId: "stable"
percentage: 100
profiles: ["base-config"]
verify: true
Exécuter le canary Cloud Run
Enregistrez le pipeline et les cibles : appliquez vos fichiers de configuration de pipeline de déploiement 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 déploiement inclut la configuration Canary automatisée ou personnalisée pour l'environnement d'exécution de votre choix.
Créez un déploiement : lancez 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 livraison identifié par
PIPELINE_NAME
contient la configuration Canary automatisée ou personnalisée décrite dans ce document.Faites avancer la phase Canary :
CLI gcloud
gcloud deploy rollouts advance ROLLOUT_NAME \ --release=RELEASE_NAME \ --delivery-pipeline=PIPELINE_NAME \ --region=REGION
Où :
ROLLOUT_NAME
est le nom du déploiement en cours 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 livraison 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 exempleus-central1
. Obligatoire.Pour en savoir plus sur la commande
gcloud deploy rollouts advance
, consultez la documentation de référence de Google Cloud SDK.Console Google Cloud
Cliquez sur votre pipeline dans la liste des pipelines de diffusion.
La page "Détails du pipeline de diffusion" affiche une représentation graphique de la progression de votre pipeline de diffusion.
Dans l'onglet Déploiements, sous Détails du pipeline de diffusion, cliquez sur le nom de votre déploiement.
La page de détails du déploiement s'affiche.
Notez que dans cet exemple, le déploiement comporte une phase
canary-50
et une phasestable
. Votre déploiement peut comporter plus de phases ou des phases différentes.Cliquez sur Avancer le déploiement.
Le déploiement passe à la phase suivante.
Phases ignorées
Si vous déployez un canary et que votre application n'a pas encore été déployée sur ce runtime, Cloud Deploy ignore la phase canary et exécute la phase stable. Consultez Ignorer des phases la première fois pour en savoir plus.
Étapes suivantes
Essayez le guide de démarrage rapide du déploiement Canary.
Découvrez comment gérer le cycle de vie des déploiements de votre canary.
En savoir plus sur le déploiement en parallèle
En savoir plus sur les stratégies de déploiement Cloud Deploy
Obtenez plus d'informations sur Cloud Run.