Ce guide explique comment effectuer des déploiements bleu-vert sans temps d'arrêt sur les groupes d'instances gérés (MIG) Compute Engine à l'aide de Cloud Build et Terraform.
Cloud Build vous permet d'automatiser divers processus de développement, y compris la création et le déploiement d'applications dans divers environnements d'exécution Google Cloud tels que Compute Engine, Google Kubernetes Engine, GKE Enterprise et les fonctions Cloud Run.
Les MIG Compute Engine vous permettent d'exécuter des applications sur plusieurs machines virtuelles (VM) identiques. Vous pouvez faire en sorte que des charges de travail évolutives et à disponibilité élevée en tirant parti d'un MIG automatisé y compris: autoscaling, autoréparation, régional (multizone) déploiement et mise à jour automatique. Utiliser le déploiement continu bleu-vert vous allez apprendre à transférer progressivement le trafic utilisateur d'un MIG (bleu) à un autre MIG (vert), qui s'exécutent tous deux en production.
Présentation de la conception
Le diagramme suivant montre le modèle de déploiement bleu/vert utilisé par l'exemple de code décrit dans ce document :
De manière générale, ce modèle comprend les composants suivants :
- Deux pools de VM Compute Engine: bleu et vert.
- Trois équilibreurs de charge HTTP(S) externes:
- Un équilibreur de charge bleu/vert qui achemine le trafic des utilisateurs finaux vers le pool bleu ou vert d'instances de VM.
- Un équilibreur de charge Blue qui achemine le trafic des ingénieurs QA et des développeurs vers le pool d'instances de VM Blue.
- Équilibreur de charge Green qui achemine le trafic des ingénieurs QA et des développeurs vers le pool d'instances Green.
- Deux ensembles d'utilisateurs :
- Les utilisateurs finaux qui ont accès à l'équilibreur de charge Bleu/Vert, qui pointe vers le pool d'instances bleu ou vert.
- Ingénieurs de contrôle qualité et développeurs ayant besoin d'accéder aux deux ensembles de pools de développement et de test. Ils peuvent accéder à la fois aux cartes bleues et les équilibreurs de charge verts, qui les acheminent vers le pool d'instances bleues et Pool d'instances vert, respectivement.
Les pools de VM bleus et verts sont implémentés en tant que MIG Compute Engine, et les adresses IP externes sont routées vers les VM du MIG à l'aide d'équilibreurs de charge HTTP(S) externes. L'exemple de code décrit dans ce document utilise Terraform pour configurer cette infrastructure.
Le schéma suivant illustre les opérations de développement qui ont lieu dans le déploiement:
Dans le diagramme ci-dessus, les flèches rouges représentent le flux d'amorçage qui se produit lorsque vous configurez l'infrastructure de déploiement pour la première fois, et les flèches bleues représentent le flux GitOps qui se produit à chaque déploiement.
Pour configurer cette infrastructure, vous devez exécuter un script de configuration qui lance le et configure les composants du flux GitOps.
Le script de configuration exécute un pipeline Cloud Build qui effectue les les opérations suivantes:
- crée un dépôt dans Cloud Source Repositories ;
copy-of-gcp-mig-simple
et copie le code source vers le dépôt Cloud Source Repositories. - crée deux déclencheurs Cloud Build nommés
apply
etdestroy
.
Le déclencheur apply
est associé à un fichier Terraform nommé main.tfvars
dans
Cloud Source Repositories. Ce fichier contient les variables Terraform représentant les équilibreurs de charge bleu et vert.
Pour configurer le déploiement, mettez à jour les variables dans le fichier main.tfvars
.
Le déclencheur apply
exécute un pipeline Cloud Build qui exécute
tf_apply
et effectue les opérations suivantes:
- Crée deux MIG Compute Engine (un pour le vert et un pour le bleu), quatre instances de VM Compute Engine (deux pour le MIG vert et deux pour le MIG bleu), les trois équilibreurs de charge (bleu, vert et séparateur) et trois adresses IP publiques.
- Il affiche les adresses IP à utiliser pour voir les déploiements dans les instances bleues et vertes.
Le déclencheur de destruction est déclenché manuellement pour supprimer toutes les ressources créées par le déclencheur d'application.
Objectifs
Configurer la charge HTTP(S) externe à l'aide de Cloud Build et Terraform avec des backends de groupes d'instances de VM Compute Engine.
Effectuer des déploiements bleu-vert sur les instances de VM
Coûts
Dans ce document, vous utilisez les composants facturables suivants de Google Cloud :
Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût.
Une fois que vous avez terminé les tâches décrites dans ce document, vous pouvez éviter de continuer à payer des frais en supprimant les ressources que vous avez créées. Pour en savoir plus, consultez la section Effectuer un nettoyage.
Avant de commencer
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
Essayez-le !
Exécutez le script de configuration à partir du dépôt d'exemples de code Google:
bash <(curl https://raw.githubusercontent.com/GoogleCloudPlatform/cloud-build-samples/main/mig-blue-green/setup.sh)
Lorsque le script de configuration demande l'autorisation de l'utilisateur, saisissez yes (Oui).
L'exécution du script se termine en quelques secondes.
Dans la console Google Cloud, ouvrez la page Historique des compilations de Cloud Build :
Cliquez sur la dernière version.
La page Informations sur la compilation s'affiche. Elle contient un tableau de bord Cloud Build de compilation comportant trois étapes: la première crée un dépôt Cloud Source Repositories, la deuxième étape clone le contenu de l'exemple du dépôt GitHub à Cloud Source Repositories, et la troisième étape ajoute des déclencheurs de compilation.
Ouvrez Cloud Source Repositories:
Dans la liste des dépôts, cliquez sur
copy-of-gcp-mig-simple
.Dans l'onglet Historique en bas de la page, vous verrez un commit avec la description
A copy of https://github.com/GoogleCloudPlatform/cloud-build-samples.git
effectué par Cloud Build pour créer un dépôt nommécopy-of-gcp-mig-simple
Ouvrez la page Déclencheurs de Cloud Build :
Pour lancer le processus de déploiement, mettez à jour le fichier
infra/main.tfvars
:Dans votre fenêtre de terminal, créez un dossier nommé
deploy-compute-engine
et accédez-y :mkdir ~/deploy-compute-engine cd ~/deploy-compute-engine
Clonez le dépôt
copy-of-gcp-mig-simple
:gcloud source repos clone copy-of-mig-blue-green
Accédez au répertoire cloné :
cd ./copy-of-mig-blue-green
Mettez à jour
infra/main.tfvars
pour remplacer le bleu par le vert :sed -i'' -e 's/blue/green/g' infra/main.tfvars
Ajoutez le fichier mis à jour :
git add .
Validez le fichier :
git commit -m "Promote green"
Transférez le fichier:
git push
Modifier
infra/main.tfvars
déclenche l'exécution du déclencheurapply
, qui lance le déploiement.
Ouvrez Cloud Source Repositories:
Dans la liste des dépôts, cliquez sur
copy-of-gcp-mig-simple
.Le commit avec la description
Promote green
s'affiche dans l'onglet Historique en bas de la page.Pour afficher l'exécution du déclencheur
apply
, ouvrez la page Historique de compilation dans la console Google Cloud :Ouvrez la page Informations sur le build en cliquant sur le premier build.
Le pipeline de déclenchement
apply
s'affiche avec deux étapes de compilation. La première étape de compilation exécute Terraform apply pour créer les ressources Compute Engine et d'équilibrage de charge pour le déploiement. La deuxième étape de compilation affiche l'adresse IP à laquelle vous pouvez voir l'application en cours d'exécution.Ouvrez l'adresse IP correspondant au MIG vert dans un navigateur. Les éléments suivants s'affichent : une capture d'écran semblable à celle-ci et illustrant le déploiement:
Accédez à la page Groupe d'instances de Compute Engine pour afficher les groupes d'instances bleus et verts :
Ouvrez la page Instances de VM pour afficher les quatre instances de VM:
Ouvrez la page Adresses IP externes pour afficher les trois équilibreurs de charge:
Deux déclencheurs de compilation nommés apply
et destroy
s'affichent. Déclencheur apply
est joint au fichier infra/main.tfvars
de la branche main
. Ce déclencheur
est exécutée à chaque fois
que le fichier est mis à jour. Le déclencheur destroy
est un déclencheur manuel.
Comprendre le code
Le code source de cet exemple de code comprend les éléments suivants :
- Code source associé au script de configuration.
- Code source associé aux pipelines Cloud Build.
- Code source associé aux modèles Terraform.
Script de configuration
setup.sh
est le script de configuration qui exécute le processus d'amorçage et crée les composants du déploiement bleu-vert. Le script effectue les opérations suivantes :
opérations:
- Il active Cloud Build, Resource Manager, Compute Engine et Cloud Source Repositories.
- Il attribue le rôle IAM
roles/editor
au compte de service Cloud Build dans votre projet. Ce rôle est nécessaire pour que Cloud Build crée et configure les composants GitOps nécessaires au déploiement. - Attribue le rôle IAM
roles/source.admin
au compte de service Cloud Build de votre projet. Ce rôle est nécessaire au compte de service Cloud Build pour créer Cloud Source Repositories dans votre projet et cloner le contenu de l'exemple GitHub vers votre dépôt Cloud Source Repositories. Génère un pipeline Cloud Build nommé
bootstrap.cloudbuild.yaml
en ligne, qui :- Crée un dépôt dans Cloud Source Repositories.
- Il copie le code source de l'exemple de dépôt GitHub dans le dans Cloud Source Repositories.
- Crée les déclencheurs de compilation "apply" et "destroy".
Pipelines Cloud Build
apply.cloudbuild.yaml
et destroy.cloudbuild.yaml
sont les fichiers de configuration Cloud Build que le script de configuration utilise pour configurer les ressources du flux GitOps. apply.cloudbuild.yaml
contient deux étapes de compilation :
- Une étape de compilation
tf_apply build
qui appelle la fonctiontf_install_in_cloud_build_step
, qui installe Terraform.tf_apply
qui crée les ressources utilisées dans le flux GitOps. Les fonctionstf_install_in_cloud_build_step
ettf_apply
sont définies dansbash_utils.sh
, et l'étape de compilation utilise la commandesource
pour les appeler. - Étape de compilation
describe_deployment
qui appelle la fonctiondescribe_deployment
qui imprime les adresses IP des équilibreurs de charge.
destroy.cloudbuild.yaml
appelle tf_destroy
, qui supprime toutes les ressources
créé par tf_apply
.
Les fonctions tf_install_in_cloud_build_step
, tf_apply
,
describe_deployment
et tf_destroy
sont définis dans le fichier bash_utils.sh
.
Les fichiers de configuration de compilation utilisent la commande source
pour appeler les fonctions.
Le code suivant montre la fonction tf_install_in_cloud_build_step
définie dans bash_utils.sh
. Les fichiers de configuration de compilation appellent cette fonction pour :
pour installer Terraform à la volée. Il crée un bucket Cloud Storage pour
enregistrer l'état Terraform.
L'extrait de code suivant montre la fonction tf_apply
définie dans bash_utils.sh
. Il appelle d'abord terraform init
, qui charge tous les modules et les bibliothèques personnalisées, puis exécute terraform apply
pour charger les variables à partir du fichier main.tfvars
.
L'extrait de code suivant montre la fonction describe_deployment
définie dans bash_utils.sh
. Elle utilise gcloud compute addresses describe
pour extraire
les adresses IP des équilibreurs de charge
à l'aide de leur nom et les imprime.
L'extrait de code suivant montre la fonction tf_destroy
définie dans bash_utils.sh
. Il appelle terraform init
, qui charge tous les modules et les bibliothèques personnalisées, puis exécute terraform destroy
, qui décharge les variables Terraform.
Modèles Terraform
Vous trouverez tous les fichiers de configuration et variables Terraform dans
Dossier copy-of-gcp-mig-simple/infra/
.
main.tf
: fichier de configuration Terraformmain.tfvars
: ce fichier définit les variables Terraform.mig/
etsplitter/
: ces dossiers contiennent les modules qui définissent les équilibreurs de charge. Le dossiermig/
contient le fichier de configuration Terraform qui définit le MIG pour les équilibreurs de charge bleu et vert. Les MIG bleus et verts sont identiques. Ils sont donc définis une fois et instanciés pour les objets bleus et verts. Le fichier de configuration Terraform de l'équilibreur de charge de l'outil de fractionnement se trouve dans le dossiersplitter/
.
L'extrait de code suivant affiche le contenu de infra/main.tfvars
. Il
contient trois variables: deux qui déterminent la version de l'application à déployer.
dans les pools Bleu et Vert, et une variable pour la couleur active: Bleu ou
Vert. Les modifications apportées à ce fichier déclenchent le déploiement.
Voici un extrait de code de infra/main.tf
. Dans cet extrait:
- Une variable est définie pour le projet Google Cloud.
- Google est défini comme fournisseur Terraform.
- Une variable est définie pour l'espace de noms. Tous les objets créés par Terraform sont précédés de cette variable afin que plusieurs versions de l'application puissent être déployées dans le même projet et que les noms des objets ne se chevauchent pas.
- Les variables
MIG_VER_BLUE
,MIG_VER_BLUE
etMIG_ACTIVE_COLOR
sont pour les variables du fichierinfra/main.tfvars
.
L'extrait de code suivant de infra/main.tf
montre l'instanciation du module de séparateur. Ce module prend en charge la couleur active afin que l'équilibreur de charge de l'outil de fractionnement sache quel MIG déployer pour l'application.
L'extrait de code suivant de infra/main.tf
définit deux modules identiques
pour les MIG bleus et verts. Elle prend la couleur, le réseau et le sous-réseau
qui sont définis dans le module Splitter.
Le fichier splitter/main.tf
définit les objets créés pour le
le MIG Splitter. Voici un extrait de code de splitter/main.tf
qui contient la logique permettant de basculer entre le MIG vert et le MIG bleu. Il s'appuie sur
le service google_compute_region_backend_service
, qui peut acheminer le trafic vers
deux régions de backend: var.instance_group_blue
ou var.instance_group_green
.
capacity_scaler
définit la quantité de trafic à acheminer.
Le code suivant achemine 100% du trafic vers la couleur spécifiée, mais vous mettre à jour ce code pour le déploiement Canary afin d'acheminer le trafic vers un sous-ensemble les utilisateurs.
Le fichier mig/main.tf
définit les objets appartenant aux migrations bleues et vertes. L'extrait de code suivant de ce fichier définit l'instance Compute Engine
utilisé pour créer les pools de VM. Notez que cette instance
du modèle comporte la propriété de cycle de vie Terraform définie sur create_before_destroy
.
En effet, lors de la mise à jour de la version du pool, vous ne pouvez pas utiliser
pour créer la nouvelle version des pools lorsqu'elle est encore utilisée par
à la version précédente du pool. Toutefois, si l'ancienne version du pool est détruite avant la création du nouveau modèle, les pools seront indisponibles pendant un certain temps. Pour éviter ce scénario, nous définissons le cycle de vie Terraform sur
create_before_destroy
afin que la version la plus récente d'un pool de VM soit créée en premier ;
avant que l'ancienne version ne soit détruite.
Effectuer un nettoyage
Pour éviter que les ressources utilisées lors de ce tutoriel soient facturées sur votre compte Google Cloud, supprimez le projet contenant les ressources, ou conservez le projet et supprimez les ressources individuelles.
Supprimer des ressources individuelles
Supprimez les ressources Compute Engine créées par le déclencheur "apply" :
Ouvrez la page Déclencheurs de Cloud Build:
Dans le tableau Déclencheurs, recherchez la ligne correspondant à la commande destroy. puis cliquez sur Exécuter. Lorsque l'exécution du déclencheur est terminée, Les ressources créées par le déclencheur apply sont supprimées.
Supprimez les ressources créées lors du démarrage en exécutant la commande suivante dans la fenêtre de votre terminal :
bash <(curl https://raw.githubusercontent.com/GoogleCloudPlatform/cloud-build-samples/main/mig-blue-green/teardown.sh)
Supprimer le projet
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID
Étape suivante
- En savoir plus sur les déclencheurs de compilation
- Découvrez comment afficher la provenance de la compilation.