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 tali destinazioni in parallelo (contemporaneamente). Il target che identifichi come fase della pipeline è chiamato multi-target, mentre quelli che compongono 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ù target di produzione. In questo caso, non è necessario eseguire il deployment in successione in ciascun target, perché non è previsto alcun avanzamento (ad esempio, dallo sviluppo alla gestione temporanea fino alla produzione).

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

  • Lanci del controller

    L'implementazione di un controller è un'implementazione che corrisponde al target multiplo.

    Consulta la sezione Limitazioni per ulteriori informazioni sulle operazioni consentite e non consentite all'implementazione del controller.

  • Implementazioni secondarie

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

Configura il deployment parallelo

La configurazione del deployment parallelo prevede la definizione di un target multiplo e del numero di target figlio necessari (fino al limite). Le definizioni di destinazione 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 vengono utilizzati come riferimento dal target multiplo che utilizza la proprietà multiTarget.targetIds.
  • Puoi configurare per l'approvazione il target multiplo, ma non i target figlio, che non possono includere requireApproval:true.

I target multipli e secondari possono includere configurazioni personalizzate dell'ambiente di esecuzione. 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 targeting multiplo

Un target multiplo è un singolo target identificato come fase nella pipeline di pubblicazione, ma che rimanda 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 target 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, utilizzato nella definizione della pipeline di distribuzione, nella proprietà stages.targetId.

  • CHILD_TARGET1, CHILD_TARGET2,...CHILD_TARGETn sono i nomi delle destinazioni secondarie a 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 i target figlio

Per ogni target identificato come figlio nella configurazione di 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 target multipli.

  • 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 un target 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 secondario. Il nome corrisponde a un membro nell'elenco dei target nella proprietà multiTarget.targetIds nella definizione di target multipli.

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

Questa destinazione è configurata come un target Cloud Run standard. L'unica cosa che rende questo 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 rende questo target secondario è che fa riferimento alla proprietà multiTarget.targetIds nel target multiplo.

Crea la release

Con un target multiplo e un target 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, 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 su ogni destinazione 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 una pipeline diversa.

  • 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ù destinazioni figlio di 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 i job di verifica, è possibile che uno o più job di verifica vengano avviati prima che il deployment dell'applicazione venga eseguito in tutte le destinazioni figlio.

    Per 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 dall'ambiente di esecuzione predefinito

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

Queste regole semplificano la propagazione degli ambienti di esecuzione ai target figlio da un target multiplo, in modo da non dover definire o modificare l'ambiente di esecuzione per ogni target figlio, consentendoti comunque di 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. Tuttavia, con il deployment parallelo, puoi configurare l'approvazione solo per i target multipli. 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 della pipeline di distribuzione sono elencati i target multipli, ma non quelli secondari. Quando visualizzi i dettagli della release, tuttavia, puoi vedere l'implementazione del controller e le implementazioni secondarie. Puoi anche visualizzare le implementazioni del controller e dell'unità secondaria 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.

Trasmettere i parametri di deployment alle destinazioni

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 figlio da abbinare a ogni coppia parametro-valore.

Scopri di più sui parametri di deployment.

Utilizzare 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