Esegui il deployment su più destinazioni contemporaneamente

Con Cloud Deploy, puoi eseguire il deployment in una destinazione configurata per rappresentare più destinazioni e il deployment dell'applicazione nelle destinazioni è parallelo (contemporaneamente). Il target che identifichi come fase nella pipeline è chiamato multi-target, mentre quelli che comprende più target sono chiamati target secondari.

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

Perché eseguire il deployment parallelo

Puoi utilizzare il deployment parallelo, ad esempio per eseguire il deployment dell'applicazione in più destinazioni di produzione. In questo caso, non è necessario eseguire il deployment su ogni target in successione, perché non c'è progressione (ad esempio, dallo sviluppo alla gestione temporanea e alla produzione).

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

Risorse Cloud Deploy utilizzate per il deployment parallelo

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

  • più target

    Un target multiplo è un target configurato con la proprietà multiTarget al livello superiore del file YAML della configurazione di destinazione e, 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 secondario è qualsiasi target a cui fa riferimento un multi-target come multiTarget.targetIds. L'account figlio deve inoltre fare riferimento a un tipo di destinazione supportato (Google Kubernetes Engine, GKE Enterprise o Cloud Run.

  • Implementazioni del controller

    L'implementazione del controller è un'implementazione che corrisponde a un target multiplo.

    Consulta la sezione Limitazioni per ulteriori informazioni su cosa puoi o non puoi fare con l'implementazione di un controller.

  • Implementazioni secondarie

    Consulta la sezione Limitazioni per ulteriori informazioni sulle azioni che puoi o meno eseguire con un'implementazione figlio.

Configura un deployment parallelo

La configurazione del deployment parallelo prevede la definizione di un target multiplo e del numero di destinazioni figlio necessarie (fino al limite). Le definizioni delle destinazioni sono le stesse di tutte le destinazioni, ad eccezione di quanto segue:

  • I target multipli includono la proprietà multiTarget.
  • I target secondari non includono la proprietà multiTarget, ma viene fatto riferimento dal target multiplo utilizzando la proprietà multiTarget.targetIds.
  • Puoi configurare i target multipli per l'approvazione, ma non i target secondari, che non possono includere requireApproval:true.

I target multipli e secondari possono includere configurazioni dell'ambiente di esecuzione personalizzate. Se un target figlio non specifica un ambiente di esecuzione, eredita quello definito nella definizione di target multipli 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 fase nella pipeline di distribuzione, ma che rimanda a una o più destinazioni 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 viene eseguito il deployment.

Nel file YAML della pipeline di distribuzione o in un file YAML separato, crea la definizione di destinazione di base, incluso 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, utilizzato nella proprietà stages.targetId della definizione della pipeline di distribuzione.

  • CHILD_TARGET1, CHILD_TARGET2,...CHILD_TARGETn sono i nomi del target secondario in cui esegue il deployment di questo multi-target. Ogni nome corrisponde alla proprietà name nella definizione del target secondario.

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

Configurare i target figlio

Per ogni target identificato come secondario nella configurazione con più target, configura un altro target come target secondario:

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 secondario. 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 fa riferimento 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 lo rende un target secondario è 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 secondario. 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.

Questa destinazione è configurata come un target Cloud Run standard. L'unica cosa che lo rende un target secondario è che fa riferimento alla proprietà multiTarget.targetIds nel target multiplo.

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 lo rende un target secondario è che fa riferimento alla proprietà multiTarget.targetIds nel target multiplo.

Passa i parametri di deployment ai target

Puoi differenziare i target secondari 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 sui target corrispondenti.

Ad esempio, potresti volere un numero diverso di repliche per ogni target figlio. Per farlo, devi includere i parametri e i valori nella progressione della pipeline di pubblicazione, insieme alle etichette sui target secondari in modo che corrispondano a ogni coppia parametro-valore.

Scopri di più sui parametri di deployment.

Crea la release

Con target multipli e figlio configurati, 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, ma quando si arriva alla fase con più target, Cloud Deploy crea un'implementazione controller per il target multiplo e un'implementazione figlio per il deployment dell'applicazione in ogni target figlio.

I messaggi Pub/Sub in risposta alle operazioni di Cloud Deploy si distinguono tra le implementazioni del controller e le implementazioni figlio.

Limitazioni

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

  • Tutti i target figlio di un singolo multi-target devono avere lo stesso runtime target (ad esempio tutti i GKE o tutti GKE Enterprise).

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

  • Un target multiplo non può essere senza figli 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 una pipeline diversa.

  • A differenza dei pool privati, i pool predefiniti hanno limiti di contemporaneità.

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

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

    Se devi poter eseguire il deployment contemporaneamente a 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 dall'ambiente di esecuzione multiplo

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

Queste regole semplificano la propagazione degli ambienti di esecuzione alle destinazioni figlio da un target multiplo in modo da non dover definire o modificare l'ambiente di esecuzione per ogni target figlio, ma al contempo puoi personalizzare l'ambiente di esecuzione per uno o più target 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 le approvazioni. Con il deployment parallelo, tuttavia, puoi configurare l'approvazione solo sul target multiplo. L'approvazione o il rifiuto influisce su tutti i target secondari insieme.

Visualizza il deployment parallelo nella console Google Cloud

Nella console Google Cloud puoi visualizzare i dettagli delle destinazioni multi-target e figlio, dell'implementazione del controller e delle implementazioni figlio.

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. Tuttavia, quando visualizzi i dettagli della release, puoi vedere l'implementazione del controller e le implementazioni secondarie. Puoi anche vedere le implementazioni dei controller e quelle secondarie elencate nella scheda Implementazioni nella pagina dei dettagli della pipeline di distribuzione.

Nella finestra di controllo delle release puoi visualizzare e confrontare i manifest sottoposti a rendering per le implementazioni secondarie.

Usa il deployment parallelo con una strategia di deployment

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

Passaggi successivi