Upgrade di Anthos Service Mesh on-premise

Questa guida spiega come eseguire l'upgrade di Anthos Service Mesh dalla versione 1.7.3+ or a 1.8 patch release alla versione 1.8.6 su GKE su VMware. Gli upgrade dalle versioni precedenti non sono supportati. Se hai una versione precedente e devi eseguire l'upgrade, consulta Upgrade dalle versioni precedenti.

Quando esegui l'upgrade, ti consigliamo di eseguire un upgrade basato su revisione (noto anche come "upgrade canary") in cui sia la nuova versione che quella precedente del piano di controllo vengono eseguite durante il test della nuova versione con una piccola percentuale dei carichi di lavoro. Questo approccio è più sicuro rispetto a un upgrade in loco, in cui la nuova versione del piano di controllo sostituisce quella precedente. Tieni presente che viene eseguito l'upgrade di istio-ingressgateway, pertanto dovresti pianificare alcune interruzioni del cluster.

Il deployment dei componenti del piano di controllo di Anthos Service Mesh richiede circa 5-10 minuti. Inoltre, devi inserire nuovi proxy sidecar in tutti i tuoi carichi di lavoro in modo che vengano aggiornati all'attuale versione di Anthos Service Mesh. Il tempo necessario per aggiornare i proxy sidecar dipende da molti fattori, come il numero di pod e di nodi, le impostazioni di scalabilità del deployment, i budget per l'interruzione dei pod e altre impostazioni di configurazione. Una stima approssimativa del tempo necessario per aggiornare i proxy sidecar è di 100 pod al minuto.

Preparazione per l'upgrade

Se hai personalizzato l'installazione precedente, hai bisogno delle stesse personalizzazioni quando esegui l'upgrade ad Anthos Service Mesh. Se hai personalizzato l'installazione aggiungendo il flag --set values a istioctl install, ti consigliamo di aggiungere queste impostazioni a un file YAML IstioOperator (anche se puoi continuare a utilizzare il flag --set_values). Per personalizzare l'installazione, specifica il flag -f con un file YAML quando esegui il comando istioctl install.

Configurazione dell'ambiente

Devi disporre dei seguenti strumenti sulla macchina da cui vuoi installare Anthos Service Mesh. Tieni presente che puoi installare Anthos Service Mesh solo su un cluster utente, non su un cluster di amministrazione.

Dopo l'installazione di Google Cloud CLI:

  1. Esegui l'autenticazione con Google Cloud CLI:

    gcloud auth login
    
  2. Aggiorna i componenti:

    gcloud components update
    
  3. Installa kubectl:

    gcloud components install kubectl
    
  4. Installa la versione richiesta di kpt:

       curl -L https://github.com/GoogleContainerTools/kpt/releases/download/v0.39.2/kpt_linux_amd64 > kpt_0_39_2
       chmod +x kpt_0_39_2
       alias kpt="$(readlink -f kpt_0_39_2)"
    
  5. Cambia il contesto nel tuo cluster utente:

    kubectl config use-context CLUSTER_NAME
  6. Concedi le autorizzazioni di amministratore del cluster al tuo account utente (l'indirizzo email di accesso a Google Cloud). Devi disporre di queste autorizzazioni per creare le regole di controllo dell'controllo dell'accesso basato sui ruoli (RBAC) necessarie per Anthos Service Mesh:

    kubectl create clusterrolebinding cluster-admin-binding \
      --clusterrole=cluster-admin \
      --user=USER_ACCOUNT

Download del file di installazione in corso...

    Linux

  1. Scarica il file di installazione di Anthos Service Mesh nella directory di lavoro attuale:
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.8.6-asm.8-linux-amd64.tar.gz
  2. Scarica il file della firma e utilizza openssl per verificare la firma:
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.8.6-asm.8-linux-amd64.tar.gz.1.sig
    openssl dgst -verify /dev/stdin -signature istio-1.8.6-asm.8-linux-amd64.tar.gz.1.sig istio-1.8.6-asm.8-linux-amd64.tar.gz <<'EOF'
    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
    wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
    -----END PUBLIC KEY-----
    EOF

    L'output previsto è: Verified OK

  3. Estrai i contenuti del file in qualsiasi posizione nel file system. Ad esempio, per estrarre i contenuti nella directory di lavoro corrente:
    tar xzf istio-1.8.6-asm.8-linux-amd64.tar.gz

    Il comando crea una directory di installazione nella directory di lavoro attuale denominata istio-1.8.6-asm.8 che contiene:

    • Applicazioni di esempio nella directory samples.
    • Lo strumento a riga di comando istioctl che utilizzi per installare Anthos Service Mesh si trova nella directory bin.
    • I profili di configurazione di Anthos Service Mesh si trovano nella directory manifests/profiles.

  4. Assicurati di essere nella directory principale dell'installazione di Anthos Service Mesh.
    cd istio-1.8.6-asm.8
  5. Mac OS

  6. Scarica il file di installazione di Anthos Service Mesh nella directory di lavoro attuale:
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.8.6-asm.8-osx.tar.gz
  7. Scarica il file della firma e utilizza openssl per verificare la firma:
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.8.6-asm.8-osx.tar.gz.1.sig
    openssl dgst -sha256 -verify /dev/stdin -signature istio-1.8.6-asm.8-osx.tar.gz.1.sig istio-1.8.6-asm.8-osx.tar.gz <<'EOF'
    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
    wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
    -----END PUBLIC KEY-----
    EOF

    L'output previsto è: Verified OK

  8. Estrai i contenuti del file in qualsiasi posizione nel file system. Ad esempio, per estrarre i contenuti nella directory di lavoro corrente:
    tar xzf istio-1.8.6-asm.8-osx.tar.gz

    Il comando crea una directory di installazione nella directory di lavoro attuale denominata istio-1.8.6-asm.8 che contiene:

    • Applicazioni di esempio nella directory samples.
    • Lo strumento a riga di comando istioctl che utilizzi per installare Anthos Service Mesh si trova nella directory bin.
    • I profili di configurazione di Anthos Service Mesh si trovano nella directory manifests/profiles.

  9. Assicurati di essere nella directory principale dell'installazione di Anthos Service Mesh.
    cd istio-1.8.6-asm.8
  10. Windows

  11. Scarica il file di installazione di Anthos Service Mesh nella directory di lavoro attuale:
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.8.6-asm.8-win.zip
  12. Scarica il file della firma e utilizza openssl per verificare la firma:
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.8.6-asm.8-win.zip.1.sig
    openssl dgst -verify - -signature istio-1.8.6-asm.8-win.zip.1.sig istio-1.8.6-asm.8-win.zip <<'EOF'
    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
    wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
    -----END PUBLIC KEY-----
    EOF

    L'output previsto è: Verified OK

  13. Estrai i contenuti del file in qualsiasi posizione nel file system. Ad esempio, per estrarre i contenuti nella directory di lavoro corrente:
    tar xzf istio-1.8.6-asm.8-win.zip

    Il comando crea una directory di installazione nella directory di lavoro attuale denominata istio-1.8.6-asm.8 che contiene:

    • Applicazioni di esempio nella directory samples.
    • Lo strumento a riga di comando istioctl che utilizzi per installare Anthos Service Mesh si trova nella directory bin.
    • I profili di configurazione di Anthos Service Mesh si trovano nella directory manifests/profiles.

  14. Assicurati di essere nella directory principale dell'installazione di Anthos Service Mesh.
    cd istio-1.8.6-asm.8

Preparazione dei file di configurazione delle risorse

Quando esegui il comando istioctl install, includi il file revisioned-custom-ingressgateway.yaml nella riga di comando. Questo file consente di controllare quando passi alla nuova versione di istio-ingressgateway dopo l'upgrade. Segui questi passaggi per scaricare e configurare questo file:

  1. Passa alla directory in cui vuoi scaricare il pacchetto anthos-service-mesh.

  2. Scarica il pacchetto:

    kpt pkg get \
    https://github.com/GoogleCloudPlatform/anthos-service-mesh-packages.git/asm@release-1.8-asm asm
    
  3. Imposta il tag sulla versione di Anthos Service Mesh che stai installando:

    kpt cfg set asm anthos.servicemesh.tag 1.8.6-asm.8
    
  4. Imposta il webhook di convalida in modo che utilizzi un'etichetta di revisione:

    kpt cfg set asm anthos.servicemesh.rev asm-186-8
    

    Quando installi Anthos Service Mesh, imposti un'etichetta di revisione su istiod. Devi impostare la stessa revisione sul webhook di convalida.

Upgrade di Anthos Service Mesh

Per installare una nuova versione di Anthos Service Mesh, ti consigliamo di seguire il processo di upgrade basato su revisioni (chiamato anche "upgrade canary"). Con un upgrade basato su revisione, puoi installare una nuova versione del piano di controllo insieme a quello esistente. Quando installi la nuova versione, includi un'etichetta revision che identifica la versione del nuovo piano di controllo. Ogni revisione è un'implementazione completa del piano di controllo Anthos Service Mesh con il proprio deployment e servizio.

Successivamente, potrai eseguire la migrazione alla nuova versione impostando la stessa etichetta revision sui tuoi carichi di lavoro in modo che puntino al nuovo piano di controllo ed eseguendo un riavvio in sequenza per reinserire i proxy con la nuova versione di Anthos Service Mesh. Con questo approccio, puoi monitorare l'effetto dell'upgrade su una piccola percentuale dei carichi di lavoro. Dopo aver testato l'applicazione, puoi eseguire la migrazione di tutto il traffico alla nuova versione. Questo approccio è molto più sicuro rispetto a un upgrade in loco in cui un nuovo piano di controllo sostituisce la versione precedente.

Aggiornamento del piano di controllo

  1. Se necessario, passa alla directory istio-1.8.6-asm.8. Il client istioctl dipende dalla versione. Assicurati di utilizzare la versione presente nella directory istio-1.8.6-asm.8/bin.

  2. Esegui questo comando per eseguire il deployment del nuovo piano di controllo. Se vuoi abilitare una funzionalità facoltativa supportata, includi -f e il nome del file YAML nella riga di comando seguente. Per ulteriori informazioni, consulta Attivazione delle funzionalità facoltative.

    bin/istioctl install \
      --set profile=asm-multicloud \
      -f asm/istio/options/revisioned-istio-ingressgateway.yaml \
      --set revision=asm-186-8

L'argomento --set revision aggiunge un'etichetta istio.io/rev a istiod. Dopo aver eseguito il comando, vengono eseguiti due deployment e servizi del piano di controllo affiancati:

kubectl get pods -n istio-system

Deployment e nuovo deployment dei carichi di lavoro

  1. Recupera l'etichetta di revisione che si trova su istiod e istio-ingressgateway.

    kubectl get pod -n istio-system -L istio.io/rev
    

    L'output del comando è simile al seguente.

    NAME                                             READY   STATUS    RESTARTS   AGE   REV
    istio-ingressgateway-65d884685d-6hrdk            1/1     Running   0          67m
    istio-ingressgateway-65d884685d-94wgz            1/1     Running   0          67m
    istio-ingressgateway-asm-182-2-8b5fc8767-gk6hb   1/1     Running   0          5s    asm-186-8
    istio-ingressgateway-asm-182-2-8b5fc8767-hn4w2   1/1     Running   0          20s   asm-186-8
    istiod-asm-176-1-67998f4b55-lrzpz                1/1     Running   0          68m   asm-178-10
    istiod-asm-176-1-67998f4b55-r76kr                1/1     Running   0          68m   asm-178-10
    istiod-asm-182-2-5cd96f88f6-n7tj9                1/1     Running   0          27s   asm-186-8
    istiod-asm-182-2-5cd96f88f6-wm68b                1/1     Running   0          27s   asm-186-8
    1. Tieni presente se hai sia la vecchia che la nuova versione dell'istio-ingressgateway.

      • Se hai incluso l'opzione revisioned-istio-ingressgateway durante l'upgrade, è stato eseguito un upgrade canary di istio-ingressgateway. In questo caso, l'output mostra sia la versione precedente che quella nuova di istio-ingressgateway.

      • Se non hai incluso revisioned-istio-ingressgateway durante l'upgrade, è stato eseguito un upgrade in loco di istio-ingressgateway. In questo caso, l'output mostra solo la nuova versione.

    2. Nell'output, sotto la colonna REV, prendi nota del valore dell'etichetta di revisione per la nuova versione. In questo esempio, il valore è asm-186-8.

    3. Nota anche il valore nell'etichetta di revisione per la vecchia versione di istiod. Questa operazione ti consente di eliminare la versione precedente di istiod quando hai finito di spostare i carichi di lavoro alla nuova versione. Nell'output di esempio, il valore dell'etichetta di revisione per la versione precedente è asm-178-10.

  2. Se hai sia la versione precedente che quella nuova di istio-ingressgateway, trasferisci il istio-ingressgateway alla nuova revisione. Nel seguente comando, modifica REVISION con il valore che corrisponde all'etichetta di revisione della nuova versione.

    kubectl patch service -n istio-system istio-ingressgateway --type='json' -p='[{"op": "replace", "path": "/spec/selector/service.istio.io~1canonical-revision", "value": "REVISION"}]'

    Output previsto: service/istio-ingressgateway patched

  3. Aggiungi l'etichetta di revisione a uno spazio dei nomi e rimuovi l'etichetta istio-injection (se esistente). Nel comando seguente, imposta REVISION sul valore che corrisponde alla nuova revisione di istiod.

    kubectl label namespace NAMESPACE istio.io/rev=REVISION istio-injection- --overwrite

    Se vedi "istio-injection not found" nell'output, puoi ignorarlo. Ciò significa che in precedenza lo spazio dei nomi non aveva l'etichetta istio-injection. Poiché l'inserimento automatica non riesce se uno spazio dei nomi contiene sia l'etichetta istio-injection sia l'etichetta di revisione, tutti i comandi kubectl label nella documentazione di Anthos Service Mesh comprendono la rimozione dell'etichetta istio-injection.

  4. Riavvia i pod per attivare la reinserimento.

    kubectl rollout restart deployment -n NAMESPACE
  5. Verifica che i pod siano configurati in modo da puntare alla nuova versione di istiod.

    kubectl get pods -n NAMESPACE -l istio.io/rev=REVISION
  6. Testa l'applicazione per verificare che i carichi di lavoro funzionino correttamente.

  7. Se disponi di carichi di lavoro in altri spazi dei nomi, ripeti i passaggi per etichettare lo spazio dei nomi e riavviare i pod.

  8. Se sei soddisfatto del funzionamento previsto dell'applicazione, continua con i passaggi per la transizione alla nuova versione di istiod. Se si verifica un problema con l'applicazione, segui la procedura per eseguire il rollback.

  9. Esegui di nuovo il comando seguente per confermare se disponi sia della versione precedente che di quella nuova di istio-ingressgateway o solo della nuova versione. Questo determina la modalità di gestione della transizione alla nuova versione di istio-ingressgateway o del rollback alla versione precedente.

    kubectl get pod -n istio-system -L istio.io/rev
    

    Completa la transizione

    Se l'applicazione funziona come previsto, rimuovi il piano di controllo precedente per completare la transizione alla nuova versione.

    1. Passa alla directory in cui si trovano i file del repository GitHub di anthos-service-mesh.

    2. Configura il webhook di convalida per utilizzare il nuovo piano di controllo.

      kubectl apply -f asm/istio/istiod-service.yaml
      
    3. Se hai sia la versione precedente che quella nuova di istio-ingressgateway, elimina il deployment di istio-ingressgateway precedente. Il comando da eseguire dipende dalla migrazione da Istio o da una versione precedente di Anthos Service Mesh:

      Esegui migrazione

      Se hai eseguito la migrazione da Istio, il vecchio istio-ingressgateway non avrà un'etichetta di revisione.

      kubectl delete deploy/istio-ingressgateway -n istio-system
      

      Esegui l'upgrade

      Se hai eseguito l'upgrade da una versione precedente di Anthos Service Mesh, nel comando seguente sostituisci OLD_REVISION con l'etichetta di revisione della versione precedente di istio-ingressgateway.

      kubectl delete deploy -l app=istio-ingressgateway,istio.io/rev=OLD_REVISION -n istio-system --ignore-not-found=true
      
    4. Elimina la versione precedente di istiod. Il comando da utilizzare varia a seconda che tu stia eseguendo la migrazione da Istio o da una versione precedente di Anthos Service Mesh.

      Esegui migrazione

      Se hai eseguito la migrazione da Istio, il vecchio istiod non avrà un'etichetta di revisione.

      kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget istiod -n istio-system --ignore-not-found=true
      

      Esegui l'upgrade

      Se hai eseguito l'upgrade da una versione precedente di Anthos Service Mesh, assicurati che OLD_REVISION corrisponda all'etichetta di revisione della versione precedente di istiod nel comando seguente.

      kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget istiod-OLD_REVISION -n istio-system --ignore-not-found=true
      
    5. Rimuovi la versione precedente della configurazione di IstioOperator.

      kubectl delete IstioOperator installed-state-OLD_REVISION -n istio-system
      

      L'output previsto è simile al seguente:

      istiooperator.install.istio.io "installed-state-OLD_REVISION" deleted

    Esegui il rollback

    Se hai riscontrato un problema durante il test dell'applicazione con la nuova versione di istiod, segui questi passaggi per ripristinare la versione precedente:

    1. Torna alla versione precedente di istio-ingressgateway. Il comando da utilizzare varia a seconda che tu abbia sia la versione precedente che quella nuova di istio-ingressgateway o solo la nuova versione.

      • Se hai sia la versione precedente che quella nuova di istio-ingressgateway, esegui il comando kubectl patch service e sostituisci OLD_REVISION con la vecchia revisione.

        kubectl patch service -n istio-system istio-ingressgateway --type='json' -p='[{"op": "replace", "path": "/spec/selector/service.istio.io~1canonical-revision", "value": "OLD_REVISION"}]'
        
      • Se hai solo la nuova versione di istio-ingressgateway, esegui il comando kubectl rollout undo.

        kubectl -n istio-system rollout undo deploy istio-ingressgateway
        
    2. Rietichetta lo spazio dei nomi per abilitare l'inserimento automatico con la versione precedente di istiod. Il comando da utilizzare varia a seconda che tu abbia utilizzato un'etichetta di revisione o istio-injection=enabled con la versione precedente.

      • Se hai utilizzato un'etichetta di revisione per l'inserimento automatico:

        kubectl label namespace NAMESPACE istio.io/rev=OLD_REVISION --overwrite
        
      • Se utilizzavi istio-injection=enabled:

        kubectl label namespace NAMESPACE istio.io/rev- istio-injection=enabled --overwrite
        

      Output previsto:

      namespace/NAMESPACE labeled
    3. Conferma che l'etichetta della revisione nello spazio dei nomi corrisponda all'etichetta della revisione della versione precedente di istiod:

      kubectl get ns NAMESPACE --show-labels
      
    4. Riavvia i pod per attivare la reiniezione in modo che i proxy abbiano la versione precedente:

      kubectl rollout restart deployment -n NAMESPACE
      
    5. Se hai sia la versione precedente che quella nuova di istio-ingressgateway, rimuovi il nuovo deployment di istio-ingressgateway. Assicurati che il valore di REVISION nel comando seguente sia corretto.

      kubectl delete deploy -l app=istio-ingressgateway,istio.io/rev=REVISION -n istio-system --ignore-not-found=true
      
    6. Rimuovi la nuova versione di istiod. Assicurati che il valore di REVISION nel seguente comando sia corretto.

      kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget istiod-REVISION -n istio-system --ignore-not-found=true
      
    7. Rimuovi la nuova versione della configurazione IstioOperator.

      kubectl delete IstioOperator installed-state-REVISION -n istio-system
      

      L'output previsto è simile al seguente:

      istiooperator.install.istio.io "installed-state-REVISION" deleted
    8. Se non hai incluso il flag --disable_canonical_service, lo script abilitava il controller del servizio canonico. Ti consigliamo di lasciarlo abilitato, ma se devi disabilitarlo, consulta Attivazione e disattivazione del controller del servizio canonico.

Passaggi successivi