Questo documento descrive come configurare e utilizzare i deployment canary per eseguire il deployment delle applicazioni in GKE o nei cluster GKE collegati utilizzando Cloud Deploy con il networking basato sui servizi.
Un deployment canary è un'implementazione progressiva di una nuova versione dell'applicazione, in cui aumenti gradualmente la percentuale di traffico inviato alla nuova versione, monitorando le prestazioni dell'applicazione. In questo modo, puoi rilevare potenziali problemi in anticipo e ridurre al minimo l'impatto sugli utenti.
Come funzionano i deployment canary per GKE e i cluster GKE collegati con il networking basato sui servizi
Fornisci il nome della risorsa di deployment e della risorsa di servizio.
Cloud Deploy crea una risorsa Deployment aggiuntiva, con il nome del deployment attuale più
-canary.
Anche i secret e i ConfigMap vengono copiati e rinominati con -canary.
Cloud Deploy modifica il servizio per regolare il selettore in modo da selezionare i pod nel deployment corrente e i pod canary.
Cloud Deploy calcola il numero di pod da utilizzare per il canary in base al calcolo descritto nella sezione relativa al provisioning dei pod. Il calcolo varia a seconda che tu attivi o disattivi il provisioning eccessivo dei pod.
Se passiamo alla fase
stableCloud Deploy aggiunge le etichette da utilizzare per la corrispondenza dei pod, in modo che siano disponibili per le esecuzioni canary successive.Cloud Deploy crea un deployment che include la percentuale di pod specifica per la fase, aggiornandola per ogni fase. A questo scopo, viene calcolato il numero di pod come percentuale del numero originale di pod. Ciò può comportare una suddivisione del traffico non esatta. Se hai bisogno di una suddivisione esatta del traffico, puoi ottenerla utilizzando l'API Gateway.
Durante la fase
stable, il deployment-canaryviene ridotto a zero e il deployment originale viene sostituito con il nuovo deployment.Cloud Deploy non modifica il deployment originale fino alla fase
stable, a meno che tu non disattivi l'overprovisioning.
Cloud Deploy esegue il provisioning dei pod per raggiungere la percentuale canary richiesta nel modo più preciso possibile. Questo valore si basa sul numero di pod, non sul traffico verso i pod. Se vuoi che il canary si basi sul traffico, devi utilizzare l'API Gateway.
Per il canary basato sulla rete GKE, puoi abilitare o disabilitare il provisioning eccessivo dei pod. Le sezioni seguenti descrivono come Cloud Deploy calcola il numero di pod da eseguire il provisioning per il deployment canary per ogni fase canary.
Provisioning dei pod con overprovisioning abilitato
L'attivazione dell'overprovisioning (disablePodOverprovisioning: false)
consente a Cloud Deploy di creare pod aggiuntivi sufficienti per eseguire la percentuale di canary che vuoi, in base al numero di pod che eseguono il deployment esistente. La seguente formula mostra come
Cloud Deploy calcola il numero di pod da eseguire il provisioning per la
distribuzione canary per ogni fase canary, quando il provisioning eccessivo dei pod è
attivato:
math.Ceil( percentage * ReplicaCountOfDeploymentOnCluster / (100-percentage))
Con questa formula, il numero attuale di repliche (il numero di pod che hai già prima di questo canary) viene moltiplicato per la percentuale canary per la fase e il risultato viene diviso per (100 meno la percentuale).
Ad esempio, se hai già 4 pod e la fase canary è del 50%,
il numero di pod canary è 4. (Il risultato di 100-percentage viene utilizzato come
percentuale: 100-50=50, trattato come .50.)
L'overprovisioning dei pod è il comportamento predefinito.
Provisioning dei pod con l'overprovisioning disattivato
Puoi disattivare l'overprovisioning (disablePodOverprovisioning: true) per assicurarti che Cloud Deploy non aumenti il numero di repliche.
La seguente formula mostra come Cloud Deploy calcola il provisioning dei pod per il deployment canary per ogni fase canary, quando il provisioning eccessivo dei pod è disattivato:
math.Ceil( (ReplicaCountOfDeploymentOnCluster + ReplicaCountOfCanaryDeploymentOnCluster) * percentage)
In questa formula, ReplicaCountOfCanaryDeploymentOnCluster esiste solo se
era già presente una fase canary. Se questa è la prima fase canary, non
è presente alcun ReplicaCountOfCanaryDeploymentOnCluster.
Se inizi con 4 pod, questo numero viene moltiplicato per la percentuale canary
(ad esempio, 50% o .5) per ottenere 2. Pertanto, il deployment originale viene ridimensionato a 2 e vengono creati 2 nuovi pod per il deployment canary. Se
poi hai una fase canary del 75%, hai 2 (deployment originale) +2
(prima fase canary), *.75, per ottenere 3 pod canary e 1 pod che eseguono il
deployment originale.
Utilizzando Cloud Deploy, puoi configurare i deployment canary nei cluster GKE e GKE allegati in una singola fase o in più fasi.
Le istruzioni riportate qui includono solo ciò che è specifico della configurazione canary. Il documento Eseguire il deployment in un cluster Google Kubernetes Engine contiene le istruzioni generali per configurare ed eseguire la pipeline di deployment.
Assicurati di disporre delle autorizzazioni necessarie.
Oltre alle altre autorizzazioni Identity and Access Management necessarie per utilizzare Cloud Deploy, devi disporre delle seguenti autorizzazioni per eseguire azioni aggiuntive che potrebbero essere necessarie per un deployment canary:
clouddeploy.rollouts.advanceclouddeploy.rollouts.ignoreJobclouddeploy.rollouts.cancelclouddeploy.rollouts.retryJobclouddeploy.jobRuns.getclouddeploy.jobRuns.listclouddeploy.jobRuns.terminate
Per saperne di più sui ruoli disponibili che includono queste autorizzazioni, consulta Ruoli e autorizzazioni IAM.
Preparare skaffold.yaml
Il file skaffold.yaml definisce il rendering e il deployment dei manifest Kubernetes. Per un deployment canary in GKE o
nei cluster collegati a GKE, assicurati che punti correttamente ai manifest e
definisca gli artefatti di build necessari. Non è necessaria alcuna configurazione specifica per la versione canary
all'interno di skaffold.yaml, oltre a quella necessaria per un
deployment standard. Puoi utilizzare i profili Skaffold
per gestire diverse varianti di manifest per
fasi canary personalizzate.
Preparare i manifest Kubernetes
I manifest Kubernetes devono includere sia una risorsa Deployment sia una risorsa
Service. Service deve definire un selector che corrisponda alle
etichette dei pod gestiti da Deployment. L'etichetta predefinita
che Cloud Deploy cerca è app, ma può essere configurata nella
pipeline.
Configurare un canary automatico
Configura un canary automatizzato direttamente nella definizione della pipeline di distribuzione per una fase specifica di GKE o GKE Attached Clusters utilizzando il networking del servizio Kubernetes standard.
Nella fase della pipeline, includi una proprietà strategy, come segue:
serialPipeline:
stages:
- targetId: prod
profiles: []
strategy:
canary:
runtimeConfig:
kubernetes:
serviceNetworking:
service: "SERVICE_NAME"
deployment: "DEPLOYMENT_NAME"
podSelectorLabel: "LABEL"
canaryDeployment:
percentages: [PERCENTAGES]
verify: true|false
predeploy:
actions: "PREDEPLOY_ACTION"
postdeploy:
actions: "POSTDEPLOY_ACTION"
In questa configurazione…
SERVICE_NAME è il nome del servizio Kubernetes, definito nel manifest.
DEPLOYMENT_NAME è il nome del deployment Kubernetes definito nel manifest.
LABEL è un'etichetta del selettore pod. Deve corrispondere al selettore di etichette nel servizio Kubernetes definito nel manifest. Questa opzione è facoltativa. Il valore predefinito è
app.PERCENTAGES è un elenco separato da virgole di valori percentuali che rappresentano gli incrementi canary, ad esempio
[5, 25, 50].Inoltre, non include
100, perché l'implementazione al 100% è presunta nel canary ed è gestita dalla fasestablePuoi attivare la verifica del deployment (
verify: true). In questo caso, viene attivato un jobverifyin ogni fase.PREDEPLOY_ACTION
È uguale a ACTION_NAME che hai utilizzato in
skaffold.yamlper definire l'azione personalizzata che vuoi eseguire prima del deployment.POSTDEPLOY_ACTION
È uguale a ACTION_NAME che hai utilizzato in
skaffold.yamlper definire l'azione personalizzata che vuoi eseguire dopo il deployment.
Configurare un canary personalizzato automatizzato
Un canary personalizzato automatizzato combina la definizione di fase personalizzata (nomi, percentuali, profili, verifica, hook) con la gestione automatica del traffico di Cloud Deploy per i cluster GKE o GKE collegati. Definisci
le fasi, ma Cloud Deploy gestisce la manipolazione delle risorse sottostanti
in base alle percentuali e al runtimeConfig scelto.
Per configurare un canary personalizzato automatizzato, includi sia una sezione runtimeConfig con serviceNetworking sia la sezione customCanaryDeployment (che definisce phaseConfigs) all'interno del blocco strategy.canary. Cloud Deploy utilizza i profili Skaffold specificati per il rendering, ma regola automaticamente il traffico in base alle percentuali di runtimeConfig e di fase.
serialPipeline:
stages:
- targetId: gke-prod
profiles: []
strategy:
canary:
# Include runtimeConfig for automatic traffic management
runtimeConfig:
kubernetes:
serviceNetworking:
service: "my-app"
deployment: "my-deployment"
# Include customCanaryDeployment for phase customization
customCanaryDeployment:
phaseConfigs:
- phaseId: "warmup"
percentage: 10
profiles: ["profile-a"] # Profile used for rendering this phase
verify: true
- phaseId: "scaling"
percentage: 50
profiles: ["profile-b"] # Different profile for this phase
verify: true
- phaseId: "stable"
percentage: 100
profiles: ["profile-b"] # Can reuse profiles
verify: true
Esegui il canary GKE o GKE attached clusters
Registra pipeline e target: applica i file di configurazione della pipeline di distribuzione e dei target GKE o dei cluster GKE collegati.
gcloud deploy apply --file=delivery-pipeline.yaml --region=REGION gcloud deploy apply --file=gke-targets.yaml --region=REGIONLa pipeline di distribuzione include la configurazione canary automatica o personalizzata per il runtime scelto.
Crea una release: avvia il deployment fornendo il nome dell'immagine.
gcloud deploy releases create RELEASE_NAME \ --delivery-pipeline=PIPELINE_NAME \ --region=REGION # e.g., --images=my-cloudrun-service=gcr.io/my-project/my-app:v1.1 # Add --skaffold-file or --source if not using default Skaffold config discoveryLa pipeline di distribuzione identificata da
PIPELINE_NAMEcontiene la configurazione canary automatica o personalizzata descritta in questo documento.Avanza alla fase canary:
Interfaccia a riga di comando gcloud
gcloud deploy rollouts advance ROLLOUT_NAME \ --release=RELEASE_NAME \ --delivery-pipeline=PIPELINE_NAME \ --region=REGIONDove:
ROLLOUT_NAMEè il nome dell'implementazione attuale che stai facendo avanzare alla fase successiva.RELEASE_NAMEè il nome della release di cui fa parte questa implementazione.PIPELINE_NAMEè il nome della pipeline di distribuzione che utilizzi per gestire il deployment di questa release.REGIONè il nome della regione in cui è stata creata la release, ad esempious-central1. Campo obbligatorio.Per ulteriori informazioni sul comando
gcloud deploy rollouts advance, consulta il riferimento per Google Cloud SDK.Console Google Cloud
Fai clic sulla pipeline visualizzata nell'elenco delle pipeline di pubblicazione.
La pagina Dettagli pipeline di distribuzione mostra una rappresentazione grafica dell'avanzamento della pipeline di distribuzione.
Nella scheda Implementazioni, in Dettagli della pipeline di pubblicazione, fai clic sul nome dell'implementazione.
Viene visualizzata la pagina dei dettagli dell'implementazione.

Nota che in questo esempio l'implementazione ha una fase
canary-50e una fasestable. L'implementazione potrebbe avere più fasi o fasi diverse.Fai clic su Prosegui con implementazione.
L'implementazione passa alla fase successiva.
Fasi ignorate
Se esegui il deployment di una versione canary e la tua applicazione non è ancora stata sottoposta a deployment in quel runtime, Cloud Deploy salta la fase canary ed esegue la fase stabile. Consulta la sezione Saltare le fasi la prima volta per scoprire perché ciò accade.
Passaggi successivi
Prova la guida rapida al deployment canary.
Scopri come gestire il ciclo di vita dei rollout canary.
Scopri di più sul deployment parallelo.
Scopri di più sulle strategie di deployment di Cloud Deploy.