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 alors déployée sur ces cibles en parallèle (simultanément). La cible que vous identifiez comme une étape de votre pipeline est appelée un groupe multicible, et les cibles qu'elle comprend sont appelées cibles enfants.

Vous pouvez utiliser le déploiement parallèle avec n'importe quel type de cible compatible avec Cloud Deploy.

Pourquoi utiliser le déploiement parallèle ?

Vous pouvez utiliser le déploiement 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 successivement, car il n'y a pas de progression (par exemple, de l'environnement de développement à l'environnement de préproduction, puis à l'environnement de production).

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

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

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

  • Groupes multicibles

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

  • Cibles enfants

    Une cible enfant est une cible référencée par un groupe multicible en tant que multiTarget.targetIds.

  • Déploiements du contrôleur

    Un déploiement du contrôleur est un déploiement qui correspond au groupe multicible.

    Pour en savoir plus sur ce que vous pouvez et ne pouvez pas faire avec un déploiement du contrôleur, consultez la section Limites.

  • Déploiements enfants

    Pour en savoir plus sur ce que vous pouvez et ne pouvez pas faire avec un déploiement enfant, consultez la section Limites.

Configurer le déploiement parallèle

Pour configurer le déploiement parallèle, vous devez définir un groupe multicible et le nombre de cibles enfants dont vous avez besoin (dans la limite autorisée). Les définitions de cibles sont les mêmes que pour toutes les cibles, à l'exception des points suivants :

  • Les groupes 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 l'approbation, mais pas les cibles enfants, qui ne peuvent pas inclure requireApproval:true.

Les groupes 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 du groupe multicible ou de celui par défaut. Pour en savoir plus, consultez Environnements d'exécution et déploiement parallèle.

Configurer le groupe multicible

Un groupe multicible est une cible unique identifiée comme une étape de votre pipeline de livraison, mais qui pointe vers une ou plusieurs cibles enfants.

La configuration du groupe multicible inclut la propriété multiTarget. Un groupe multicible ne peut pas avoir les propriétés gke, run ni anthosCluster. La configuration d'un groupe multicible est la même, quel que soit l'environnement d'exécution sur 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 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, qui est utilisé dans la définition du pipeline de livraison, stages.targetId propriété.

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

La présence de la propriété multiTarget.targetIds fait de cette cible un groupe multicible.

Configurer les cibles enfants

Pour chaque cible identifiée comme enfant dans la configuration de votre groupe multicible, configurez une autre cible en tant que cible enfant :

Dans le fichier YAML de votre 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 dans la multiTarget.targetIds propriété dans la définition du groupe multicible.

  • La valeur de la propriété gke.cluster est le nom de 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 en fait 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 dans la multiTarget.targetIds propriété dans la définition du groupe multicible.

  • La valeur de la propriété run.location est le nom de 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.

Clusters associés à GKE

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...

Cible personnalisée

apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
 name: CHILD_TARGET1
description: TARGET_DESCRIPTION
customTarget:
  customTargetType: CUSTOM_TARGET_TYPE_NAME

Dans ce fichier YAML...

Transmettre des paramètres de déploiement aux cibles

Vous pouvez différencier les cibles enfants en incluant des paramètres dans votre 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 souhaiter un nombre différent de répliques 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 des libellés sur les cibles enfants pour qu'ils correspondent à chaque paire paramètre-valeur.

En savoir plus sur les paramètres de déploiement.

Créer la version

Une fois le groupe multicible et les 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 que pour 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 du contrôleur pour le groupe 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 du contrôleur et les déploiements enfants.

Limites

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

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

  • 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 enfant, et il ne peut pas se référencer lui-même ni un autre groupe multicible en tant que cibles enfants.

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

  • Si les cibles enfants sont des cibles personnalisées, elles doivent toutes référencer le même CustomTargetType.

  • Les pools par défaut ont 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 vous avez plus de cibles enfants que cette limite, les tâches de déploiement de certaines cibles ne s'exécuteront pas tant que d'autres ne seront pas terminées. Cela signifie que Cloud Deploy n'effectue pas le déploiement sur toutes les cibles enfants en même temps 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 validation démarrent avant que l' application n'ait été déployée sur toutes les cibles enfants.

    Si vous avez besoin de pouvoir effectuer un déploiement simultané sur plus de cibles que la limite spécifiée dans la documentation Cloud Build, vous avez deux options :

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

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

  • Si le groupe multicible possède un environnement d'exécution non par défaut, toutes les cibles enfants qui utilisent l'environnement d'exécution par défaut héritent de celui non par défaut du groupe multicible.

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

Ces règles facilitent la propagation des environnements d'exécution aux 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 Utiliser les environnements d'exécution Cloud Deploy.

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

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

Approbations pour le déploiement parallèle

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

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

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

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 répertorié, mais pas les cibles enfants. Toutefois, lorsque vous affichez les détails de la version, vous pouvez voir le déploiement du contrôleur et les déploiements enfants. Vous pouvez également voir les déploiements du contrôleur et les déploiements enfants répertoriés dans l'onglet Déploiements de la page d'informations du pipeline de livraison.

Dans l'inspecteur de version, vous pouvez afficher et comparer les fichiers manifestes rendus pour les déploiements enfants.

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

Vous pouvez effectuer un déploiement en parallèle lorsque vous utilisez une stratégie de déploiement Canary. Pour en savoir plus, consultez Utiliser le déploiement parallèle avec une stratégie de déploiement Canary.

Étape suivante