Rollback, rilasci graduali, migrazione del traffico

La pubblicazione Knative ti consente di specificare quali revisioni 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 (noto anche come deployment blu/verde) e suddividere il traffico tra più revisioni. Questa pagina descrive come utilizzare questa funzionalità per gestire il traffico verso le revisioni di pubblicazione di Knative.

Eseguire il rollback a una revisione precedente

Per eseguire il rollback a una revisione precedente:

Console

  1. Vai a Erogazione Knative nella console Google Cloud:

    Vai a Knative serving

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

  3. Fai clic sulla scheda Revisioni per visualizzare l'elenco delle revisioni correnti per quel servizio.

  4. Nell'elenco delle revisioni, fai clic sull'icona dei tre puntini a destra della revisione di cui vuoi eseguire il rollback:

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

    1. Seleziona la revisione precedente a cui vuoi eseguire il rollback nell'elenco a discesa.
    2. Imposta la percentuale di traffico della revisione precedente su 100.
    3. Imposta la percentuale della revisione attualmente pubblicata su 0.
    4. Fai clic su Salva.

Riga di comando

Utilizza il seguente 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 a cui vuoi eseguire il rollback.

YAML

Puoi scaricare la configurazione di un servizio esistente in un file YAML con il comando gcloud run services describe utilizzando il --format=export flag. Puoi quindi modificare il file YAML e implementare queste modifiche con il comando gcloud run services replace. Devi assicurarti di modificare solo gli attributi specificati.

  1. Scarica la configurazione del servizio in un file denominato service.yaml nello spazio di lavoro locale:

    gcloud run services describe SERVICE --format export > service.yaml

    Sostituisci SERVICE con il nome del servizio Knative serving.

  2. Nel file locale, aggiorna l'attributo traffic che si trova in spec:

    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 vuoi eseguire il rollback.
  3. Sostituisci il servizio con la nuova configurazione utilizzando il seguente comando:

    gcloud run services replace service.yaml

Implementazione graduale di una revisione

Per implementare gradualmente una nuova revisione (deployment blu/verde):

Console

  1. Vai a Erogazione Knative nella console Google Cloud:

    Vai a Knative serving

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

  3. Fai clic su Esegui il deployment di una nuova revisione.

  4. Compila il modulo di deployment in base alle tue esigenze, ma assicurati che la casella di controllo Pubblica questa revisione immediatamente NON sia selezionata.

  5. Fai clic su Esegui il deployment.

  6. Fai clic su Gestisci traffico.

  7. La nuova revisione è elencata, ma con una percentuale impostata su 0: al momento non gestisce alcun traffico. Nel modulo:

    1. Imposta la percentuale desiderata, ad esempio 5. Tieni presente che la percentuale della versione attualmente pubblicata viene ridotta automaticamente della stessa quantità.
    2. Fai clic su Salva.
    3. 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.

Riga di comando

  1. Per implementare la revisione che vuoi implementare gradualmente, impostandola inizialmente in modo che non riceva traffico, utilizza il comando update con il parametro --no-traffic:

    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 che venga gestita dalla nuova revisione, ad esempio il 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 implementando gradualmente. Per specificare la revisione più recente, puoi utilizzare LATEST, ad esempio LATEST=5.
    • Sostituisci PERCENTAGE con la percentuale di traffico che vuoi inviare alla nuova revisione, ad esempio 5 per inviare il 5% di traffico.
  3. Quando il rendimento della revisione è soddisfacente, ripeti il passaggio precedenteupdate-traffic, ma aumenta il valore percentuale in base alle tue esigenze.

YAML

Puoi scaricare la configurazione di un servizio esistente in un file YAML con il comando gcloud run services describe utilizzando il --format=export flag. Puoi quindi modificare il file YAML e implementare queste modifiche con il comando gcloud run services replace. Devi assicurarti di modificare solo gli attributi specificati.

  1. Scarica la configurazione del servizio in un file denominato service.yaml nello spazio di lavoro locale:

    gcloud run services describe SERVICE --format export > service.yaml

    Sostituisci SERVICE con il nome del servizio Knative serving.

  2. Apporta le modifiche di configurazione necessarie al servizio come descritto nelle varie pagine di configurazione e specifica il nome della revisione che vuoi per la nuova revisione:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
     name: SERVICE
    template:
      metadata:
        annotations:
          ...
        name: REVISION-NAME
     ```
    
    Replace
    
    • REVISION-NAME con il nome che vuoi assegnare alla nuova revisione.
  3. Sotto l'attributo spec, individua e aggiorna l'attributo traffic 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 le percentuali devono essere pari al 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

Suddivisione del traffico tra più revisioni

Per suddividere il traffico tra due o più revisioni:

Console

  1. Vai a Erogazione Knative nella console Google Cloud:

    Vai a Knative serving

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

  3. Fai clic su Gestisci traffico.

  4. Viene elencata la nuova revisione attualmente pubblicata. Nel modulo:

    1. Imposta la percentuale di revisione attualmente pubblicata sulla suddivisione desiderata.
    2. Seleziona una delle revisioni precedenti utilizzando l'elenco a discesa e impostala sulla suddivisione in percentuale che preferisci.
    3. 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.
    4. Fai clic su Salva.

Riga di comando

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

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

Sostituisci:

  • SERVICE con il nome del servizio.
  • LIST con un elenco separato da virgole delle revisioni per le quali vuoi ricevere il traffico e la percentuale di traffico corrispondente, che deve ammontare al 100%:
    REVISION1=PERCENTAGE1,REVISION2=PERCENTAGE2,REVISIONn=PERCENTAGEn
    ad esempio hello2-00005-red=25,hello2-00001-bod=25,hello2-00002-nan=50.

YAML

Puoi scaricare la configurazione di un servizio esistente in un file YAML con il comando gcloud run services describe utilizzando il --format=export flag. Puoi quindi modificare il file YAML e implementare queste modifiche con il comando gcloud run services replace. Devi assicurarti di modificare solo gli attributi specificati.

  1. Scarica la configurazione del servizio in un file denominato service.yaml nello spazio di lavoro locale:

    gcloud run services describe SERVICE --format export > service.yaml

    Sostituisci SERVICE con il nome del servizio Knative serving.

  2. Nel file locale, aggiorna l'attributo traffic in modo che la nuova revisione serva 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.
  3. Sostituisci il servizio con la nuova configurazione utilizzando il seguente comando:

    gcloud run services replace service.yaml

Invio di 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:

Console

  1. Vai a Erogazione Knative nella console Google Cloud:

    Vai a Knative serving

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

  3. Fai clic su Esegui il deployment di una nuova revisione.

  4. 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 e la nuova revisione pubblicherà il 100% del traffico.

  5. Fai clic su Esegui il deployment.

Riga di comando

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

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

Sostituisci SERVICE con il nome del servizio.

YAML

Puoi scaricare la configurazione di un servizio esistente in un file YAML con il comando gcloud run services describe utilizzando il --format=export flag. Puoi quindi modificare il file YAML e implementare queste modifiche con il comando gcloud run services replace. Devi assicurarti di modificare solo gli attributi specificati.

  1. Scarica la configurazione del servizio in un file denominato service.yaml nello spazio di lavoro locale:

    gcloud run services describe SERVICE --format export > service.yaml

    Sostituisci SERVICE con il nome del servizio Knative serving.

  2. Nel file locale, aggiorna l'attributo traffic che si trova in spec:

    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

Utilizzare i tag per i test, la migrazione del traffico e i rollback

Dopo aver implementato un servizio, puoi creare una nuova revisione e assegnare un tag che ti consenta di accedere alla revisione in un URL specifico senza pubblicare traffico. Puoi quindi utilizzare questo tag per eseguire gradualmente la migrazione del traffico alla revisione taggata e per eseguire il rollback di una revisione taggata.

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:

  1. Esegui test di integrazione su un contenitore durante lo sviluppo.
  2. Esegui il deployment del contenitore in un progetto Google Cloud che utilizzi solo per il pre-trattamento, senza generare traffico, e testa con una revisione taggata.
  3. Esegui il deployment in produzione, senza pubblicare il traffico, e testa in base a una revisione con tag in produzione.
  4. Esegui la migrazione del traffico alla revisione taggata.

Eseguire il deployment di una nuova revisione con tag

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

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

Sostituisci:

  • IMAGE_URL con l'URL dell'immagine
  • 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 di test inizia con il nome del tag che hai fornito: http://{TAG_NAME}---{SERVICE_NAME}.{NAMESPACE}.kuberun.{EXTERNAL_IP}.nip.io

Ad esempio, se hai utilizzato il nome del tag green per il servizio myservice, dovrai testare la revisione taggata all'URL: https://green---myservice.default.kuberun.11.111.11.111.nip.io

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 o un file YAML:

Console

  1. Vai a Erogazione Knative nella console Google Cloud:

    Vai a Knative serving

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

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

  4. Fai clic su Gestisci traffico.

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

    1. Imposta la percentuale desiderata, ad esempio 5. Tieni presente che la percentuale della versione attualmente pubblicata viene ridotta automaticamente della stessa quantità.
    2. Fai clic su Salva.
    3. 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.

Riga di comando

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

gcloud run deploy update-traffic myservice --tag TAG_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.

YAML

Puoi scaricare la configurazione di un servizio esistente in un file YAML con il comando gcloud run services describe utilizzando il --format=export flag. Puoi quindi modificare il file YAML e implementare queste modifiche con il comando gcloud run services replace. Devi assicurarti di modificare solo gli attributi specificati.

  1. Scarica la configurazione del servizio in un file denominato service.yaml nello spazio di lavoro locale:

    gcloud run services describe SERVICE --format export > service.yaml

    Sostituisci SERVICE con il nome del servizio Knative serving.

  2. Apporta le modifiche di configurazione necessarie al servizio come descritto nelle varie pagine di configurazione.

  3. Sotto l'attributo spec, individua e aggiorna l'attributo traffic 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 le percentuali devono essere pari al 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
  4. Sostituisci il servizio con la nuova configurazione utilizzando il seguente comando:

    gcloud run services replace service.yaml