Esegui il deployment su più destinazioni contemporaneamente

Con Cloud Deploy puoi eseguire il deployment in una destinazione configurata per rappresentare più destinazioni di cui viene eseguito il deployment dell'applicazione in queste destinazioni in parallelo (contemporaneamente). Il target identificato come fase della pipeline è chiamato multi-target, mentre i target inclusi in più target sono chiamati target secondari.

Puoi utilizzare il deployment parallelo con qualsiasi tipo di target supportato da Cloud Deploy, tra cui Google Kubernetes Engine, Cloud Run e GKE Enterprise.

Perché il deployment parallelo

Puoi utilizzare il deployment parallelo, ad esempio, per eseguire il deployment dell'applicazione in più target di produzione. In questo caso, non è necessario eseguire il deployment in ciascun target in successione, perché non è previsto alcun avanzamento (ad esempio, dallo sviluppo alla gestione temporanea fino alla produzione).

E questo deployment parallelo può far parte di una normale avanzamento della pipeline di distribuzione:
dev -> staging -> prod [prod1, prod2, prod3, prod4, ...].

Risorse di Cloud Deploy utilizzate per il deployment parallelo

Il deployment parallelo utilizza le seguenti risorse specializzate di Cloud Deploy:

  • target multipli

    Un target multiplo è una destinazione configurata con la proprietà multiTarget, al livello più alto del file YAML di configurazione di destinazione, che, anziché fare riferimento al cluster o al servizio di runtime, fa riferimento a uno o più altri target utilizzando multiTarget.targetIds.

  • Target figlio

    Un target figlio è qualsiasi target a cui un target multiplo fa riferimento multiTarget.targetIds. Il file secondario deve inoltre fare riferimento a un tipo di destinazione supportato (Google Kubernetes Engine, GKE Enterprise o Cloud Run.

  • Lanci del controller

    Un'implementazione del controller è un'implementazione che corrisponde al target multiplo.

    Per ulteriori informazioni sulle operazioni consentite e non consentite con l'implementazione di un controller, consulta la sezione Limitazioni.

  • Implementazioni secondarie

    Per saperne di più sulle operazioni che puoi o non puoi fare con un'implementazione figlio, consulta la sezione Limitazioni.

Configura il deployment parallelo

La configurazione del deployment parallelo consiste nella definizione di un target multiplo e il numero di target figlio necessari (fino al limite). Le definizioni di target sono le stesse di tutti i target, ad eccezione di quanto segue:

  • I target multipli includono la proprietà multiTarget.
  • I target secondari non includono la proprietà multiTarget, ma vengono utilizzati come riferimento dal target multiplo che utilizza la proprietà multiTarget.targetIds.
  • Puoi configurare il target multiplo per l'approvazione, ma non i target secondari, che non possono includere requireApproval:true.

I target multipli e i target figlio possono includere configurazioni di ambiente di esecuzione personalizzate. Se un target figlio non specifica un ambiente di esecuzione, eredita quello definito nella definizione di target multiplo o quello predefinito. Per ulteriori dettagli, consulta Ambienti di esecuzione e deployment parallelo.

Configura il target multiplo

Un target multiplo è un singolo target identificato come una fase nella pipeline di pubblicazione, ma che punta a uno o più target figlio.

La configurazione di più target include la proprietà multiTarget. Un target multiplo non può avere le proprietà gke, run o anthosCluster. La configurazione per un target multiplo è la stessa indipendentemente dal runtime in cui stai eseguendo il deployment.

Nel file YAML della pipeline di distribuzione o in un file YAML separato, crea la definizione di destinazione di base, che include multiTarget:

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

In questo YAML...

  • TARGET_NAME è il nome di questo target multiplo, che viene utilizzato nella definizione della pipeline di distribuzione, nella proprietà stages.targetId.

  • CHILD_TARGET1, CHILD_TARGET2,...CHILD_TARGETn sono i nomi del target figlio in cui viene eseguito il deployment di questo target multiplo. Ogni nome corrisponde alla proprietà name nella definizione del target figlio.

La presenza della proprietà multiTarget.targetIds rende questo target un target multiplo.

Configura le destinazioni figlio

Per ogni destinazione identificata come figlio nella configurazione con più target, configura un'altra destinazione come target figlio:

Nel file YAML della pipeline di distribuzione o in un file YAML separato, crea la definizione di destinazione di 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

In questo YAML...

  • CHILD_TARGET1 è il nome di questo target figlio. Il nome corrisponde a un membro nell'elenco dei target nella proprietà multiTarget.targetIds nella definizione di più target.

  • Il valore della proprietà gke.cluster è il nome della risorsa del cluster a cui si riferisce questa destinazione, inclusi l'ID progetto, la regione e il nome del cluster.

Questa destinazione è configurata come una destinazione GKE standard. L'unica cosa che rende questo target figlio è che fa riferimento alla proprietà multiTarget.targetIds nel target multiplo.

Cloud Run

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

In questo YAML...

  • CHILD_TARGET1 è il nome di questo target figlio. Il nome corrisponde a un membro nell'elenco dei target nella proprietà multiTarget.targetIds nella definizione di più target.

  • Il valore della proprietà run.location è il nome della risorsa del servizio Cloud Run a cui fa riferimento questo target, inclusi l'ID progetto e la regione.

Questo target è configurato come un target Cloud Run standard. L'unica cosa che rende questo target secondario è che la proprietà multiTarget.targetIds nel target multiplo fa riferimento a questa.

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

In questo YAML...

Questa destinazione è configurata come un target GKE Enterprise standard. L'unica cosa che rende questo target secondario è che la proprietà multiTarget.targetIds nel target multiplo fa riferimento a questa.

Crea la release

Dopo aver configurato target multipli e figlio, crea la pipeline di distribuzione e le risorse di destinazione, quindi crea una release, come di consueto.

Il ciclo di vita della pipeline di distribuzione è lo stesso di qualsiasi pipeline e target di Cloud Deploy, tranne per il fatto che quando arriva alla fase con il target multiplo, Cloud Deploy crea un'implementazione del controller per il target multiplo e un'implementazione figlio per eseguire il deployment dell'applicazione in ogni target figlio.

I messaggi Pub/Sub in risposta alle operazioni di Cloud Deploy distinguiscono le implementazioni del controller e quelle figlio.

Limitazioni

  • Un target multiplo non può avere più di 50 target secondari.

  • Tutti i target figlio di un singolo target multiplo devono avere lo stesso runtime di destinazione (ad esempio tutto GKE o GKE Enterprise).

  • All'interno di una pipeline di distribuzione, un target figlio può avere un solo target multiplo padre.

  • Un target multiplo non può essere privo di elementi secondari e non può fare riferimento a se stesso o a un altro target multiplo come target figlio.

  • Non puoi utilizzare un target figlio più di una volta in una singola pipeline di distribuzione, ma puoi riutilizzarlo in un'altra pipeline.

  • I pool predefiniti hanno limiti di contemporaneità, ma i pool privati no.

    Quando esegui il deployment in un target multiplo, il deployment di tutte le implementazioni figlio viene eseguito contemporaneamente, fino al limite di contemporaneità di Cloud Build. Se hai più target figlio rispetto a questo limite, i job di deployment per alcune destinazioni non verranno eseguiti fino al completamento di altre, il che significa che Cloud Deploy non esegue il deployment in tutte le destinazioni figlio contemporaneamente, in questo caso.

    Inoltre, se le destinazioni includono job di verifica, è possibile che uno o più di questi job di verifica vengano avviati prima che sia stato eseguito il deployment dell'applicazione in tutte le destinazioni figlio.

    Se devi poter eseguire il deployment contemporaneamente su più destinazioni rispetto al limite specificato nella documentazione di Cloud Build, hai due opzioni:

Ambienti di esecuzione e deployment parallelo

Ogni destinazione può essere configurata in modo da utilizzare un ambiente di esecuzione non predefinito.

  • Se il target multiplo ha un ambiente di esecuzione non predefinito, tutti i target figlio che utilizzano l'ambiente di esecuzione predefinito ereditano quello non predefinito dal target multiplo

  • Se il target multiplo utilizza l'ambiente di esecuzione predefinito, qualsiasi target figlio configurato con un ambiente di esecuzione non predefinito lo utilizza.

Queste regole semplificano la propagazione degli ambienti di esecuzione alle destinazioni figlio da un target multiplo, quindi non devi definire o modificare l'ambiente di esecuzione per ogni target figlio, ma puoi comunque personalizzare l'ambiente di esecuzione per una o più destinazioni figlio, se necessario.

Consulta Utilizzo degli ambienti di esecuzione di Google Cloud Deploy per ulteriori informazioni sugli ambienti di esecuzione in Cloud Deploy.

Esegui il rollback di un deployment parallelo

Se devi eseguire il rollback di un deployment da più destinazioni parallele, esegui il rollback del target multiplo, come descritto in Eseguire il rollback di una destinazione.

Approvazioni per il deployment parallelo

Come per qualsiasi destinazione, puoi configurare il deployment parallelo in modo che richieda approvazioni. Con il deployment parallelo, tuttavia, puoi configurare l'approvazione solo per il target multiplo. L'approvazione o il rifiuto interessa tutti i target secondari insieme.

Visualizza il deployment parallelo nella console Google Cloud

Puoi visualizzare i dettagli relativi a target multipli, target figlio, implementazione del controller e implementazioni secondarie nella console Google Cloud.

Quando visualizzi l'elenco dei target per una determinata pipeline di distribuzione, in Dettagli pipeline di distribuzione viene elencato il target multiplo, ma non i target secondari. Quando visualizzi i dettagli della release, tuttavia, puoi vedere l'implementazione del controller e le implementazioni secondarie. Puoi anche visualizzare le implementazioni controller e secondarie elencate nella scheda Implementazioni della pagina dei dettagli della pipeline di distribuzione.

Nello strumento di controllo delle release puoi visualizzare e differenziare i manifest sottoposti a rendering per le implementazioni secondarie.

Passare i parametri di deployment ai target

Puoi differenziare i target figlio includendo parametri nel file manifest e valori nella definizione della pipeline di distribuzione. Questi valori possono essere applicati separatamente ai manifest separati in base alla corrispondenza delle etichette nei target corrispondenti.

Ad esempio, potresti volere un numero diverso di repliche per ogni target figlio. Per farlo, devi includere i parametri e i valori nell'avanzamento della pipeline di pubblicazione, insieme alle etichette sui target secondari da associare per ogni coppia parametro-valore.

Scopri di più sui parametri di deployment.

Usa il deployment parallelo con una strategia di deployment

Puoi eseguire il deployment in parallelo quando utilizzi una strategia di deployment canary. Per ulteriori informazioni, consulta Utilizzare il deployment parallelo con una strategia di deployment canary.

Passaggi successivi