Downgrade di Anthos Service Mesh su GKE

Questa guida spiega come eseguire il downgrade di Anthos Service Mesh da 1.6.14 a 1.5.10 sui cluster GKE su Google Cloud.

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.

Panoramica del downgrade

Questa sezione illustra i passaggi da seguire per eseguire il downgrade di Anthos Service Mesh.

Preparazione

  1. Consulta le funzionalità supportate e questa guida per acquisire familiarità con le funzionalità e la procedura di downgrade.

  2. Se hai abilitato funzionalità facoltative quando hai installato la versione precedente di Anthos Service Mesh, devi abilitare le stesse funzionalità quando esegui il downgrade. Puoi abilitare le funzionalità facoltative aggiungendo i flag --set values o specificando il flag -f con un file YAML quando esegui il comando istioctl install.

  3. Se esegui il downgrade di Anthos Service Mesh su un cluster privato, devi aggiungere una regola firewall per aprire la porta 15017 se vuoi utilizzare l'inserimento automatico di sidecar. Se non aggiungi la regola firewall e l'inserimento automatico di sidecar è abilitato, ricevi un errore quando esegui il deployment dei carichi di lavoro. Per maggiori dettagli sull'aggiunta di una regola firewall, consulta Aggiunta di regole firewall per casi d'uso specifici.

Esegui il downgrade

  1. Segui i passaggi in questa guida per prepararti al downgrade di Anthos Service Mesh.

  2. Esegui il downgrade di Anthos Service Mesh.

  3. Aggiorna i proxy sidecar

  4. Testa l'applicazione per verificare che i carichi di lavoro funzionino correttamente.

Configurazione dell'ambiente

Per le installazioni su Google Kubernetes Engine, puoi seguire le guide all'installazione utilizzando Cloud Shell, un'interfaccia a riga di comando interna al browser per le tue risorse Google Cloud, oppure sul tuo computer che esegue Linux o macOS.

Opzione A: utilizza Cloud Shell

Cloud Shell esegue il provisioning di una macchina virtuale (VM) Compute Engine g1-small che esegue un sistema operativo Linux basato su Debian. I vantaggi dell'utilizzo di Cloud Shell sono:

  • Cloud Shell include gli strumenti a riga di comando gcloud, kubectl e helm di cui hai bisogno.

  • La directory $HOME di Cloud Shell ha 5 GB di spazio di archiviazione permanente.

  • Puoi scegliere gli editor di testo:

    • Editor di codice, a cui puoi accedere facendo clic su nella parte superiore della finestra di Cloud Shell.

    • Emacs, Vim o Nano, a cui accedi dalla riga di comando in Cloud Shell.

Per utilizzare Cloud Shell:

  1. Vai alla console Google Cloud.
  2. Selezionare il tuo progetto Google Cloud.
  3. Fai clic sul pulsante Attiva Cloud Shell nella parte superiore della finestra della console Google Cloud.

    Console Google Cloud Platform

    All'interno di un nuovo frame nella parte inferiore della console Google Cloud si apre una sessione di Cloud Shell, che mostra un prompt della riga di comando.

    Sessione di Cloud Shell

  4. Aggiorna i componenti:

    gcloud components update
    

    Il comando risponde con un output simile al seguente:

    ERROR: (gcloud.components.update)
    You cannot perform this action because the gcloud CLI component manager
    is disabled for this installation. You can run the following command
    to achieve the same result for this installation:
    
    sudo apt-get update && sudo apt-get --only-upgrade install ...
  5. Copia il comando lungo e incollalo per aggiornare i componenti.

  6. Assicurati che Git sia nel tuo percorso in modo che kpt possa trovarlo.

Opzione B: utilizzare gli strumenti a riga di comando localmente

Sulla macchina locale, installa e inizializza gcloud CLI.

Se hai già installato gcloud CLI:

  1. Esegui l'autenticazione con gcloud CLI:

    gcloud auth login
    
  2. Aggiorna i componenti:

    gcloud components update
    
  3. Installa kubectl:

    gcloud components install kubectl
    
  4. Installa kpt:

    gcloud components install kpt
    
  5. Assicurati che Git sia nel tuo percorso in modo che kpt possa trovarlo.

Imposta le variabili di ambiente

  1. Recupera l'ID per il progetto in cui è stato creato il cluster e il numero per il progetto host del parco risorse.

    gcloud

    Esegui questo comando:

    gcloud projects list
    

    Console

    1. Vai alla pagina Dashboard nella console Google Cloud.

      Vai alla pagina Dashboard

    2. Fai clic sull'elenco a discesa Seleziona da nella parte superiore della pagina. Nella finestra Seleziona da visualizzata, scegli il tuo progetto.

      L'ID progetto viene visualizzato nella scheda Informazioni sul progetto della dashboard del progetto.

  2. Crea una variabile di ambiente per l'ID del progetto in cui è stato creato il cluster:

    export PROJECT_ID=YOUR_PROJECT_ID

  3. Crea una variabile di ambiente per il numero di progetto del progetto host del parco risorse:

    export FLEET_PROJECT_NUMBER=YOUR_FLEET_PROJECT_NUMBER

  4. Crea le seguenti variabili di ambiente:

    • Imposta il nome del cluster:

      export CLUSTER_NAME=YOUR_CLUSTER_NAME
    • Imposta CLUSTER_LOCATION sulla zona o sulla regione del cluster:

      export CLUSTER_LOCATION=YOUR_ZONE_OR_REGION

Impostazione di credenziali e autorizzazioni

  1. Ottieni le credenziali di autenticazione per interagire con il cluster:

    gcloud container clusters get-credentials ${CLUSTER_NAME} \
        --project=${PROJECT_ID}
    
  2. Concedi all'utente corrente le autorizzazioni di amministratore del cluster. Devi disporre delle seguenti 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="$(gcloud config get-value core/account)"

Se viene visualizzato l'errore "cluster-admin-binding" already exists, puoi tranquillamente ignorarlo e continuare con l'associazione cluster-admin-binding esistente.

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.5.10-asm.2-linux.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.5.10-asm.2-linux.tar.gz.1.sig
    openssl dgst -verify /dev/stdin -signature istio-1.5.10-asm.2-linux.tar.gz.1.sig istio-1.5.10-asm.2-linux.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.5.10-asm.2-linux.tar.gz

    Il comando crea una directory di installazione nella directory di lavoro attuale denominata istio-1.5.10-asm.2 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. Mac OS

  5. 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.5.10-asm.2-osx.tar.gz
  6. Scarica il file della firma e utilizza openssl per verificare la firma:
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.5.10-asm.2-osx.tar.gz.1.sig
    openssl dgst -sha256 -verify /dev/stdin -signature istio-1.5.10-asm.2-osx.tar.gz.1.sig istio-1.5.10-asm.2-osx.tar.gz <<'EOF'
    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
    wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
    -----END PUBLIC KEY-----
    EOF

    L'output previsto è: Verified OK

  7. 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.5.10-asm.2-osx.tar.gz

    Il comando crea una directory di installazione nella directory di lavoro attuale denominata istio-1.5.10-asm.2 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.

  8. Windows

  9. 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.5.10-asm.2-win.zip
  10. Scarica il file della firma e utilizza openssl per verificare la firma:
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.5.10-asm.2-win.zip.1.sig
    openssl dgst -verify - -signature istio-1.5.10-asm.2-win.zip.1.sig istio-1.5.10-asm.2-win.zip <<'EOF'
    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
    wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
    -----END PUBLIC KEY-----
    EOF

    L'output previsto è: Verified OK

  11. 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.5.10-asm.2-win.zip

    Il comando crea una directory di installazione nella directory di lavoro attuale denominata istio-1.5.10-asm.2 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.

  12. Assicurati di essere nella directory principale dell'installazione di Anthos Service Mesh.
    cd istio-1.5.10-asm.2
  13. Per praticità, aggiungi gli strumenti nella directory /bin al tuo PERCORSO:
    export PATH=$PWD/bin:$PATH

Preparazione dei file di configurazione delle risorse

Quando esegui il comando istioctl install, specifichi -f istio-operator.yaml nella riga di comando. Questo file contiene informazioni sul progetto e sul cluster richieste da Anthos Service Mesh. Devi scaricare un pacchetto contenente istio-operator.yaml e altri file di configurazione delle risorse per poter impostare le informazioni sul progetto e sul cluster.

Per iniziare, scegli un pacchetto da scaricare in base all'autorità di certificazione (CA) che vuoi utilizzare:

  • asm: Questo pacchetto abilita Mesh CA, opzione consigliata per le nuove installazioni.

  • asm-citadel: facoltativamente, puoi abilitare Citadel come CA. Prima di scegliere questo pacchetto, consulta Scegliere un'autorità di certificazione per ulteriori informazioni.

Per preparare i file di configurazione delle risorse:

  1. Crea una nuova directory per i file di configurazione delle risorse del pacchetto Anthos Service Mesh. Ti consigliamo di utilizzare il nome del cluster come nome della directory.

  2. Passa alla directory in cui vuoi scaricare il pacchetto Anthos Service Mesh.

  3. Scarica il pacchetto asm:

    kpt pkg get \
    https://github.com/GoogleCloudPlatform/anthos-service-mesh-packages.git/asm@release-1.5-asm asm
    
  4. Imposta l'ID per il progetto in cui è stato creato il cluster:

    kpt cfg set asm gcloud.core.project ${PROJECT_ID}
    
  5. Imposta il nome del cluster:

    kpt cfg set asm gcloud.container.cluster ${CLUSTER_NAME}
    
  6. Imposta la zona o la regione predefinita:

    kpt cfg set asm gcloud.compute.location ${CLUSTER_LOCATION}
    

Downgrade di Anthos Service Mesh

Per eseguire il downgrade di Anthos Service Mesh:

istioctl install \
  -f asm/cluster/istio-operator.yaml \
  --set profile=asm-gcp

Controlla i componenti del piano di controllo

Il downgrade richiede la reinstallazione dei componenti del piano di controllo, il cui completamento richiede circa 5-10 minuti. I vecchi componenti del piano di controllo vengono terminati e poi eliminati man mano che vengono installati i nuovi componenti. Puoi verificare l'avanzamento osservando il valore nella colonna AGE dei carichi di lavoro.

kubectl get pod -n istio-system

Output di esempio:

NAME                                     READY   STATUS        RESTARTS   AGE
istio-ingressgateway-5bfdf7c586-v6wxx    2/2     Terminating   0          25m
istio-ingressgateway-7b598c5557-b88md    2/2     Running       0          5m44s
istiod-78cdbbbdb-d7tps                   1/1     Running       0          5m16s
promsd-576b8db4d6-lqf64                  2/2     Running       1          5m26s

In questo esempio sono presenti due istanze di istio-ingressgateway. È in corso l'arresto dell'istanza con 25m nella colonna AGE. Tutti gli altri componenti sono stati installati di recente.

Aggiornamento dei proxy sidecar

È necessario inserire nuovamente il proxy sidecar in tutti i carichi di lavoro in esecuzione sul cluster prima del downgrade, in modo da avere la versione corrente di Anthos Service Mesh.

Con l'inserimento automatico dei file collaterali, puoi aggiornare i file collaterali per i pod esistenti con un riavvio. La modalità di riavvio dei pod dipende dal fatto che siano stati creati nell'ambito di un deployment.

  1. Se hai utilizzato un deployment, riavvialo, in modo da riavviare tutti i pod con i file collaterali:

    kubectl rollout restart deployment -n YOUR_NAMESPACE

    Se non hai utilizzato un deployment, elimina i pod, che vengono ricreati automaticamente con i file collaterali:

    kubectl delete pod -n YOUR_NAMESPACE --all
  2. Verifica che tutti i pod nello spazio dei nomi abbiano dei sidecar inseriti:

    kubectl get pod -n YOUR_NAMESPACE

    Nel seguente esempio di output del comando precedente, puoi notare che la colonna READY indica che esistono due container per ciascuno dei tuoi carichi di lavoro: il container principale e il container per il proxy sidecar.

    NAME                    READY   STATUS    RESTARTS   AGE
    YOUR_WORKLOAD           2/2     Running   0          20s
    ...