Ce document explique comment configurer et utiliser les déploiements Canary pour déployer vos applications sur GKE ou GKE Enterprise à l'aide de Cloud Deploy avec la mise en réseau basée sur les services.
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 GKE et GKE Enterprise avec la mise en réseau basée sur les services
Vous devez fournir le nom de la ressource de déploiement et de la ressource de service.
Cloud Deploy crée une ressource de déploiement supplémentaire, avec le nom de votre déploiement actuel plus
-canary
.
Les secrets et les ConfigMaps sont également copiés et renommés avec -canary
.
Cloud Deploy modifie le service pour ajuster le sélecteur afin de sélectionner les pods du déploiement actuel et les pods Canary.
Cloud Deploy calcule le nombre de pods à utiliser pour le canary en fonction du calcul décrit dans la section sur le provisionnement des pods. Ce calcul diffère selon que vous activez ou désactivez le surprovisionnement de pods.
Si nous passons directement à la phase
stable
, Cloud Deploy ajoute les libellés à utiliser pour faire correspondre les pods. Ils sont donc disponibles pour les déploiements Canary suivants.Cloud Deploy crée un déploiement qui inclut le pourcentage de pods spécifique à la phase et le met à jour pour chaque phase. Pour ce faire, le nombre de pods est calculé en pourcentage du nombre de pods d'origine. Cela peut entraîner une répartition inexacte du trafic. Si vous avez besoin d'une répartition exacte du trafic, vous pouvez l'obtenir à l'aide de l'API Gateway.
Pendant la phase
stable
, le déploiement-canary
est réduit à zéro, et le déploiement d'origine est remplacé par le nouveau déploiement.Cloud Deploy ne modifie pas le déploiement d'origine avant la phase
stable
, sauf si vous désactivez le surprovisionnement.
Cloud Deploy provisionne des pods pour atteindre le pourcentage de canary demandé le plus précisément possible. Cela dépend du nombre de pods, et non du trafic vers les pods. Si vous souhaitez que votre déploiement canary soit basé sur le trafic, vous devez utiliser l'API Gateway.
Pour le déploiement canary basé sur le réseau GKE, vous pouvez activer ou désactiver le surprovisionnement de pods. Les sections suivantes décrivent comment Cloud Deploy calcule le nombre de pods à provisionner pour le déploiement Canary pour chaque phase Canary.
Provisionnement de pods avec le surprovisionnement activé
L'activation du surprovisionnement (disablePodOverprovisioning: false
) permet à Cloud Deploy de créer suffisamment de pods supplémentaires pour exécuter le pourcentage de canary souhaité, en fonction du nombre de pods exécutant votre déploiement existant. La formule suivante montre comment Cloud Deploy calcule le nombre de pods à provisionner pour le déploiement Canary pour chaque phase Canary, lorsque le surprovisionnement de pods est activé :
math.Ceil( percentage * ReplicaCountOfDeploymentOnCluster / (100-percentage))
Avec cette formule, le nombre actuel de répliques (le nombre de pods dont vous disposez déjà, avant ce canary) est multiplié par le pourcentage de canary pour la phase, et le résultat est divisé par (100 moins le pourcentage).
Par exemple, si vous avez déjà quatre pods et que votre phase de canary est de 50 %, le nombre de pods canary est de quatre. (Le résultat de 100-percentage
est utilisé comme pourcentage : 100-50=50
, traité comme .50
.)
Le surprovisionnement de pods est le comportement par défaut.
Provisionnement de pods avec surprovisionnement désactivé
Vous pouvez désactiver le surprovisionnement (disablePodOverprovisioning: true
) pour vous assurer que Cloud Deploy n'augmente pas le nombre de vos répliques.
La formule suivante montre comment Cloud Deploy calcule le provisionnement des pods pour le déploiement canary pour chaque phase canary, lorsque le surprovisionnement des pods est désactivé :
math.Ceil( (ReplicaCountOfDeploymentOnCluster + ReplicaCountOfCanaryDeploymentOnCluster) * percentage)
Dans cette formule, ReplicaCountOfCanaryDeploymentOnCluster
n'existe que s'il y a déjà eu une phase Canary. S'il s'agit de la première phase Canary, il n'y a pas de ReplicaCountOfCanaryDeploymentOnCluster
.
Si vous commencez avec quatre pods, ce nombre est multiplié par le pourcentage de canary (par exemple, 50 %, soit .5
) pour obtenir 2
. Le déploiement d'origine est donc réduit à deux instances, et deux nouveaux pods sont créés pour le déploiement Canary. Si vous avez ensuite une phase Canary à 75 %, vous avez 2
(déploiement d'origine) +2
(première phase Canary), *.75
, pour obtenir 3
pods Canary et 1
pods exécutant le déploiement d'origine.
Avec Cloud Deploy, vous pouvez configurer des déploiements Canary sur GKE et GKE Enterprise en une ou plusieurs étapes.
Les instructions fournies ici ne concernent que la configuration canary. Le document Déployer sur un cluster Google Kubernetes Engine 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 fichiers manifestes Kubernetes sont affichés et déployés. Pour un déploiement canary sur GKE/GKE Enterprise, assurez-vous qu'il pointe correctement vers vos fichiers manifestes et définit les artefacts de compilation nécessaires. 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 fichier manifeste pour les phases canary personnalisées.
Préparer vos fichiers manifestes Kubernetes
Vos fichiers manifestes Kubernetes doivent inclure une ressource Deployment
et une ressource Service
.
Le Service
doit définir un selector
qui correspond aux libellés des pods gérés par le Deployment
.
Le libellé par défaut recherché par Cloud Deploy est app
, mais il peut être configuré dans le pipeline.
Configurer un déploiement Canary automatisé
Configurez un canary automatisé directement dans la définition de votre pipeline de déploiement pour une étape GKE ou GKE Enterprise spécifique à l'aide de la mise en réseau standard des services Kubernetes.
Dans l'étape du pipeline, incluez une propriété strategy
, comme suit :
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"
Dans cette configuration…
SERVICE_NAME est le nom du service Kubernetes défini dans votre fichier manifeste.
DEPLOYMENT_NAME est le nom de votre déploiement Kubernetes, défini dans votre fichier manifeste.
LABEL est un libellé de sélecteur de pod. Il doit correspondre au sélecteur d'étiquettes du service Kubernetes défini dans votre fichier manifeste. Cette opération est facultative. La valeur par défaut est
app
.PERCENTAGES est une liste de valeurs de pourcentage séparées par une virgule, représentant vos incréments de canary, par exemple
[5, 25, 50]
.De plus, cela n'inclut pas
100
, car le 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 activé à chaque 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
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 un fichier manifeste Kubernetes différent. 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 basée sur un service personnalisé.
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 GKE ou GKE Enterprise. Vous définissez les phases, mais Cloud Deploy gère la manipulation des ressources sous-jacentes en fonction des pourcentages et de l'runtimeConfig
choisi.
Pour configurer cela, incluez à la fois une section runtimeConfig
avec serviceNetworking
et la section customCanaryDeployment
(définissant phaseConfigs) dans le bloc strategy.canary. Cloud Deploy utilisera les profils Skaffold spécifiés pour le rendu, mais ajustera automatiquement le trafic en fonction des pourcentages de runtimeConfig
et de phase.
serialPipeline:
stages:
- targetId: gke-prod
profiles: []
strategy:
canary:
# Include runtimeConfig for automatic traffic management
runtimeConfig:
kubernetes:
serviceNetworking:
service: "my-app"
deployment: "my-deployment"
# Include customCanaryDeployment for phase customization
customCanaryDeployment:
phaseConfigs:
- phaseId: "warmup"
percentage: 10
profiles: ["profile-a"] # Profile used for rendering this phase
verify: true
- phaseId: "scaling"
percentage: 50
profiles: ["profile-b"] # Different profile for this phase
verify: true
- phaseId: "stable"
percentage: 100
profiles: ["profile-b"] # Can reuse profiles
verify: true
Exécuter le canary GKE ou GKE Enterprise
Enregistrez le pipeline et les cibles : appliquez vos fichiers de configuration de pipeline de diffusion et de cible GKE ou GKE Enterprise.
gcloud deploy apply --file=delivery-pipeline.yaml --region=REGION gcloud deploy apply --file=gke-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 une version : lancez le déploiement en fournissant le nom de l'image.
gcloud deploy releases create RELEASE_NAME \ --delivery-pipeline=PIPELINE_NAME \ --region=REGION # e.g., --images=my-cloudrun-service=gcr.io/my-project/my-app:v1.1 # Add --skaffold-file or --source if not using default Skaffold config discovery
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