Rollback, rilasci graduali, migrazione del traffico

Cloud Run ti consente di specificare le revisioni che devono ricevere il traffico e specificare le percentuali di traffico ricevute da una revisione. Questo consente di tornare a una revisione precedente, implementare revisione e suddividere il traffico tra più revisioni. In questa pagina viene descritto come utilizzare questa funzionalità per gestire alle tue revisioni Cloud Run.

Tieni presente che le modifiche al routing del traffico non sono istantanee. Quando modifichi il traffico per revisioni, tutte le richieste attualmente in fase di elaborazione continueranno fino al completamento. In volo richieste non verranno ignorate e potranno essere indirizzate a una nuova revisione o a una durante il periodo di transizione.

Se stai dividendo il traffico tra più revisioni con affinità sessione attivata; consulta Affinità sessione e suddivisione del traffico. per maggiori dettagli sull'effetto dell'affinità sessione sulla suddivisione del traffico.

Ruoli obbligatori

Per ottenere le autorizzazioni necessarie per gestire i servizi e le revisioni di Cloud Run, chiedi all'amministratore di concederti seguenti ruoli IAM:

Per un elenco di ruoli e autorizzazioni IAM associati Cloud Run, consulta Ruoli IAM di Cloud Run e le autorizzazioni IAM di Cloud Run. Se il tuo servizio Cloud Run si interfaccia con Le API Google Cloud, come le librerie client di Cloud, consultano guida alla configurazione dell'identità dei servizi. Per ulteriori informazioni sulla concessione dei ruoli, consulta autorizzazioni di deployment e gestire l'accesso.

Esegui il rollback a una revisione precedente

Per eseguire il rollback a una revisione precedente:

Console

  1. Vai a Cloud Run

  2. Individua il servizio nell'elenco dei servizi e fai clic su .

  3. Fai clic sulla scheda Revisioni per mostrare l'elenco delle revisioni correnti completamente gestito di Google Cloud.

  4. Nell'elenco delle revisioni, fai clic sui puntini di sospensione a destra del revisione di cui esegui il rollback:

    gestione-traffico

  5. Fai clic su Gestisci traffico per visualizzare il modulo di gestione del traffico:

    1. Seleziona nel menu a discesa la revisione precedente di cui vuoi eseguire il rollback dall'elenco di lettura.
    2. Imposta la percentuale di traffico della revisione precedente su 100.
    3. Imposta la percentuale della revisione attualmente in fase di elaborazione su 0.
    4. Fai clic su Salva.

gcloud

Utilizza questo comando:

gcloud run services update-traffic SERVICE --to-revisions REVISION=100

  • Sostituisci SERVICE con il nome del servizio.
  • Sostituisci REVISION con il nome della revisione di cui stai eseguendo il rollback.

YAML

  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.yaml
  2. Sotto l'attributo spec, individua e aggiorna l'attributo traffic in le seguenti:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
     name: SERVICE
    spec:
    ...
      traffic:
      - revisionName: REVISION
        percent: 100
    

    Sostituisci

    • REVISION con il nome della revisione a cui stai eseguendo il rollback.
  3. Sostituisci il servizio con la nuova configurazione utilizzando il seguente comando:

    gcloud run services replace service.yaml
  4. Attendi il completamento dell'aggiornamento: dovresti visualizzare un messaggio che indica che La revisione di cui stai eseguendo il rollback da è già stata sottoposta a deployment e si sta pubblicando 0 percento di traffico.

Terraform

Per scoprire come applicare o rimuovere una configurazione Terraform, consulta: Comandi Terraform di base.

Aggiungi quanto segue al tuo file .tf:

resource "google_cloud_run_v2_service" "default" {
  name     = "cloudrun-srv"
  location = "us-central1"

  template {}

  traffic {
    percent = 100
    # This revision needs to already exist
    revision = "cloudrun-srv-green"
    type     = "TRAFFIC_TARGET_ALLOCATION_TYPE_REVISION"

  }
}

Implementazione graduale per le revisioni

Per implementare gradualmente una nuova revisione:

Console

  1. Vai a Cloud Run

  2. Individua il servizio nell'elenco dei servizi e fai clic su .

  3. Fai clic su Deploy New Revision (Esegui il deployment di nuova revisione).

  4. Compila il modulo di deployment in base alle esigenze, ma assicurati che la casella di controllo sia etichettata L'opzione Pubblica questa revisione immediatamente non è CONTROLLATA.

  5. Fai clic su Esegui il deployment.

  6. Fai clic su Gestisci traffico.

  7. La nuova revisione è elencata ma con una percentuale impostata pari a 0: attualmente lo è non gestisce alcun traffico. Nel modulo:

    1. Impostala sulla percentuale desiderata, per esempio, 5. Tieni presente che la percentuale della versione attualmente pubblicata è automaticamente lo stesso importo.
    2. Fai clic su Salva.
    3. Ripeti questi passaggi per Gestione del traffico con le percentuali modificate. aumentando la percentuale in base alle necessità per la nuova revisione. Non devi per modificare le percentuali di traffico.

gcloud

  1. Esegui il deployment della revisione da implementare gradualmente, impostando inizialmente per non ricevere traffico:

    gcloud run deploy --image IMAGE --no-traffic

    Sostituisci IMAGE con l'immagine di cui stai eseguendo il deployment.

  2. Specifica la percentuale di traffico che vuoi venga gestita dalla nuova revisione. Ad esempio, 5%:

    gcloud run services update-traffic SERVICE --to-revisions REVISION=PERCENTAGE
    • Sostituisci SERVICE con il nome del servizio.
    • Sostituisci REVISION con il nome della revisione che stai che verranno implementate gradualmente. Per specificare la revisione più recente, puoi utilizzare LATEST, ad esempio LATEST=5.
    • Sostituisci PERCENTAGE con la percentuale di traffico che vuoi da inviare alla nuova revisione, ad esempio 5 per inviargli il 5% del traffico.
  3. Quando le prestazioni della revisione sono soddisfacenti, ripeti la precedente update-traffic passaggio, ma aumenta il valore percentuale come preferisci.

YAML

  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.yaml
  2. Apporta le modifiche desiderate alla configurazione del servizio e specifica la nome della revisione per la nuova revisione:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
     name: SERVICE
    template:
      metadata:
        annotations:
          ...
        name: REVISION-NAME
    

    Sostituisci

    • REVISION-NAME con il nome da utilizzare per la nuova revisione avere.
  3. Sotto l'attributo spec, individua e aggiorna l'attributo traffic in modo che la nuova revisione pubblichi solo un 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 100. Sostituisci

    • REVISION-NEW con il nome della revisione che stai implementando gradualmente.
    • REVISION-FORMER con il nome della revisione attualmente in fase di pubblicazione.
    • PERCENT-NEW con la percentuale di traffico da inviare alla nuova revisione, Ad esempio, utilizza 10 per inviare il 10% del traffico a quella revisione.
    • PERCENT-FORMER con la percentuale di traffico da inviare alla revisione precedente
  4. Attendi il completamento dell'aggiornamento: dovresti visualizzare un messaggio che indica che il deployment della nuova revisione che stai implementando gradualmente è stato eseguito e il valore percentuale di traffico utilizzato.

Terraform

Aggiungi quanto segue al file .tf e aggiorna gradualmente la percentuale di traffico dalla revisione precedente all'ultima revisione. Tieni presente che per ogni cambio di traffico sarà necessario eseguire un altro terraform apply.

resource "google_cloud_run_v2_service" "default" {
  name     = "cloudrun-srv"
  location = "us-central1"

  template {
    containers {
      # Image or image tag must be different from previous revision
      image = "us-docker.pkg.dev/cloudrun/container/hello"
    }
  }

  # Define the traffic split for each revision
  # https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/cloud_run_v2_service#traffic
  traffic {
    percent = 100
    # This revision needs to already exist
    revision = "cloudrun-srv-green"
    type     = "TRAFFIC_TARGET_ALLOCATION_TYPE_REVISION"
  }

  traffic {
    # Deploy new revision with 0% traffic
    percent = 0
    type    = "TRAFFIC_TARGET_ALLOCATION_TYPE_LATEST"
  }
}

Applica le modifiche inserendo terraform apply.

Suddividi il traffico tra più revisioni

Per suddividere il traffico tra due o più revisioni:

Console

  1. Vai a Cloud Run

  2. Individua il servizio nell'elenco dei servizi e fai clic su .

  3. Fai clic su Gestisci traffico.

  4. Viene elencata la nuova revisione attualmente in fase di elaborazione. Nel modulo:

    1. Imposta la percentuale di revisione attualmente in pubblicazione sulla suddivisione desiderata.
    2. Seleziona una delle revisioni precedenti usando l'elenco a discesa e imposta con la suddivisione percentuale desiderata.
    3. Per suddividere il traffico tra più revisioni, fai clic su Aggiungi revisione. selezionare la revisione desiderata e impostare la percentuale sulla suddivisione desiderata.
    4. Fai clic su Salva.

gcloud

Specifica le revisioni e la percentuale di traffico per ciascuna revisione in un elenco delimitato da virgole:

gcloud run services update-traffic SERVICE --to-revisions LIST

  • Sostituisci SERVICE con il nome del servizio.
  • Sostituisci LIST con un elenco di revisioni delimitato da virgole e percentuali:
    REVISION1=PERCENTAGE1,REVISION2=PERCENTAGE2,REVISIONn=PERCENTAGEx
    ad esempio hello2-00005-red=25,hello2-00001-bod=25,hello2-00002-nan=50.

YAML

  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.yaml
  2. Sotto l'attributo spec, individua e aggiorna l'attributo traffic in modo che la nuova revisione pubblichi solo un 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 la somma delle percentuali deve essere 100. Sostituisci

    • REVISION-A, REVISION-B e REVISION-C e le revisioni a cui stai allocando il traffico.
    • PERCENT-A, PERCENT-B, PERCENT-C con la percentuale per la revisione corrispondente.
  3. Sostituisci il servizio con la nuova configurazione utilizzando il seguente comando:

    gcloud run services replace service.yaml
  4. Attendi il completamento dell'aggiornamento: dovresti visualizzare un messaggio che indica che il deployment della nuova revisione che stai implementando gradualmente è stato eseguito e 5 percento (o qualsiasi valore graduale utilizzato) di traffico.

Terraform

Aggiungi quanto segue al tuo file .tf:

resource "google_cloud_run_v2_service" "default" {
  name     = "cloudrun-srv"
  location = "us-central1"

  template {
    containers {
      image = "us-docker.pkg.dev/cloudrun/container/hello"
    }
    revision = "cloudrun-srv-green"
  }

  # Define the traffic split for each revision
  # https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/cloud_run_v2_service#traffic
  traffic {
    percent  = 25
    revision = "cloudrun-srv-green"
    type     = "TRAFFIC_TARGET_ALLOCATION_TYPE_REVISION"
  }

  traffic {
    percent = 75
    # This revision needs to already exist
    revision = "cloudrun-srv-blue"
    type     = "TRAFFIC_TARGET_ALLOCATION_TYPE_REVISION"
  }
}

Applica le modifiche inserendo terraform apply.

Invia tutto il traffico all'ultima revisione

Quando esegui il deployment di una nuova revisione, puoi rendere questa e tutte quelle future gestire il 100% del traffico il prima possibile, con l'override di qualsiasi suddivisione del traffico:

Console

  1. Vai a Cloud Run

  2. Individua il servizio nell'elenco dei servizi e fai clic su .

  3. Fai clic su Deploy New Revision (Esegui il deployment di nuova revisione).

  4. Compila il modulo di deployment, se necessario, assicurandoti di controllare con la casella di controllo Pubblica questa revisione immediatamente. Verranno sostituite eventuali la suddivisione del traffico esistente, con la nuova revisione che gestisce il 100% per via del traffico.

  5. Fai clic su Esegui il deployment.

gcloud

Per inviare tutto il traffico alla revisione di cui è stato eseguito il deployment più recente:

gcloud run services update-traffic SERVICE --to-latest

Sostituisci SERVICE con il nome del servizio.

YAML

  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.yaml
  2. Sotto l'attributo spec, individua e aggiorna l'attributo traffic come segue

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
     name: SERVICE
    spec:
    ...
      traffic:
      - latestRevision: true
        percent: 100
    
  3. Sostituisci il servizio con la nuova configurazione utilizzando il seguente comando:

    gcloud run services replace service.yaml
  4. Attendi il completamento dell'aggiornamento: dovresti visualizzare un messaggio che indica che è stato eseguito il deployment della revisione (più recente) che gestisce il 100 percento del traffico.

Terraform

Aggiungi quanto segue al tuo file .tf:

resource "google_cloud_run_v2_service" "default" {
  name     = "cloudrun-srv"
  location = "us-central1"

  template {}

  traffic {
    percent = 100
    type    = "TRAFFIC_TARGET_ALLOCATION_TYPE_LATEST"
  }
}

Applica le modifiche inserendo terraform apply.

Utilizza 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, usa service-level numero minimo di istanze rimuovi i tag sulle revisioni quando non ti servono più.

Un caso d'uso comune di questa funzionalità è l'uso per testare e controllare un nuova revisione del servizio prima di gestire il traffico, in questa sequenza tipica:

  1. Esegui test di integrazione su un container durante lo sviluppo.
  2. Esegui il deployment del container in un progetto Google Cloud che utilizzi solo per gestione temporanea, senza traffico e test rispetto a una revisione con tag.
  3. Esegui il deployment dell'app in produzione, senza gestire il traffico, e testa rispetto a una revisione con tag in produzione.
  4. Esegui la migrazione del traffico alla revisione con tag.

Esegui il deployment di una nuova revisione con tag

Per eseguire il deployment in produzione di una nuova revisione di un servizio esistente:

gcloud

gcloud run deploy myservice --image IMAGE_URL  --no-traffic --tag TAG_NAME

Sostituisci

  • IMAGE_URL con l'URL della tua immagine
  • TAG_NAME con il nome del tag in minuscolo

Il tag consente di testare direttamente la nuova revisione in un URL specifico, senza gestire il traffico. L'URL inizia con il nome del tag che hai fornito, ad esempio Se utilizzassi il nome tag green sul servizio myservice, dovresti testa la revisione codificata all'URL https://green---myservice-abcdef.a.run.app

Terraform

Aggiungi quanto segue al file .tf e aggiorna gradualmente la percentuale di traffico dalla vecchia revisione alla revisione più recente con il nuovo tag. Tieni presente che per ogni cambio di traffico sarà necessario eseguire un altro terraform apply.

resource "google_cloud_run_v2_service" "default" {
  name     = "cloudrun-srv"
  location = "us-central1"

  template {
    containers {
      # image or tag must be different from previous revision
      image = "us-docker.pkg.dev/cloudrun/container/hello"
    }
    revision = "cloudrun-srv-blue"
  }

  # Define the traffic split for each revision
  # https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/cloud_run_v2_service#traffic
  traffic {
    percent = 100
    # This revision needs to already exist
    revision = "cloudrun-srv-green"
    type     = "TRAFFIC_TARGET_ALLOCATION_TYPE_REVISION"
  }

  traffic {
    # Deploy new revision with 0% traffic
    percent  = 0
    revision = "cloudrun-srv-blue"
    tag      = "tag-name"
    type     = "TRAFFIC_TARGET_ALLOCATION_TYPE_REVISION"
  }
}

Applica le modifiche inserendo terraform apply.

Rimuovere un tag

Per rimuovere un tag da una revisione:

Console

  1. Vai a Cloud Run

  2. Individua il servizio nell'elenco dei servizi e fai clic su .

  3. Vai alla sezione Revisioni all'interno del servizio desiderato e seleziona la revisione per la quale vuoi rimuovere il tag esistente.

  4. Passa il mouse sopra la colonna URL delle revisioni (tag) e fai clic sull'icona a forma di matita come mostrato di seguito.

    eliminazione-tag

  5. Nel menu popup URL revisione, fai clic sull'icona Cestino per rimuovere il tag corrente utilizzato nella revisione.

  6. Fai clic su Salva.

gcloud

Per rimuovere un tag di revisione:

gcloud run services update-traffic SERVICE --remove-tags TAG_NAME

Sostituisci

  • TAG_NAME con il nome del tag su cui stai eseguendo la migrazione del traffico
  • SERVICE con il nome del servizio da cui stai rimuovendo il tag

YAML

  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.yaml
  2. Apporta le modifiche necessarie alla configurazione del servizio.

  3. Sotto l'attributo spec, individua e rimuovi l'attributo tag per la revisione taggata:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
     name: SERVICE
    spec:
    ...
      traffic:
      - revisionName: REVISION
        tag: TAG_NAME
        percent: PERCENT-NEW
    
  4. Sostituisci il servizio con la nuova configurazione utilizzando il seguente comando:

    gcloud run services replace service.yaml

Terraform

Aggiungi quanto segue al tuo file .tf:

resource "google_cloud_run_v2_service" "default" {
  name     = "cloudrun-srv"
  location = "us-central1"

  template {}

  # Define the traffic split for each revision
  # https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/cloud_run_v2_service#traffic
  traffic {
    percent = 100
    # This revision needs to already exist
    revision = "cloudrun-srv-green"
    type     = "TRAFFIC_TARGET_ALLOCATION_TYPE_REVISION"
  }

  traffic {
    # No tags for this revision
    # Keep revision at 0% traffic
    percent = 0
    # This revision needs to already exist
    revision = "cloudrun-srv-blue"
    type     = "TRAFFIC_TARGET_ALLOCATION_TYPE_REVISION"
  }
}

Applica le modifiche inserendo terraform apply.

Migrazione del traffico a una revisione con tag

Dopo aver confermato che la nuova revisione funziona correttamente, puoi iniziare la migrazione per il traffico usando la console Google Cloud, lo strumento alla riga di comando, Terraform o un file YAML:

Console

  1. Vai a Cloud Run

  2. Individua il servizio nell'elenco dei servizi e fai clic su su di esso:

  3. Seleziona la revisione con tag a cui vuoi inviare il traffico:

    gestione-traffico

  4. Fai clic su Gestisci traffico.

  5. Individua il nome della revisione con tag: è elencato, ma con una percentuale impostata su 0: al momento non gestisce traffico. Nel modulo Gestisci traffico*:

    1. Impostala sulla percentuale desiderata, per esempio, 5. Tieni presente che la percentuale della versione attualmente pubblicata è automaticamente lo stesso importo.
    2. Fai clic su Salva.
    3. Per un periodo di ore o giorni, se necessario, ripeti questi passaggi Passaggi per gestire il traffico, ma con percentuali modificate. aumentando la percentuale in base alle necessità per la revisione con tag. Non devi per modificare le percentuali di traffico.

gcloud

Per eseguire la migrazione del traffico a un tag di revisione specifico:

gcloud run services update-traffic myservice --to-tags TAG_NAME=TRAFFIC_PERCENT

Sostituisci

  • TAG_NAME con il nome del tag su cui stai eseguendo la migrazione del traffico
  • TRAFFIC_PERCENT con la percentuale di traffico che vuoi la revisione codificata da pubblicare, ad esempio 1.

YAML

  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.yaml
  2. Apporta le modifiche necessarie alla configurazione del servizio.

  3. Sotto l'attributo spec, individua e aggiorna l'attributo traffic per la revisione taggata in modo che revisione gestisce 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 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 a cui vuoi inviare i messaggi la revisione con tag, ad esempio utilizza 10 per inviare il 10% del traffico a quella revisione.
    • REVISION-FORMER con il nome della revisione attualmente in fase di pubblicazione.
    • PERCENT-FORMER con la percentuale di traffico da inviare alla revisione precedente
  4. Sostituisci il servizio con la nuova configurazione utilizzando il seguente comando:

    gcloud run services replace service.yaml
  5. Attendi il completamento dell'aggiornamento: dovresti visualizzare un messaggio che indica che il deployment della nuova revisione che stai implementando gradualmente è stato eseguito e il valore percentuale di traffico utilizzato.

Terraform

Aggiungi quanto segue al tuo file .tf:

resource "google_cloud_run_v2_service" "default" {
  name     = "cloudrun-srv"
  location = "us-central1"

  template {}

  # Define the traffic split for each revision
  # https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/cloud_run_v2_service#traffic
  traffic {
    # Update revision to 50% traffic
    percent = 50
    # This revision needs to already exist
    revision = "cloudrun-srv-green"
    type     = "TRAFFIC_TARGET_ALLOCATION_TYPE_REVISION"
  }

  traffic {
    # Update tag to 50% traffic
    percent = 50
    # This tag needs to already exist
    tag = "tag-name"
  }
}

Per un periodo di ore o giorni, se necessario, aggiorna gradualmente da un tag all'altro, aumentando la percentuale in base alle esigenze della revisione con tag.

Fai domanda inserendo terraform apply dopo ogni modifica.

Passaggi successivi