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 groupe multicible, et les cibles qui composent ce groupe 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 le déploiement 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 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 déploiement :
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 Cloud Deploy spécialisées suivantes :
multicibles
Une cible 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 faire référence au cluster ou au service d'exécution, elle fait référence à une ou plusieurs autres cibles à l'aide demultiTarget.targetIds.Cibles enfants
Une cible enfant est une cible référencée par une multicible en tant que
multiTarget.targetIds.Déploiements de contrôleurs
Un déploiement de contrôleur est un déploiement qui correspond à la multicible.
Pour en savoir plus sur ce que vous pouvez et ne pouvez pas faire avec un déploiement de contrôleur, consultez Limites.
-
Pour en savoir plus sur ce que vous pouvez et ne pouvez pas faire avec un déploiement enfant, consultez Limites.
Configurer le déploiement parallèle
Pour configurer le déploiement parallèle, vous devez définir une multicible et 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 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 de la multicible à l'aide de la propriétémultiTarget.targetIds. - Vous pouvez configurer le multitarget pour 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 multicible ou de celui par défaut. Pour en savoir plus, consultez Environnements d'exécution et déploiement parallèle.
Configurer le multicible
Une multicible est une cible unique identifiée comme une étape de votre pipeline de livraison, 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 ni anthosCluster.
La configuration d'une multicible est la même, quel que soit le moteur d'exécution sur lequel vous déployez.
Dans le fichier YAML de votre pipeline de déploiement 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 cette multitarget, qui est utilisé dans la propriété
stages.targetIdde la définition du pipeline de livraison.CHILD_TARGET1, CHILD_TARGET2,...CHILD_TARGETn sont les noms des cibles enfants vers lesquelles ce groupe multicible est déployé. Chaque nom correspond à la propriété
namedans la définition de la cible enfant.
La présence de la propriété multiTarget.targetIds fait de cette cible une 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 votre fichier YAML du pipeline de déploiement ou dans un fichier YAML distinct, 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.targetIdsde la définition multicible.La valeur de la propriété
gke.clustercorrespond au 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 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.
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 propriété
multiTarget.targetIdsde la définition multicible.La valeur de la propriété
run.locationcorrespond au 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 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.
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 :
CHILD_TARGET1 est le nom de cette cible enfant. Le nom correspond à un membre de la liste des cibles dans la propriété
multiTarget.targetIdsde la définition multicible.MEMBERSHIP_NAME est le nom que vous avez choisi lorsque vous avez enregistré le cluster dans un parc.
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 :
CHILD_TARGET1 est le nom de cette cible enfant. Le nom correspond à un membre de la liste des cibles dans la propriété
multiTarget.targetIdsde la définition multicible.CUSTOM_TARGET_TYPE_NAME est le nom du type de cible personnalisée utilisé par cette cible.
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 diffusion. 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 de répliques différent pour chaque cible enfant. Pour ce faire, vous devez inclure les paramètres et les valeurs dans la progression du pipeline de diffusion, ainsi que des libellés sur les cibles enfants à faire correspondre pour 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é une cible multicible et des cibles enfants, 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 diffusion est le même que celui de n'importe quel pipeline et cible Cloud Deploy, sauf que lorsqu'il atteint l'étape avec la multicible, Cloud Deploy crée un déploiement de contrôleur pour la 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'une même multicible doivent avoir la même durée d'exécution cible (par exemple, toutes les cibles GKE ou toutes les cibles Cloud Run).
Dans un pipeline de livraison, une cible enfant ne peut avoir qu'une seule cible multicible parente.
Un groupe multicible ne peut pas être sans enfant et ne peut pas se référencer lui-même ni un autre groupe multicible comme 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.
Si les cibles enfants sont des cibles personnalisées, elles doivent toutes faire référence au même
CustomTargetType.Les pools par défaut sont soumis à des limites de simultanéité, contrairement aux pools privés.
Lorsque vous déployez une cible multiple, tous les déploiements enfants sont déployés en même temps, dans la limite de la simultanéité de Cloud Build. Si vous avez plus de cibles enfants que cette limite, les jobs de déploiement pour certaines cibles ne s'exécuteront pas tant que d'autres ne seront pas terminés. Cela signifie que Cloud Deploy ne déploie pas sur toutes les cibles enfants en même temps, dans ce cas.
De plus, si les cibles incluent des jobs de validation, il est possible qu'un ou plusieurs de ces jobs de validation démarrent avant que l'application n'ait été déployée sur toutes les cibles enfants.
Si vous devez déployer simultanément sur plus de cibles que la limite spécifiée dans la documentation Cloud Build, vous avez deux options :
Demandez à augmenter le nombre de compilations simultanées que vous pouvez exécuter.
Configurez un pool privé et configurez vos cibles pour qu'elles utilisent ce pool.
Environnements d'exécution et déploiement parallèle
Chaque cible peut être configurée pour utiliser un environnement d'exécution non défini par défaut.
Si le groupe multicible possède un environnement d'exécution non défini par défaut, toutes les cibles enfants qui utilisent l'environnement d'exécution par défaut héritent de celui non défini 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 défini par défaut utilise cet environnement.
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 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 Google 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 le rollback multicible, comme décrit dans Effectuer un rollback d'une cible.
Approbations pour le déploiement en 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 multitarget. L'approbation ou le refus affectent 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 multiples, de vos cibles enfants, du déploiement du contrôleur et des déploiements enfants dans la console Google Cloud .
Lorsque vous affichez la liste des cibles pour un pipeline de diffusion donné, la multicible est listée dans les détails du pipeline de diffusion, mais pas les cibles enfants. Toutefois, lorsque vous consultez les détails d'une version, vous pouvez voir le déploiement du contrôleur et les déploiements enfants. Vous pouvez également consulter les déploiements de contrôleurs et d'enfants dans l'onglet Déploiements de la page d'informations sur le pipeline de livraison.
Dans l'outil d'inspection de versions, vous pouvez afficher et comparer les 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.
Étapes suivantes
Essayez le guide de démarrage rapide : déployer une application sur plusieurs cibles à la fois.
Découvrez comment utiliser les paramètres de déploiement.
Consultez le schéma de configuration de la cible.
Consultez l'article Architecture du service Cloud Deploy.