Deployment canary in Cloud Run

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.advance
  • clouddeploy.rollouts.ignoreJob
  • clouddeploy.rollouts.cancel
  • clouddeploy.rollouts.retryJob
  • clouddeploy.jobRuns.get
  • clouddeploy.jobRuns.list
  • clouddeploy.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 include 100, perché il deployment al 100% è presupposto nel deployment canary ed è gestito dalla fase stable.

  • Puoi attivare la verifica del deployment con figurando la verify sezione. In questo caso, a ogni fase canary viene aggiunto un job verify.

  • Puoi attivare gli hook di pre-deployment configurando la predeploy sezione. In questo caso, alla prima fase canary viene aggiunto un job predeploy.

  • Puoi attivare gli hook di post-deployment configurando la postdeploy sezione. In questo caso, alla fase stable viene aggiunto un job postdeploy.

  • Ogni proprietà tasks in verify, predeploy e postdeploy è 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

  1. 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=REGION
    

    La pipeline di distribuzione include la configurazione canary automatica o personalizzata per il runtime scelto.

  2. Crea una release: avvia il deployment fornendo il nome dell'immagine.

    
    gcloud deploy releases create RELEASE_NAME \
                                    --delivery-pipeline=PIPELINE_NAME \
                                    --region=REGION
    

    La pipeline di distribuzione identificata da PIPELINE_NAME contiene la configurazione canary automatica o personalizzata descritta in questo documento.

  3. Avanza il deployment canary:

    Gcloud CLI

    gcloud deploy rollouts advance ROLLOUT_NAME \
                                --release=RELEASE_NAME \
                                --delivery-pipeline=PIPELINE_NAME \
                                --region=REGION
    

    Dove:

    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 esempio us-central1. Campo obbligatorio.

    Per saperne di più sul comando gcloud deploy rollouts advance, consulta il riferimento per Google Cloud SDK.

    Google Cloud Console

    1. Apri la pagina Pipeline di distribuzione.

    2. 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.

    3. Nella scheda Rollout, in Dettagli pipeline di distribuzione, fai clic sul nome del rollout.

      Viene visualizzata la pagina dei dettagli del rollout.

      Dettagli dell'implementazione nella console Google Cloud

      Tieni presente che in questo esempio il rollout ha una fase canary-50 e una fase stable. Il rollout potrebbe avere più fasi o fasi diverse.

    4. 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