Esegui l'upgrade dei node pool

L'upgrade separato del control plane e dei pool di nodi worker in un cluster utente Google Distributed Cloud software only per VMware ti consente di convalidare la compatibilità dei workload su singoli pool di nodi e di distribuire gli upgrade in periodi di manutenzione più brevi.

Questo documento è rivolto agli amministratori IT e agli operatori che gestiscono il ciclo di vita dell'infrastruttura tecnologica sottostante. Per scoprire di più sui ruoli comuni e sugli esempi di attività a cui facciamo riferimento nei contenuti di Google Cloud , consulta Ruoli e attività comuni degli utenti GKE. Prima di iniziare, assicurati di conoscere la panoramica dell'upgrade, le regole per l'upgrade della versione, le best practice per l'upgrade e l'upgrade di un cluster.

Limitazioni

L'upgrade dei node pool separatamente dal control plane presenta le seguenti limitazioni:

  • Questa funzionalità è supportata per i node pool Ubuntu e Container-Optimized OS, ma non per i node pool Windows.

  • Questa funzionalità non è disponibile durante l'upgrade di cluster non avanzati a cluster avanzati. I cluster non avanzati verranno automaticamente sottoposti ad upgrade ai cluster avanzati nella versione 1.33.

  • Versione 1.31: questa funzionalità non è disponibile sui cluster avanzati.

  • Versione 1.32 e successive: questa funzionalità è disponibile sui cluster avanzati.

  • La versione del pool di nodi del bilanciatore del carico deve essere la stessa della versione del cluster. L'upgrade di un pool di nodi del bilanciatore del carico (un pool di nodi con enableLoadBalancer: true) separatamente dal control plane o con un disallineamento delle versioni non è supportato.

Perché eseguire l'upgrade del control plane e dei node pool separatamente?

In determinate situazioni, potresti voler eseguire l'upgrade di alcuni, ma non di tutti, i pool di nodi worker in un cluster utente:

  • Puoi prima eseguire l'upgrade del control plane e di un pool di nodi con traffico ridotto o che esegue i workload meno critici. Dopo aver verificato che i tuoi workload funzionano correttamente sulla nuova versione, puoi eseguire l'upgrade di altri pool di nodi fino a quando non viene eseguito l'upgrade di tutti i pool di nodi.

  • Anziché utilizzare un unico periodo di manutenzione di grandi dimensioni per l'upgrade del cluster, puoi eseguire l'upgrade del cluster in più periodi di manutenzione. Per informazioni sulla stima del tempo necessario per un periodo di manutenzione, consulta Stima l'impegno in termini di tempo e pianifica un periodo di manutenzione.

  • Puoi saltare una versione secondaria durante l'upgrade dei node pool per ridurre il numero di upgrade necessari per rimanere su una versione supportata, risparmiando tempo e riducendo le interruzioni dei workload. Per ulteriori informazioni, consulta Salta una versione durante l'upgrade dei node pool.

Prima di iniziare

  1. Nella versione 1.29 e successive, i controlli preflight lato server sono abilitati per impostazione predefinita. Assicurati di esaminare le regole firewall per apportare le modifiche necessarie.

  2. Per eseguire l'upgrade alla versione 1.28 e successive, devi attivare kubernetesmetadata.googleapis.com e concedere il ruolo IAM kubernetesmetadata.publisher al service account di logging-monitoring. Per maggiori dettagli, consulta i requisiti delle API di Google e di Identity and Access Management (IAM).

  3. Assicurati che la versione attuale del cluster sia 1.14 o successiva.

Esegui l'upgrade del control plane e dei node pool selezionati

L'upgrade del control plane di un cluster utente separatamente dai pool di nodi worker è supportato utilizzando gkectl, Google Cloud CLI e Terraform. Puoi utilizzare Terraform per l'upgrade solo se hai creato il cluster utente utilizzando Terraform.

gkectl

  1. Definisci la versione di origine e la versione di destinazione nelle seguenti variabili segnaposto. Tutte le versioni devono essere il numero di versione completo nel formato x.y.z-gke.N, ad esempio 1.16.11-gke.25.

    Versione Descrizione
    SOURCE_VERSION La versione attuale del cluster.
    TARGET_VERSION Scegli la versione di destinazione. Seleziona la patch consigliata dalla versione secondaria di destinazione.
  2. Esegui l'upgrade della workstation di amministrazione alla versione di destinazione. Attendi un messaggio che indica che l'upgrade è stato eseguito correttamente.

  3. Importa le immagini sistema operativo corrispondenti in vSphere:

    gkectl prepare \
      --bundle-path /var/lib/gke/bundles/gke-onprem-vsphere-TARGET_VERSION.tgz \
      --kubeconfig ADMIN_CLUSTER_KUBECONFIG
    

    Sostituisci ADMIN_CLUSTER_KUBECONFIG con il percorso del file kubeconfig del cluster di amministrazione.

  4. Apporta le seguenti modifiche al file di configurazione del cluster utente:

    • Imposta il campo gkeOnPremVersion sulla versione di destinazione, TARGET_VERSION.

    • Per ogni pool di nodi di cui vuoi eseguire l'upgrade, imposta il campo nodePools[i].gkeOnPremVersion sulla stringa vuota.

      • Nella versione 1.28 e successive, puoi accelerare l'upgrade del pool di nodi impostando il campo nodePools[i].updateStrategy.rollingUpdate.maxSurge su un valore intero maggiore di 1. Quando esegui l'upgrade dei nodi con maxSurge, l'upgrade di più nodi viene eseguito nello stesso tempo necessario per l'upgrade di un singolo nodo.
    • Per ogni pool di nodi di cui non vuoi eseguire l'upgrade, imposta nodePools[i].gkeOnPremVersion sulla versione di origine, SOURCE_VERSION. Tieni presente che non puoi bloccare i pool di nodi del bilanciatore del carico (pool di nodi con enableLoadBalancer: true); la loro versione deve corrispondere alla versione del cluster.

    L'esempio seguente mostra una parte del file di configurazione del cluster utente. Specifica che verrà eseguito l'upgrade del control plane e di pool-1 a TARGET_VERSION, ma pool-2 rimarrà a SOURCE_VERSION.

    gkeOnPremVersion: TARGET_VERSION
    ...
    nodePools:
    - name: pool-1
      gkeOnPremVersion: ""
      ...
    - name: pool-2
      gkeOnPremVersion: SOURCE_VERSION
      ...
    
  5. Esegui l'upgrade del control plane e dei node pool selezionati:

    gkectl upgrade cluster \
      --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
      --config USER_CLUSTER_CONFIG_FILE
    

    Sostituisci USER_CLUSTER_CONFIG con il percorso del file di configurazione del cluster utente.

Esegui l'upgrade di altri node pool

Utilizzando l'esempio precedente, supponiamo che tutto funzioni correttamente con pool-1 e che ora tu voglia eseguire l'upgrade di pool-2.

  1. Nel file di configurazione del cluster utente, in pool-2, imposta gkeOnPremVersion sulla stringa vuota:

    gkeOnPremVersion: TARGET_VERSION
    ...
    nodePools:
    - name: pool-1
      gkeOnPremVersion: ""
      ...
    - name: pool-2
      gkeOnPremVersion: ""
      ...
    
  2. Esegui gkectl update cluster per applicare la modifica:

    gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
      --config USER_CLUSTER_CONFIG
    

gcloud CLI

L'upgrade di un cluster utente richiede alcune modifiche al cluster di amministrazione. Il comando gcloud container vmware clusters upgrade esegue automaticamente le seguenti operazioni:

  • Registra il cluster di amministrazione nell'API GKE On-Prem, se non è già registrato.

  • Scarica ed esegue il deployment di un bundle di componenti nel cluster di amministrazione. La versione dei componenti corrisponde alla versione specificata per l'upgrade. Questi componenti consentono al cluster di amministrazione di gestire i cluster utente in quella versione.

Esegui l'upgrade del control plane

Esegui il passaggio seguente per eseguire l'upgrade del control plane del cluster utente.

  1. Aggiorna i componenti di gcloud CLI:

    gcloud components update
    
  2. Modifica la policy di upgrade sul cluster:

    gcloud container vmware clusters update USER_CLUSTER_NAME \
      --project=PROJECT_ID \
      --location=REGION \
      --upgrade-policy control-plane-only=True
    

    Sostituisci quanto segue:

    • USER_CLUSTER_NAME: il nome del cluster utente di cui eseguire l'upgrade.

    • PROJECT_ID: l'ID del progetto host del parco risorse di cui il cluster utente è membro. Questo è il progetto che hai specificato al momento della creazione del cluster. Se hai creato il cluster utilizzando gkectl, questo è l'ID progetto nel campo gkeConnect.projectID nel file di configurazione del cluster.

    • REGION: la regione Google Cloud in cui l'API GKE On-Prem viene eseguita e archivia i suoi metadati. Se hai creato il cluster utilizzando un client API GKE on-prem, questa è la regione che hai selezionato durante la creazione del cluster. Se hai creato il cluster utilizzando gkectl, questa è la regione che hai specificato quando hai registrato il cluster nell'API GKE On-Prem.

  3. Esegui l'upgrade del control plane del cluster:

    gcloud container vmware clusters upgrade USER_CLUSTER_NAME \
      --project=PROJECT_ID \
      --location=REGION \
      --version=TARGET_VERSION
    

    Sostituisci TARGET_VERSION con la versione di cui eseguire l'upgrade. Seleziona la patch consigliata dalla versione secondaria di destinazione.

    L'output del comando è simile al seguente:

    Waiting for operation [projects/example-project-12345/locations/us-west1/operations/operation-1679543737105-5f7893fd5bae9-942b3f97-75e59179] to complete.
    

    Nell'output di esempio, la stringa operation-1679543737105-5f7893fd5bae9-942b3f97-75e59179 è il OPERATION_ID dell'operazione a lunga esecuzione. Puoi scoprire lo stato dell'operazione eseguendo questo comando in un'altra finestra del terminale:

    gcloud container vmware operations describe OPERATION_ID \
      --project=PROJECT_ID \
      --location=REGION
    

Esegui l'upgrade dei node pool

Per eseguire l'upgrade dei node pool dopo l'upgrade del control plane del cluster utente, segui questi passaggi:

  1. Recupera un elenco di node pool nel cluster utente:

    gcloud container vmware node-pools list
      --cluster=USER_CLUSTER_NAME  \
      --project=PROJECT_ID \
      --location=REGION
    
  2. Per ogni pool di nodi di cui vuoi eseguire l'upgrade, esegui questo comando:

    gcloud container vmware node-pools update NODE_POOL_NAME \
      --cluster=USER_CLUSTER_NAME  \
      --project=PROJECT_ID \
      --location=REGION \
      --version=TARGET_VERSION
    

Terraform

  1. Aggiorna i componenti di gcloud CLI:

    gcloud components update
    
  2. Se non l'hai ancora fatto, registra il cluster di amministrazione nell'API GKE On-Prem. Una volta registrato il cluster nell'API GKE On-Prem, non è necessario ripetere questo passaggio.

  3. Scarica la nuova versione dei componenti ed eseguine il deployment nel cluster di amministrazione:

    gcloud container vmware admin-clusters update ADMIN_CLUSTER_NAME \
      --project=PROJECT_ID \
      --location=REGION \
      --required-platform-version=TARGET_VERSION
    

    Sostituisci quanto segue:

    • ADMIN_CLUSTER_NAME: il nome del cluster di amministrazione.

    • PROJECT_ID: l'ID del progetto host del parco risorse di cui il cluster utente è membro. Questo è il progetto che hai specificato al momento della creazione del cluster. Se hai creato il cluster utilizzando gkectl, questo è l'ID progetto nel campo gkeConnect.projectID nel file di configurazione del cluster.

    • REGION: la regione Google Cloud in cui l'API GKE On-Prem viene eseguita e archivia i suoi metadati. Se hai creato il cluster utilizzando un client API GKE on-prem, questa è la regione che hai selezionato durante la creazione del cluster. Se hai creato il cluster utilizzando gkectl, questa è la regione che hai specificato quando hai registrato il cluster nell'API GKE On-Prem.

    • TARGET_VERSION: la versione di cui eseguire l'upgrade. Seleziona la patch consigliata dalla versione secondaria di destinazione.

    Questo comando scarica la versione dei componenti specificata in --required-platform-version nel cluster di amministrazione, quindi esegue il deployment dei componenti. Questi componenti consentono al cluster di amministrazione di gestire i cluster utente in quella versione.

  4. Nel file main.tf che hai utilizzato per creare il cluster utente, modifica on_prem_version nella risorsa del cluster con la nuova versione.

  5. Aggiungi quanto segue alla risorsa del cluster in modo che venga eseguito l'upgrade solo del control plane:

    upgrade_policy {
      control_plane_only = true
    }
    
  6. Inizializza e crea il piano Terraform:

    terraform init
    

    Terraform installa tutte le librerie necessarie, come il provider Google Cloud.

  7. Esamina la configurazione e apporta modifiche, se necessario:

    terraform plan
    
  8. Applica il piano Terraform per eseguire l'upgrade del control plane del cluster utente:

    terraform apply
    

Esegui l'upgrade dei node pool

Per eseguire l'upgrade dei node pool dopo l'upgrade del control plane del cluster utente, segui questi passaggi:

  1. In main.tf, nella risorsa per ogni pool di nodi di cui vuoi eseguire l'upgrade, aggiungi quanto segue:

    on_prem_version = "TARGET_VERSION"
    

    Ad esempio:

    resource "google_gkeonprem_vmware_node_pool" "nodepool-basic" {
    name = "my-nodepool"
    location = "us-west1"
    vmware_cluster = google_gkeonprem_vmware_cluster.default-basic.name
    config {
      replicas = 3
      image_type = "ubuntu_containerd"
      enable_load_balancer = false
    }
    on_prem_version = "1.16.0-gke.0"
    }
    
  2. Inizializza e crea il piano Terraform:

    terraform init
    
  3. Esamina la configurazione e apporta modifiche, se necessario:

    terraform plan
    
  4. Applica il piano Terraform per eseguire l'upgrade dei pool di nodi:

    terraform apply
    

Risoluzione dei problemi

Se riscontri un problema dopo l'upgrade di un pool di nodi, puoi eseguire il rollback alla versione precedente. Per saperne di più, consulta Esegui il rollback di un pool di nodi dopo un upgrade.