Questo documento descrive come configurare e utilizzare i deployment canary per eseguire il deployment delle applicazioni in Cloud Run. Il deployment canary di Cloud Deploy supporta i servizi Cloud Run e i pool di worker, ma non i job.
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 al contempo le prestazioni dell'applicazione. In questo modo puoi rilevare i potenziali problemi in anticipo e ridurre al minimo l'impatto sugli utenti.
Come funzionano i deployment canary per Cloud Run
Quando esegui il deployment in Cloud Run utilizzando una strategia di deployment canary, Cloud Deploy aggiorna il servizio esistente con una nuova revisione. La nuova revisione riceve una percentuale specificata di traffico, mentre la vecchia revisione continua a ricevere il resto. Nel tempo, aumenti gradualmente la suddivisione del traffico alla nuova revisione.
Utilizzando Cloud Deploy, puoi configurare i deployment canary in Cloud Run in una o più fasi.
Le istruzioni riportate di seguito includono solo ciò che è specifico per la configurazione canary. Il documento Eseguire il deployment di un servizio, un job o un pool di worker Cloud Run contiene le istruzioni generali per la configurazione e l'esecuzione della pipeline di deployment.
Assicurati di disporre delle autorizzazioni necessarie.
Oltre alle altre autorizzazioni di Identity and Access Management necessarie per l'utilizzo di 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.
Prepara il file skaffold.yaml
Il file skaffold.yaml definisce la modalità di rendering e deployment delle definizioni dei servizi Cloud Run. Per un deployment canary in Cloud Run, assicurati che punti correttamente ai file di definizione del servizio e definisca gli artefatti di build necessari (ad esempio le immagini container). Non è richiesta alcuna configurazione speciale specifica per il deployment canary all'interno di skaffold.yaml oltre a quella necessaria per un deployment standard. Puoi utilizzare i profili Skaffold per gestire diverse varianti di definizione del servizio per le fasi canary personalizzate.
Prepara la definizione del servizio o del pool di worker
Il file di definizione del servizio Cloud Run normale è sufficiente, ma senza una sezione traffic. Cloud Deploy gestisce la suddivisione del traffico tra l'ultima revisione riuscita e la nuova revisione.
Servizio
Esempio di service.yaml (senza sezione traffic):
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: my-cloudrun-service
spec:
template:
spec:
containers:
- image: gcr.io/my-project/my-cloudrun-app
ports:
- containerPort: 8080
Pool di worker
Esempio di worker-pool.yaml (senza sezione instanceSplit):
apiVersion: run.googleapis.com/v1
kind: WorkerPool
metadata:
name: my-wp
annotations:
run.googleapis.com/launch-stage: BETA
spec:
template:
spec:
containers:
- image: us-docker.pkg.dev/cloudrun/container/worker-pool
Configura un deployment canary automatico
Configura un deployment canary automatico direttamente nella definizione della pipeline di distribuzione per una fase specifica di Cloud Run. Cloud Deploy indica automaticamente a Cloud Run di suddividere il traffico tra l'ultima revisione stabile e la nuova revisione in base alle percentuali specificate.
serialPipeline:
stages:
- targetId: prod
profiles: []
strategy:
canary:
runtimeConfig:
cloudRun:
automaticTrafficControl: true
canaryDeployment:
percentages: [PERCENTAGES]
verify:
tasks: [TASKS]
predeploy:
tasks: [TASKS]
postdeploy:
tasks: [TASKS]
In questa configurazione:
PERCENTAGES è un elenco di valori di percentuale separati da virgole che rappresentano gli incrementi del deployment canary, ad esempio
[25, 50, 75]. Tieni presente che non include100, perché il deployment al 100% è presupposto nel deployment canary ed è gestito dalla fasestable.Puoi attivare la verifica del deployment con figurando la
verifysezione. In questo caso, a ogni fase canary viene aggiunto un jobverify.Puoi attivare gli hook di pre-deployment configurando la
predeploysezione. In questo caso, alla prima fase canary viene aggiunto un jobpredeploy.Puoi attivare gli hook di post-deployment configurando la
postdeploysezione. In questo caso, alla fasestableviene aggiunto un jobpostdeploy.Ogni proprietà
tasksinverify,predeployepostdeployè costituita da una o più attività da eseguire nell'ambito del job. Le attività configurate vengono eseguite in sequenza nell'ordine in cui sono definite.
Configura un deployment canary automatico personalizzato
Questa opzione combina la definizione di fasi personalizzate (nomi, percentuali, profili, verifica, hook) con la gestione automatica del traffico di Cloud Deploy per Cloud Run. Definisci le fasi, ma Cloud Deploy gestisce l'indicazione a Cloud Run di spostare il traffico in base alle percentuali.
Per configurare questa opzione, includi sia l'impostazione runtimeConfig.cloudRun.automaticTrafficControl: true sia la sezione customCanaryDeployment (che definisce phaseConfigs) all'interno del blocco strategy.canary. Cloud Deploy utilizzerà i profili Skaffold specificati per il rendering della definizione del servizio (che non deve avere una sezione traffic), ma gestirà automaticamente il traffico in base alle percentuali delle fasi.
serialPipeline:
stages:
- targetId: cloudrun-prod
profiles: []
strategy:
canary:
# Include runtimeConfig for automatic traffic management
runtimeConfig:
cloudRun:
automaticTrafficControl: true
# Include customCanaryDeployment for phase customization
customCanaryDeployment:
phaseConfigs:
- phaseId: "warmup-cr"
percentage: 10
profiles: ["base-config"] # Profile rendering service def (no traffic stanza)
verify:
tasks: [TASKS]
- phaseId: "scaling-cr"
percentage: 50
profiles: ["base-config"] # Can use the same profile
verify:
tasks: [TASKS]
- phaseId: "stable"
percentage: 100
profiles: ["base-config"]
verify:
tasks: [TASKS]
Esegui il deployment canary di Cloud Run
Registra la pipeline e le destinazioni: applica i file di configurazione della pipeline di distribuzione e della destinazione Cloud Run.
gcloud deploy apply --file=delivery-pipeline.yaml --region=REGION gcloud deploy apply --file=cloudrun-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=REGIONLa pipeline di distribuzione identificata da
PIPELINE_NAMEcontiene la configurazione canary automatica o personalizzata descritta in questo documento.Avanza il deployment canary:
Gcloud CLI
gcloud deploy rollouts advance ROLLOUT_NAME \ --release=RELEASE_NAME \ --delivery-pipeline=PIPELINE_NAME \ --region=REGIONDove:
ROLLOUT_NAMEè il nome del rollout corrente che stai facendo avanzare alla fase successiva.RELEASE_NAMEè il nome della release di cui fa parte questo rollout.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 saperne di più sul comando
gcloud deploy rollouts advance, consulta il riferimento per Google Cloud SDK.Google Cloud Console
Fai clic sulla pipeline mostrata nell'elenco delle pipeline di distribuzione.
La pagina dei dettagli della pipeline di distribuzione mostra una rappresentazione grafica dell'avanzamento della pipeline di distribuzione.
Nella scheda Rollout, in Dettagli pipeline di distribuzione, fai clic sul nome del rollout.
Viene visualizzata la pagina dei dettagli del rollout.

Tieni presente che in questo esempio il rollout ha una fase
canary-50e una fasestable. Il rollout potrebbe avere più fasi o fasi diverse.Fai clic su Avanza rollout.
Il rollout viene fatto avanzare alla fase successiva.
Fasi ignorate
Se esegui il deployment di un deployment canary e l'applicazione non è ancora stata eseguita in quel runtime, Cloud Deploy salta la fase canary ed esegue la fase stabile. Per scoprire perché, consulta Saltare le fasi la prima volta
Passaggi successivi
Prova la guida rapida al deployment canary.
Scopri come gestire il ciclo di vita dei rollout del deployment canary.
Scopri di più sul deployment parallelo.
Scopri di più sulle strategie di deployment di Cloud Deploy.
Scopri di più su Cloud Run.