Cloud Run ti consente di specificare le revisioni che devono ricevere il traffico e le percentuali di traffico ricevute da una revisione. Questa funzionalità ti consente di eseguire il rollback a una revisione precedente, implementare gradualmente una revisione e suddividere il traffico tra più revisioni. Questa pagina descrive come utilizzare questa funzionalità per gestire il traffico verso le revisioni di Cloud Run.
Tieni presente che le modifiche al routing del traffico non sono istantanee. Quando modifichi il traffico per le revisioni, tutte le richieste in fase di elaborazione continueranno fino al completamento. Le richieste in corso non verranno abbandonate e potrebbero essere indirizzate a una nuova revisione o a una revisione precedente durante il periodo di transizione.
Suddivisione del traffico e affinità sessione
Se dividi il traffico tra più revisioni con l'affinità sessione attivata, consulta Affinità sessione e suddivisione del traffico per informazioni dettagliate sull'effetto dell'affinità sessione sulla suddivisione del traffico.
Ciclo di vita delle suddivisioni del traffico
Se dividi il traffico tra più revisioni o assegni il traffico a una revisione precedente, tutti gli implementazioni successive utilizzeranno questo schema di suddivisione del traffico in futuro. Per tornare a utilizzare solo l'ultima revisione senza la suddivisione del traffico, invia tutto il traffico all'ultima revisione.
Ruoli obbligatori
Per ottenere le autorizzazioni necessarie per gestire i servizi e le revisioni Cloud Run, chiedi all'amministratore di concederti i seguenti ruoli IAM:
- Se gestisci un servizio di cui è stato eseguito il deployment da un'immagine container:
- Cloud Run Developer
(
roles/run.developer
) nel servizio Cloud Run - Utente account di servizio
(
roles/iam.serviceAccountUser
) nell'identità di servizio - Lettore di Artifact Registry
(
roles/artifactregistry.reader
) nel repository di Artifact Registry delle immagini container del servizio (se applicabile)
- Cloud Run Developer
(
- Se gestisci un servizio di cui è stato eseguito il deployment dal codice sorgente:
- Cloud Run Source Developer
(
roles/run.sourceDeveloper
) nel tuo progetto - Utente account di servizio
(
roles/iam.serviceAccountUser
) nell'identità di servizio - Inoltre, concedi il ruolo
Cloud Run Builder
(
roles/run.builder
) all'account di servizio Cloud Build nel progetto. L'account di servizio di compilazione è responsabile della compilazione del servizio e per impostazione predefinita corrisponde all'account di servizio predefinito di Compute Engine.
- Cloud Run Source Developer
(
Per un elenco dei ruoli e delle autorizzazioni IAM associati a Cloud Run, consulta Ruoli IAM di Cloud Run e Autorizzazioni IAM di Cloud Run. Se il servizio Cloud Run interagisce conGoogle Cloud API, come le librerie client di Cloud, consulta la guida alla configurazione dell'identità di servizio. Per ulteriori informazioni sulla concessione dei ruoli, consulta le autorizzazioni di deployment e gestisci l'accesso.
Esegui il rollback a una revisione precedente
Per eseguire il rollback a una revisione precedente:
Nella Google Cloud console, vai a Cloud Run:
Individua il servizio nell'elenco dei servizi e fai clic su di esso.
Fai clic sulla scheda Revisioni per visualizzare l'elenco delle revisioni correnti per quel servizio.
Nell'elenco delle revisioni, fai clic sull'icona dei tre puntini a destra della revisione di cui vuoi eseguire il rollback:
Fai clic su Gestisci traffico per visualizzare il modulo di gestione del traffico:
- Seleziona la revisione precedente a cui vuoi eseguire il rollback nell'elenco a discesa.
- Imposta la percentuale di traffico della revisione precedente su 100.
- Imposta la percentuale della revisione attualmente pubblicata su 0.
- Fai clic su Salva.
Utilizza il seguente comando:
gcloud run services update-trafficSERVICE --to-revisionsREVISION =100
- Sostituisci SERVICE con il nome del servizio.
- Sostituisci REVISION con il nome della revisione a cui vuoi eseguire il rollback.
Se stai creando un nuovo servizio, salta questo passaggio. Se stai aggiornando un servizio esistente, scarica la relativa configurazione YAML:
gcloud run services describe
SERVICE --format export > service.yamlSotto l'attributo
spec
, individua e aggiorna l'attributotraffic
come segue:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: ... traffic: - revisionName:
REVISION percent: 100Sostituisci
- REVISION con il nome della revisione a cui vuoi eseguire il rollback.
Sostituisci il servizio con la nuova configurazione utilizzando il seguente comando:
gcloud run services replace service.yaml
Attendi il completamento dell'aggiornamento: dovresti visualizzare un messaggio che indica che la revisione da cui stai eseguendo il rollback è stata implementata e sta pubblicando il
0
% del traffico.
Per scoprire come applicare o rimuovere una configurazione Terraform, consulta Comandi Terraform di base.
Aggiungi quanto segue al tuo file .tf
:
Implementazione graduale delle revisioni
Per implementare gradualmente una nuova revisione:
Nella Google Cloud console, vai a Cloud Run:
Seleziona un servizio nell'elenco dei servizi.
Fai clic su Esegui il deployment di una nuova revisione.
Compila il modulo di deployment in base alle tue esigenze, ma assicurati che la casella di controllo Pubblica questa revisione immediatamente NON sia selezionata.
Fai clic su Esegui il deployment.
Fai clic su Gestisci traffico.
La nuova revisione è elencata, ma con una percentuale impostata su 0: al momento non gestisce alcun traffico. Nel modulo:
- Imposta la percentuale desiderata, ad esempio 5. Tieni presente che la percentuale della versione attualmente pubblicata viene ridotta automaticamente della stessa quantità.
- Fai clic su Salva.
- Ripeti questi passaggi per la gestione del traffico, ma con percentuali modificate, aumentando la percentuale in base alle esigenze della nuova revisione. Non è necessario eseguire nuovamente il deployment per modificare le percentuali di traffico.
Per eseguire il deployment di un servizio da un'immagine container:
Esegui il deployment della revisione che vuoi implementare gradualmente, impostandola inizialmente in modo che non riceva traffico:
Per eseguire il deployment di un servizio dal codice sorgente:
gcloud run deploy --image
IMAGE --no-trafficSostituisci IMAGE con l'immagine di cui stai eseguendo il deployment.
Per eseguire il deployment di un servizio dal codice sorgente:
gcloud run deploy
SERVICE --source . --no-trafficSostituisci SERVICE con il nome del servizio.
Specifica la percentuale di traffico che vuoi che venga gestita dalla nuova revisione, ad esempio il 5%:
gcloud run services update-traffic
SERVICE --to-revisionsREVISION =PERCENTAGE - Sostituisci SERVICE con il nome del servizio.
- Sostituisci REVISION con il nome della revisione che stai implementando gradualmente. Per specificare la revisione più recente, puoi utilizzare
LATEST
, ad esempioLATEST=5
. - Sostituisci PERCENTAGE con la percentuale di traffico che vuoi inviare alla nuova revisione, ad esempio
5
per inviare il 5% di traffico.
Quando il rendimento della revisione è soddisfacente, ripeti il passaggio precedente
update-traffic
, ma aumenta il valore percentuale in base alle tue esigenze.
Se stai creando un nuovo servizio, salta questo passaggio. Se stai aggiornando un servizio esistente, scarica la relativa configurazione YAML:
gcloud run services describe
SERVICE --format export > service.yamlApporta le modifiche di configurazione necessarie al servizio e specifica il nome della revisione che vuoi per la nuova revisione:
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: template: metadata: annotations: ... name:
REVISION-NAME Sostituisci
- REVISION-NAME con il nome che vuoi assegnare alla nuova revisione.
Sotto l'attributo
spec
, individua e aggiorna l'attributotraffic
in modo che la nuova revisione pubblichi solo una piccola quantità di traffico:apiVersion: serving.knative.dev/v1 kind: Service metadata: name:
SERVICE spec: ... traffic: - revisionName:REVISION-NEW percent:PERCENT-NEW - revisionName:REVISION-FORMER percent:PERCENT-FORMER Tieni presente che la somma delle percentuali deve essere pari a 100. Sostituisci
- REVISION-NEW con il nome della revisione che stai implementando gradualmente.
- REVISION-FORMER con il nome della revisione attualmente pubblicata.
- PERCENT-NEW con la percentuale di traffico che vuoi inviare alla nuova revisione,
ad esempio utilizza
10
per inviare il 10% del traffico a quella revisione. - PERCENT-FORMER con la percentuale di traffico che vuoi inviare alla vecchia revisione
Attendi il completamento dell'aggiornamento: dovresti visualizzare un messaggio che ti informa che la nuova revisione che stai implementando gradualmente è stata implementata e sta pubblicando il valore percentuale del traffico che hai utilizzato.
Aggiungi quanto segue al file .tf
e aggiorna gradualmente la percentuale di traffico dalla revisione precedente alla revisione più recente.
Tieni presente che ogni modifica al traffico richiede l'esecuzione di un'altra terraform apply
.
Applica le modifiche inserendo terraform apply
.
Suddividi il traffico tra più revisioni
Per suddividere il traffico tra due o più revisioni:
Nella Google Cloud console, vai a Cloud Run:
Individua il servizio nell'elenco dei servizi e fai clic su di esso.
Fai clic su Gestisci traffico.
Viene elencata la nuova revisione attualmente pubblicata. Nel modulo:
- Imposta la percentuale di revisione attualmente pubblicata sulla suddivisione desiderata.
- Seleziona una delle revisioni precedenti utilizzando l'elenco a discesa e impostala sulla suddivisione in percentuale che preferisci.
- Per suddividere il traffico tra più revisioni, fai clic su Aggiungi revisione, selezionata la revisione che ti interessa e imposta la percentuale per la suddivisione che preferisci.
- Fai clic su Salva.
Specifica le revisioni e la percentuale di traffico per ciascuna revisione in un elenco delimitato da virgole:
gcloud run services update-trafficSERVICE --to-revisionsLIST
- Sostituisci SERVICE con il nome del servizio.
- Sostituisci LIST con un elenco separato da virgole di revisioni e percentuali:
REVISION1=PERCENTAGE1,REVISION2=PERCENTAGE2,REVISIONn=PERCENTAGEx
ad esempiohello2-00005-red=25,hello2-00001-bod=25,hello2-00002-nan=50
.
Se stai creando un nuovo servizio, salta questo passaggio. Se stai aggiornando un servizio esistente, scarica la relativa configurazione YAML:
gcloud run services describe
SERVICE --format export > service.yamlSotto l'attributo
spec
, individua e aggiorna l'attributotraffic
in modo che la nuova revisione pubblichi solo una piccola quantità di traffico:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: ... traffic: - revisionName:
REVISION-A percent:PERCENT-A - revisionName:REVISION-B percent:PERCENT-B - revisionName:REVISION-C percent:PERCENT-C Tieni presente che le percentuali devono dare come risultato 100. Sostituisci
- REVISION-A, REVISION-B, REVISION-C con le revisioni a cui stai assegnando il traffico.
- PERCENT-A, PERCENT-B, PERCENT-C con la percentuale per la revisione corrispondente.
Sostituisci il servizio con la nuova configurazione utilizzando il seguente comando:
gcloud run services replace service.yaml
Attendi il completamento dell'aggiornamento: dovresti visualizzare un messaggio che ti informa che la nuova revisione che stai implementando gradualmente è stata implementata e sta pubblicando
5
% (o qualsiasi valore graduale che hai utilizzato) del traffico.
Aggiungi quanto segue al tuo file .tf
:
Applica le modifiche inserendo terraform apply
.
Invia tutto il traffico all'ultima revisione
Quando esegui il deployment di una nuova revisione, puoi impostare questa revisione e tutte quelle future in modo che gestiscano il 100% del traffico il prima possibile, sostituendo qualsiasi suddivisione del traffico stabilita:
Nella Google Cloud console, vai a Cloud Run:
Individua il servizio nell'elenco dei servizi e fai clic su di esso.
Fai clic su Esegui il deployment di una nuova revisione.
Compila il modulo di implementazione in base alle tue esigenze, assicurandoti di selezionare la casella di controllo Pubblica questa revisione immediatamente. In questo modo verrà sostituita qualsiasi suddivisione del traffico esistente, con la nuova revisione che pubblicherà il 100% del traffico.
Fai clic su Esegui il deployment.
Per inviare tutto il traffico alla revisione di cui è stato eseguito il deployment più di recente:
gcloud run services update-trafficSERVICE --to-latest
Sostituisci SERVICE con il nome del servizio.
Se stai creando un nuovo servizio, salta questo passaggio. Se stai aggiornando un servizio esistente, scarica la relativa configurazione YAML:
gcloud run services describe
SERVICE --format export > service.yamlSotto l'attributo
spec
, individua e aggiorna l'attributotraffic
come segueapiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: ... traffic: - latestRevision: true percent: 100
Sostituisci il servizio con la nuova configurazione utilizzando il seguente comando:
gcloud run services replace service.yaml
Attendi il completamento dell'aggiornamento: dovresti visualizzare un messaggio che indica che la revisione (più recente) è stata implementata e sta pubblicando il
100
% del traffico.
Aggiungi quanto segue al tuo file .tf
:
Applica le modifiche inserendo terraform apply
.
Utilizzare i tag per i test, la migrazione del traffico e i rollback
Per evitare di incorrere in costi di fatturazione per le revisioni con tag, utilizza le istanze minime a livello di servizio o rimuovi i tag dalle revisioni quando non ti servono più.
Un caso d'uso comune per questa funzionalità è utilizzarla per testare e verificare una nuova revisione del servizio prima che venga inviato traffico, secondo questa sequenza tipica:
- Esegui test di integrazione su un contenitore durante lo sviluppo.
- Esegui il deployment del contenitore in un Google Cloud progetto che utilizzi solo per il pre-trattamento, senza generare traffico, e testa su una revisione con tag.
- Esegui il deployment in produzione, senza pubblicare il traffico, e testa in base a una revisione con tag in produzione.
- Esegui la migrazione del traffico alla revisione taggata.
Esegui il deployment di una nuova revisione con tag
Per eseguire il deployment di una nuova revisione di un servizio esistente in produzione:
Per eseguire il deployment di una nuova revisione taggata da un'immagine container:
gcloud run deploy myservice --image
IMAGE_URL --no-traffic --tagTAG_NAME Sostituisci:
- IMAGE_URL con l'URL dell'immagine.
- TAG_NAME con il nome del tag in minuscolo.
Per eseguire il deployment di un servizio dal codice sorgente:
gcloud run deploy myservice --source . --no-traffic --tag
TAG_NAME Sostituisci TAG_NAME con il nome del tag in minuscolo.
Il tag ti consente di testare direttamente la nuova revisione in un URL specifico, senza attivare il traffico. L'URL inizia con il nome del tag che hai fornito: ad esempio, se hai utilizzato il nome del tag green
per il servizio myservice
, dovrai testare la revisione taggata all'URL https://green---myservice-abcdef.a.run.app
Aggiungi quanto segue al file .tf
e aggiorna gradualmente la percentuale di traffico dalla versione precedente a quella più recente con il nuovo tag.
Tieni presente che ogni modifica al traffico richiede l'esecuzione di un'altra terraform apply
.
Applica le modifiche inserendo terraform apply
.
Rimuovere un tag
Per rimuovere un tag da una revisione:
Nella Google Cloud console, vai a Cloud Run:
Seleziona un servizio nell'elenco dei servizi.
Vai alla sezione Revisioni del servizio che ti interessa e seleziona la revisione per cui vuoi rimuovere il tag esistente.
Tieni premuto il cursore sopra la colonna URL delle revisioni (tag) e fai clic sull'icona a forma di matita:
Nel menu della finestra di dialogo URL revisione, fai clic sull'icona Cestino per rimuovere il tag corrente utilizzato nella revisione.
Fai clic su Salva.
Per rimuovere un tag di revisione:
gcloud run services update-trafficSERVICE --remove-tagsTAG_NAME
Sostituisci
- TAG_NAME con il nome del tag a cui stai eseguendo la migrazione del traffico
- SERVICE con il nome del servizio da cui stai rimuovendo il tag
Se stai creando un nuovo servizio, salta questo passaggio. Se stai aggiornando un servizio esistente, scarica la relativa configurazione YAML:
gcloud run services describe
SERVICE --format export > service.yamlApporta le modifiche di configurazione desiderate al servizio.
Sotto l'attributo
spec
, individua e rimuovi l'attributotag
per la revisione con tag:apiVersion: serving.knative.dev/v1 kind: Service metadata: name:
SERVICE spec: ... traffic: - revisionName:REVISION tag:TAG_NAME percent:PERCENT-NEW Sostituisci il servizio con la nuova configurazione utilizzando il seguente comando:
gcloud run services replace service.yaml
Aggiungi quanto segue al tuo file .tf
:
Applica le modifiche inserendo terraform apply
.
Migrazione del traffico a una revisione con tag
Dopo aver verificato che la nuova revisione funzioni correttamente, puoi iniziare a eseguire la migrazione del traffico utilizzando la console Google Cloud, la riga di comando gcloud, Terraform o un file YAML:
Nella Google Cloud console, vai a Cloud Run:
Individua il servizio nell'elenco dei servizi e fai clic su di esso:
Seleziona la revisione taggata a cui vuoi inviare il traffico:
Fai clic su Gestisci traffico.
Individua il nome della revisione taggata: è elencato, ma con una percentuale impostata su 0: al momento non gestisce alcun traffico. Nel modulo Gestisci traffico*:
- Imposta la percentuale desiderata, ad esempio 5. Tieni presente che la percentuale della versione attualmente pubblicata viene ridotta automaticamente della stessa quantità.
- Fai clic su Salva.
- Se necessario, ripeti questi passaggi di Gestione del traffico per un periodo di ore o giorni, ma con percentuali diverse, aumentando la percentuale in base alle necessità per la revisione con tag. Non è necessario eseguire nuovamente il deployment per modificare le percentuali di traffico.
Per eseguire la migrazione del traffico a un tag di revisione specifico:
gcloud run services update-traffic myservice --to-tagsTAG_NAME =TRAFFIC_PERCENT
Sostituisci
- TAG_NAME con il nome del tag a cui stai eseguendo la migrazione del traffico
- TRAFFIC_PERCENT con la percentuale di traffico che vuoi
la revisione taggata deve pubblicare, ad esempio
1
.
Se stai creando un nuovo servizio, salta questo passaggio. Se stai aggiornando un servizio esistente, scarica la relativa configurazione YAML:
gcloud run services describe
SERVICE --format export > service.yamlApporta le modifiche di configurazione scelte al servizio.
Sotto l'attributo
spec
, individua e aggiorna l'attributotraffic
per la revisione con tag in modo che la revisione con tag pubblichi solo una piccola quantità di traffico:apiVersion: serving.knative.dev/v1 kind: Service metadata: name:
SERVICE spec: ... traffic: - revisionName:REVISION tag:TAG_NAME percent:PERCENT-NEW - revisionName:REVISION-FORMER percent:PERCENT-FORMER Tieni presente che la somma delle percentuali deve essere pari a 100. Sostituisci
- REVISION con il nome della revisione taggata.
- TAG_NAME con il nome del tag che stai implementando gradualmente.
- PERCENT-NEW con la percentuale di traffico che vuoi inviare alla revisione taggata, ad esempio utilizza
10
per inviare il 10% del traffico a quella revisione. - REVISION-FORMER con il nome della revisione attualmente pubblicata.
- PERCENT-FORMER con la percentuale di traffico che vuoi inviare alla vecchia revisione
Sostituisci il servizio con la nuova configurazione utilizzando il seguente comando:
gcloud run services replace service.yaml
Attendi il completamento dell'aggiornamento: dovresti visualizzare un messaggio che ti informa che la nuova revisione che stai implementando gradualmente è stata implementata e sta pubblicando il valore percentuale del traffico che hai utilizzato.
Aggiungi quanto segue al tuo file .tf
:
Nel corso di ore o giorni, a seconda delle esigenze, passa gradualmente da un tag all'altro, aumentando la percentuale in base alle esigenze per la revisione taggata.
Applica inserendo terraform apply
dopo ogni modifica.
Passaggi successivi
- Scopri come utilizzare Cloud Deploy per configurare una pipeline di distribuzione continua per il deployment su Cloud Run.