Déployer sur plusieurs cibles en même temps

À l'aide de Cloud Deploy, vous pouvez effectuer le déploiement sur une cible configurée pour représente plusieurs cibles, et votre application est déployée sur ces cibles parallèle (simultanément). La cible que vous identifiez comme une étape de votre pipeline est appelée 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, y compris Google Kubernetes Engine, Cloud Run et GKE Enterprise.

Pourquoi déployer en 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 de déployer car il n'y a pas de progression (par exemple, entre la préproduction et la production).

Ce déploiement parallèle peut faire partie d'une progression normale du pipeline de diffusion :
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 :

  • multicibles

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

  • Cibles enfants

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

  • Déploiements de contrôleurs

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

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

  • Déploiements enfants

    Pour en savoir plus sur les actions autorisées et non autorisées avec un déploiement enfant, consultez la section Limites.

Configurer le déploiement parallèle

Pour mettre en place un déploiement parallèle, vous devez définir une stratégie multicible et le le nombre de cibles enfants dont vous avez besoin (dans la limite). Les définitions de cibles sont les mêmes que pour toutes les cibles, à l'exception des éléments suivants :

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

Les cibles multiples et enfants peuvent inclure des cibles personnalisées environnement d'exécution de configuration. Si une cible enfant ne spécifie pas d'environnement d'exécution, elle hérite celui défini dans la définition multicible, ou la valeur par défaut. Voir Environnements d'exécution et déploiement parallèle pour en savoir plus.

Configurer la multicible

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

La configuration multicible inclut la propriété multiTarget. Une multicible ne peut pas avoir les propriétés gke, run ou anthosCluster. La configuration d'une cible multiple est la même, quel que soit l'environnement d'exécution sur lequel vous déployez.

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 multicible, soit utilisée dans la définition du pipeline de livraison, stages.targetId.

  • CHILD_TARGET1, CHILD_TARGET2,...CHILD_TARGETn sont les les noms des cibles enfants sur lesquelles cette cible multicible est déployée. 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 une cible multicible.

Configurer les cibles enfants

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

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

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 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 en fait une cible enfant est qu'elle est référencée par le multiTarget.targetIds dans le 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. La "name" correspond à un membre de la liste des cibles dans le multiTarget.targetIds dans la définition multicible.

  • La valeur de la propriété run.location correspond au nom de la ressource Service Cloud Run auquel cette cible fait référence, y compris le 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 fait de cette cible 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 fait de cette cible une cible enfant est qu'elle est référencée par la propriété multiTarget.targetIds dans le groupe multicible.

Transmettre des paramètres de déploiement aux cibles

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

Par exemple, vous pouvez souhaiter un nombre de réplicas différent pour chaque cible enfant. Pour ce faire, vous devez inclure les paramètres et les valeurs dans l'attribut la progression du pipeline, ainsi que des étiquettes sur les cibles enfants à faire correspondre à chaque paire paramètre/valeur.

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

Créer la version

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

Le cycle de vie du pipeline de diffusion est le même que celui de tout pipeline et de toutes les cibles Cloud Deploy, sauf qu'à l'étape du groupe multicible, Cloud Deploy crée un déploiement de 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 de déploiement Cloud 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 100 cibles enfants.

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

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

  • 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 comme cible enfant.

  • Vous ne pouvez pas utiliser une cible enfant plus d'une fois dans un même pipeline de diffusion, 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 déployez vers plusieurs cibles, tous les déploiements enfants sont déployés en même temps, jusqu'à 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écutent pas tant que d'autres ne sont pas terminées. Dans ce cas, Cloud Deploy ne déploie pas les applications sur toutes les cibles enfants en même temps.

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

    Si vous devez pouvoir déployer simultanément 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 différent de celui par défaut.

  • Si l'environnement d'exécution multicible est différent de celui par défaut, toutes les cibles enfants à l'aide de l'environnement d'exécution par défaut, héritent de l'environnement par défaut multicible

  • Si la cible multicible utilise l'environnement d'exécution par défaut, toute cible enfant configuré avec un environnement d'exécution différent de celui par défaut utilise autre que celui par défaut.

Ces règles permettent de propager plus facilement les 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 pouvant le personnaliser 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 Google Cloud Deploy.

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

Si vous devez annuler un déploiement à partir de plusieurs cibles parallèles, annulez le déploiement multicible, comme décrit dans la section Annuler une cible.

Approbations pour le déploiement parallèle

Comme pour toute cible, vous pouvez configurer votre déploiement parallèle pour qu'il exige approbations. Avec le déploiement parallèle, vous ne pouvez configurer l'approbation que pour multicible. L'approbation ou le refus affecte toutes les cibles enfants ensemble.

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

Vous pouvez afficher les détails de vos cibles enfants et multicibles, ainsi que déploiement et les déploiements enfants dans la console Google Cloud.

Lorsque vous consultez la liste des cibles d'un pipeline de diffusion donné, dans les détails du pipeline de diffusion, le groupe multicible est listé, mais les cibles enfants ne le sont pas. 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 consulter les déploiements du contrôleur et des enfants dans l'onglet Déploiements de la page "Détails du pipeline de livraison".

Dans l'outil d'inspection des versions, vous pouvez afficher et comparer les fichiers manifestes affichés pour les déploiements enfants.

Utiliser un 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. Voir Utiliser le déploiement parallèle avec une stratégie de déploiement Canary pour en savoir plus.

Étape suivante