Déployer sur plusieurs cibles à la fois

Avec Cloud Deploy, vous pouvez effectuer un déploiement sur une cible configurée pour représenter plusieurs cibles. Votre application est ensuite déployée sur ces cibles en parallèle (simultanément). La cible que vous identifiez en tant qu'étape de votre pipeline est appelée multi-target, tandis que les cibles incluses dans cette phase sont appelées cibles enfants.

Vous pouvez utiliser le déploiement en parallèle avec n'importe quel type de cible compatible avec Cloud Deploy, y compris Google Kubernetes Engine, Cloud Run et GKE Enterprise.

Pourquoi déployer en parallèle ?

Vous pouvez utiliser le déploiement en parallèle, par exemple, pour déployer votre application sur plusieurs cibles de production. Dans ce cas, vous n'avez pas besoin d'effectuer le déploiement sur chaque cible à la suite, car il n'y a pas de progression (par exemple, du développement à la préproduction en passant par la production).

Ce déploiement parallèle peut faire partie de la progression d'un pipeline de livraison normal:
dev -> staging -> prod [prod1, prod2, prod3, prod4, ...].

Ressources Cloud Deploy utilisées pour le déploiement en parallèle

Le déploiement parallèle utilise les ressources spécialisées Cloud Deploy suivantes:

  • multicibles

    Un groupe multicible est une cible configurée avec la propriété multiTarget, au niveau supérieur du fichier YAML de la configuration cible. Au lieu de référencer le cluster d'exécution ou le service, il fait référence à une ou plusieurs autres cibles à l'aide de multiTarget.targetIds.

  • Cibles enfants

    Une cible enfant est toute cible référencée par un groupe multicible en tant que multiTarget.targetIds. L'enfant doit également faire référence à un type de cible compatible (Google Kubernetes Engine, GKE Enterprise ou Cloud Run).

  • Déploiements du contrôleur

    Un déploiement de contrôleur est un déploiement qui correspond à un groupe multicible.

    Pour en savoir plus sur les actions possibles et interdites lors du déploiement d'un contrôleur, consultez la section Limites.

  • Déploiements enfants

    Consultez la section Limites pour en savoir plus sur les actions réalisables et interdites avec un déploiement enfant.

Configurer un déploiement en parallèle

La configuration d'un déploiement en parallèle consiste à définir un groupe multicible et le nombre de cibles enfants dont vous avez besoin (dans la limite définie). Les définitions des cibles sont les mêmes que pour toutes les cibles, à l'exception des suivantes:

  • Les multicibles incluent la propriété multiTarget.
  • Les cibles enfants n'incluent pas la propriété multiTarget, mais sont référencées à partir du groupe multicible à l'aide de la propriété multiTarget.targetIds.
  • Vous pouvez configurer le groupe multicible pour approbation, mais pas les cibles enfants, qui ne peuvent pas inclure requireApproval:true.

Les cibles multicibles et les cibles enfants peuvent inclure des configurations d'environnement d'exécution personnalisées. Si une cible enfant ne spécifie pas d'environnement d'exécution, elle hérite de celui défini dans la définition multicible, ou de l'environnement par défaut. Pour en savoir plus, consultez la section Environnements d'exécution et déploiement en parallèle.

Configurer le groupe multicible

Une cible multiple est une cible unique identifiée comme une étape dans votre pipeline de livraison, mais pointant vers une ou plusieurs cibles enfants.

La configuration multicible inclut la propriété multiTarget. Un groupe multicible ne peut pas avoir les propriétés gke, run ou anthosCluster. La configuration d'un groupe multicible est la même, quel que soit l'environnement d'exécution vers lequel vous effectuez le déploiement.

Dans le fichier YAML de votre pipeline de livraison ou dans un fichier YAML distinct, créez la définition de la cible de base, y compris multiTarget:

apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
 name: TARGET_NAME
description: TARGET_DESCRIPTION
multiTarget:
 targetIds: [ CHILD_TARGET1, CHILD_TARGET2, CHILD_TARGETn ]

Dans ce fichier YAML...

  • TARGET_NAME est le nom de ce groupe multicible, utilisé dans la définition du pipeline de livraison, propriété stages.targetId.

  • CHILD_TARGET1, CHILD_TARGET2,...CHILD_TARGETn sont les noms des cibles enfants sur lesquelles ce groupe multicible est déployé. Chaque nom correspond à la propriété name de la définition de la cible enfant.

La présence de la propriété multiTarget.targetIds transforme cette cible en multicible.

Configurer les cibles enfants

Pour chaque cible identifiée en tant qu'enfant dans votre configuration multicible, configurez une autre cible en tant que cible enfant:

Dans votre fichier YAML de pipeline de livraison ou dans un fichier YAML distinct, créez la définition de cible de base:

GKE

apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
 name: CHILD_TARGET1
description: TARGET_DESCRIPTION
gke:
 cluster: projects/PROJECT_ID/locations/REGION/clusters/CLUSTER_NAME

Dans ce fichier YAML...

  • CHILD_TARGET1 est le nom de cette cible enfant. Le nom correspond à un membre de la liste des cibles de la propriété multiTarget.targetIds de la définition multicible.

  • La valeur de la propriété gke.cluster correspond au nom de la ressource du cluster auquel cette cible fait référence, y compris l'ID du projet, la région et le nom du cluster.

Cette cible est configurée de la même manière qu'une cible GKE standard. La seule chose qui la rend une cible enfant est qu'elle est référencée par la propriété multiTarget.targetIds dans le groupe multicible.

Cloud Run

apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
 name: CHILD_TARGET1
description: TARGET_DESCRIPTION
run:
 location: projects/PROJECT_ID/locations/REGION

Dans ce fichier YAML...

  • CHILD_TARGET1 est le nom de cette cible enfant. Le nom correspond à un membre de la liste des cibles de la propriété multiTarget.targetIds de la définition multicible.

  • La valeur de la propriété run.location correspond au nom de la ressource du service Cloud Run auquel cette cible fait référence, y compris l'ID du projet et la région.

Cette cible est configurée de la même manière qu'une cible Cloud Run standard. La seule chose qui en fait une cible enfant est qu'elle est référencée par la propriété multiTarget.targetIds dans le groupe multicible.

GKE Enterprise

apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
 name: CHILD_TARGET1
description: TARGET_DESCRIPTION
anthosCluster:
 membership: projects/PROJECT_ID/locations/global/memberships/MEMBERSHIP_NAME

Dans ce fichier YAML...

Cette cible est configurée de la même manière qu'une cible GKE Enterprise standard. La seule chose qui en fait une cible enfant est qu'elle est référencée par la propriété multiTarget.targetIds dans le groupe multicible.

Créer la version

Une fois un groupe multicible et des cibles enfants configurés, créez le pipeline de livraison et les ressources cibles, puis créez une version, comme d'habitude.

Le cycle de vie du pipeline de livraison est le même qu'avec n'importe quel pipeline et cible Cloud Deploy, sauf que lorsqu'il atteint l'étape avec le groupe multicible, Cloud Deploy crée un déploiement de contrôleur pour la cible multicible et un déploiement enfant pour déployer l'application sur chaque cible enfant.

Les messages Pub/Sub en réponse aux opérations Cloud Deploy font la distinction entre les déploiements de contrôleurs et les déploiements enfants.

Limites

  • Un groupe multicible ne peut pas comporter plus de 50 cibles enfants.

  • Toutes les cibles enfants d'un même groupe multicible doivent avoir le même environnement d'exécution cible (tous les clusters GKE ou GKE Enterprise, par exemple).

  • Dans un pipeline de livraison, une cible enfant ne peut avoir qu'un seul groupe multicible parent.

  • Un groupe multicible ne peut pas être sans enfants. Il ne peut pas se référencer, ni référencer un autre groupe multicible en tant que cibles enfants.

  • Vous ne pouvez pas utiliser une cible enfant plusieurs fois dans un même pipeline de livraison, mais vous pouvez la réutiliser dans un autre pipeline.

  • Les pools par défaut sont soumis à des limites de simultanéité, contrairement aux pools privés.

    Lorsque vous effectuez un déploiement sur un groupe multicible, tous les déploiements enfants sont déployés en même temps, dans la limite de simultanéité de Cloud Build. Si le nombre de cibles enfants dépasse cette limite, les tâches de déploiement de certaines cibles ne s'exécutent pas tant que les autres ne sont pas terminées. Par conséquent, Cloud Deploy ne se déploie pas simultanément sur toutes les cibles enfants, dans ce cas.

    De plus, si les cibles incluent des tâches de validation, il est possible qu'une ou plusieurs de ces tâches de vérification démarrent avant que l'application ne soit déployée sur toutes les cibles enfants.

    Si vous devez pouvoir effectuer des déploiements simultanés sur un nombre de cibles supérieur à la limite spécifiée dans la documentation Cloud Build, deux options s'offrent à vous:

Environnements d'exécution et déploiement parallèle

Chaque cible peut être configurée pour utiliser un environnement d'exécution autre que celui par défaut.

  • Si le groupe multicible possède un environnement d'exécution autre que celui par défaut, toutes les cibles enfants utilisant l'environnement d'exécution par défaut héritent de celui défini par défaut.

  • Si le groupe multicible utilise l'environnement d'exécution par défaut, toute cible enfant configurée avec un environnement d'exécution autre que celui par défaut l'utilise.

Ces règles facilitent la propagation des environnements d'exécution vers les cibles enfants à partir d'un groupe multicible. Vous n'avez donc pas besoin de définir ni de modifier l'environnement d'exécution pour chaque cible enfant, tout en vous permettant de personnaliser l'environnement d'exécution pour une ou plusieurs cibles enfants si nécessaire.

Pour en savoir plus sur les environnements d'exécution dans Cloud Deploy, consultez la page Utiliser les environnements d'exécution Google Cloud Deploy.

Effectuer un rollback d'un déploiement en parallèle

Si vous devez effectuer un rollback d'un déploiement à partir de plusieurs cibles parallèles, effectuez un rollback de la cible multicible, comme décrit dans la section Effectuer un rollback d'une cible.

Approbations pour un déploiement en parallèle

Comme pour toutes les cibles, vous pouvez configurer votre déploiement parallèle pour qu'il exige des approbations. Toutefois, avec un déploiement en parallèle, vous ne pouvez configurer l'approbation que pour le groupe multicible. L'approbation ou le refus affecte toutes les cibles enfants.

Afficher le déploiement en parallèle dans la console Google Cloud

Vous pouvez afficher les détails de vos cibles enfants, multicibles, et du déploiement du contrôleur et des déploiements enfants dans la console Google Cloud.

Lorsque vous affichez la liste des cibles d'un pipeline de livraison donné, dans les détails du pipeline de livraison, le groupe multicible est indiqué, mais pas les cibles enfants. Lorsque vous consultez les détails de la version, vous pouvez toutefois voir le déploiement du contrôleur et les déploiements enfants. Vous pouvez également voir les déploiements du contrôleur et des enfants dans l'onglet Déploiements de la page d'informations du pipeline de livraison.

L'outil d'inspection de versions vous permet d'afficher et de différencier les fichiers manifestes des déploiements enfants.

Transmettre des paramètres de déploiement aux cibles

Vous pouvez différencier les cibles enfants en incluant des paramètres dans le fichier manifeste et des valeurs dans la définition de votre pipeline de livraison. Ces valeurs peuvent être appliquées séparément aux différents fichiers manifestes, en fonction de la correspondance des libellés sur les cibles correspondantes.

Par exemple, vous pouvez choisir un nombre différent d'instances répliquées pour chaque cible enfant. Pour ce faire, vous devez inclure les paramètres et les valeurs dans la progression du pipeline de livraison, ainsi que les libellés des cibles enfants à faire correspondre à chaque paire paramètre/valeur.

Apprenez-en plus sur les paramètres de déploiement.

Utiliser un déploiement en parallèle avec une stratégie de déploiement

Vous pouvez procéder au déploiement en parallèle lorsque vous utilisez une stratégie de déploiement Canary. Pour en savoir plus, consultez la page Utiliser le déploiement en parallèle avec une stratégie de déploiement Canary.

Étapes suivantes