Aggiornamento manuale di un cluster o di un pool di nodi


Per impostazione predefinita, gli upgrade automatici sono abilitati per i cluster e i pool di nodi di Google Kubernetes Engine (GKE).

Questa pagina spiega come richiedere manualmente un upgrade o un downgrade per un cluster GKE o i suoi nodi. Scopri di più su come funzionano gli upgrade automatici e manuali dei cluster. Puoi anche stabilire quando e se gli upgrade automatici possono essere eseguiti configurando i periodi di manutenzione e le esclusioni.

Le nuove versioni di GKE vengono annunciate regolarmente. Per informazioni sulle versioni disponibili, vedi Controllo delle versioni. Per scoprire di più sui cluster, consulta la sezione Architettura del cluster. Per indicazioni sull'upgrade dei cluster, consulta le best practice per l'upgrade dei cluster.

Prima di iniziare

Prima di iniziare, assicurati di aver eseguito le seguenti attività:

  • Assicurati di aver abilitato l'API Google Kubernetes Engine.
  • Abilita l'API Google Kubernetes Engine
  • Assicurati di aver installato l'interfaccia a riga di comando di Google Cloud.
  • Configura le impostazioni dell'interfaccia a riga di comando di Google Cloud predefinite per il tuo progetto utilizzando uno dei seguenti metodi:
    • Utilizza gcloud init se vuoi avere istruzioni dettagliate sull'impostazione delle impostazioni predefinite del progetto.
    • Utilizza gcloud config per impostare singolarmente l'ID, la zona e l'area geografica del progetto.

    gcloud init

    1. Esegui gcloud init e segui le istruzioni:

      gcloud init

      Se utilizzi SSH su un server remoto, usa il flag --console-only per impedire l'avvio del comando da parte di un browser:

      gcloud init --console-only
    2. Segui le istruzioni per autorizzare l'interfaccia a riga di comando gcloud a utilizzare il tuo account Google Cloud.
    3. Crea una nuova configurazione o selezionane una esistente.
    4. Scegli un progetto Google Cloud.
    5. Scegli una zona Compute Engine predefinita.
    6. Scegli un'area geografica di Compute Engine predefinita.

    gcloud config

    1. Imposta l'ID progetto predefinito:
      gcloud config set project PROJECT_ID
    2. Imposta l'area geografica di Compute Engine predefinita (ad esempio us-central1):
      gcloud config set compute/region COMPUTE_REGION
    3. Imposta la zona Compute Engine predefinita (ad esempio us-central1-c):
      gcloud config set compute/zone COMPUTE_ZONE
    4. Aggiorna gcloud alla versione più recente:
      gcloud components update

    Impostando le posizioni predefinite puoi evitare errori nell'interfaccia a riga di comando gcloud come One of [--zone, --region] must be supplied: Please specify location:

Salva i dati su dischi permanenti

Prima di eseguire l'upgrade di un pool di nodi, devi assicurarti che i dati che vuoi conservare siano archiviati in un pod utilizzando volumi permanenti che utilizzano dischi permanenti. I dischi permanenti vengono smontati, anziché cancellati, durante gli upgrade e i loro dati vengono "eliminati" tra i pod.

Le seguenti restrizioni riguardano i dischi permanenti:

  • I nodi su cui sono in esecuzione i pod devono essere VM di Compute Engine
  • Le VM devono trovarsi nello stesso progetto e nella stessa zona di Compute Engine del disco permanente

Per informazioni su come aggiungere un disco permanente a un'istanza del nodo esistente, consulta la sezione Aggiungere o ridimensionare i dischi permanenti a livello di zona nella documentazione di Compute Engine.

Informazioni sull'upgrade

L'upgrade del piano di controllo e dei nodi di un cluster viene eseguito separatamente.

I piani di controllo del cluster vengono sempre aggiornati regolarmente, indipendentemente dal fatto che il cluster sia registrato o meno in un canale di rilascio.

Per ricevere le notifiche di upgrade in modo proattivo, consulta Ricevere notifiche del cluster.

Limitazioni

Impossibile eseguire l'upgrade dei cluster alpha.

Versioni supportate

Le note di rilascio annunciano quando diventano disponibili nuove versioni e quando non sono più disponibili versioni precedenti. In qualsiasi momento, puoi elencare tutte le versioni supportate dei cluster e dei nodi utilizzando questo comando:

gcloud container get-server-config

Downgrade delle limitazioni

Eseguire il downgrade di un piano di controllo del cluster non è consigliato. Non puoi eseguire il downgrade di un piano di controllo del cluster da una versione secondaria a un'altra. Ad esempio, se il tuo piano di controllo esegue GKE versione 1.17.17, non puoi eseguire il downgrade a 1.16.15. Se provi a farlo, visualizzerai un errore simile al seguente:

ERROR: (gcloud.container.clusters.upgrade) ResponseError: code=400,
message=Master cannot be upgraded to "1.16.15-gke.6000": specified version is not
newer than the current version.

È sconsigliato eseguire il downgrade di versioni secondarie o patch di Kubernetes e utilizzare solo come mitigazione per un upgrade non riuscito.

Per mitigare un upgrade non riuscito del piano di controllo del cluster, puoi eseguire il downgrade del cluster a una versione precedente della patch se la versione patch è la stessa versione secondaria del cluster. Ad esempio, se nel cluster è in esecuzione GKE 1.17.17, puoi eseguire il downgrade a 1.17.16, se tale versione è ancora disponibile.

Per mitigare un upgrade del pool di nodi non riuscito, puoi eseguire il downgrade a un Tutte le versioni della patch rispetto alla versione del piano di controllo del cluster. I nodi non possono contenere più di due versioni secondarie rispetto alla versione del piano di controllo del cluster.

Upgrade del cluster

Google esegue automaticamente l'upgrade di cluster e nodi. Per un maggiore controllo sugli upgrade automatici ricevuti dal tuo cluster e dai suoi nodi, puoi registrarli in un canale di rilascio.

Per scoprire di più sulla gestione della versione di GKE del tuo cluster, consulta Upgrade.

Puoi avviare un upgrade manuale in qualsiasi momento dopo che una nuova versione è disponibile.

Upgrade manuale del piano di controllo

Quando avvii un upgrade del cluster, non puoi più modificare la configurazione del cluster per diversi minuti, fino a quando il piano di controllo non sarà di nuovo accessibile. Se devi evitare tempi di inattività durante gli upgrade del piano di controllo, puoi utilizzare un cluster regionale.

Puoi eseguire manualmente l'upgrade del cluster utilizzando Cloud Console o l'interfaccia a riga di comando di Google Cloud. Dopo aver eseguito l'upgrade del cluster, puoi eseguire l'upgrade dei nodi. Per impostazione predefinita, l'upgrade automatico è abilitato per i nodi creati utilizzando Google Cloud Console, quindi l'operazione avviene automaticamente.

gcloud

Per visualizzare le versioni disponibili per il piano di controllo del cluster, esegui il comando seguente:

gcloud container get-server-config

Per eseguire l'upgrade alla versione predefinita del cluster, esegui il seguente comando:

gcloud container clusters upgrade CLUSTER_NAME --master

Per eseguire l'upgrade a una versione specifica che non è quella predefinita, specifica il flag --cluster-version nel seguente comando:

gcloud container clusters upgrade CLUSTER_NAME --master \
    --cluster-version VERSION

Sostituisci VERSION con la versione in cui eseguire l'upgrade del cluster. Puoi utilizzare una versione specifica, ad esempio 1.18.17-gke.100, oppure un alias di versione, come latest. Per ulteriori informazioni, consulta la sezione Specificare la versione del cluster.

Console

Per aggiornare manualmente il piano di controllo del cluster:

  1. Vai alla pagina Google Kubernetes Engine in Cloud Console.

    Vai a Google Kubernetes Engine

  2. Fai clic sul nome del cluster che preferisci.

  3. In Nozioni di base sul cluster, fai clic su Upgrade disponibile accanto a Versione.

  4. Seleziona la versione che ti interessa, quindi fai clic su Salva modifiche.

Downgrade dei cluster

Per eseguire il downgrade di un cluster a una versione precedente della patch, modifica la versione del piano di controllo del cluster con il comando seguente:

gcloud container clusters upgrade CLUSTER_NAME \
  --master --cluster-version VERSION

Disabilitazione degli upgrade automatici dei cluster

La sicurezza dell'infrastruttura è la priorità assoluta per GKE, pertanto i piani di controllo vengono aggiornati regolarmente e non possono essere disabilitati. Tuttavia, puoi applicare periodi di manutenzione ed esclusioni per sospendere temporaneamente gli upgrade per i piani di controllo e i nodi.

Anche se non è consigliato, puoi disattivare l'upgrade automatico dei nodi.

Upgrade dei pool di nodi

Per impostazione predefinita, i nodi di un cluster sono abilitati per l'upgrade automatico e ti consigliamo di non disattivarli.

Quando viene eseguito l'upgrade di un pool di nodi, puoi configurare le impostazioni di upgrade di sovraccarico per controllare quanti nodi GKE esegue contemporaneamente gli upgrade e quanto sia invasivo per i carichi di lavoro. Per impostazione predefinita, GKE esegue l'upgrade di un nodo alla volta.

Durante l'upgrade di un nodo, GKE smette di pianificare nuovi pod e tenta di pianificare i suoi pod in esecuzione su altri nodi. Questo è simile ad altri eventi che ricreano il nodo, come l'attivazione o la disattivazione di una funzionalità sul pool di nodi.

L'upgrade è completo solo quando tutti i nodi sono stati ricreati e il cluster è nello stato desiderato. Quando un nodo appena aggiornato si registra con il piano di controllo, GKE contrassegna il nodo come pianificabile.

Le nuove istanze di nodi eseguono la versione di Kubernetes desiderata, nonché:

Upgrade manuale di un pool di nodi

Puoi eseguire manualmente l'upgrade di una versione del pool di nodi in modo che corrisponda alla versione del piano di controllo o a una versione precedente ancora disponibile e compatibile con il piano di controllo. La criteria di supporto per la disabilitazione della versione e della versione di Kubernetes garantisce che i piani di controllo sono compatibili con i nodi fino a due versioni secondarie precedenti al piano di controllo. Ad esempio, i piani di controllo Kubernetes 1.13 sono compatibili con i nodi Kubernetes 1.11.

Quando esegui manualmente l'upgrade di un pool di nodi, GKE rimuove tutte le etichette aggiunte ai singoli nodi utilizzando kubectl. Per evitarlo, applica le etichette ai pool di nodi (anteprima).

Puoi eseguire manualmente l'upgrade dei pool di nodi a una versione compatibile con il piano di controllo, utilizzando Google Cloud Console o l'interfaccia a riga di comando di Google Cloud.

gcloud

Nei comandi di questa sezione vengono utilizzate le seguenti variabili:

  • CLUSTER_NAME: il nome del cluster del pool di nodi di cui eseguire l'upgrade.
  • NODE_POOL_NAME: nome del pool di nodi di cui eseguire l'upgrade.
  • VERSION: la versione di Kubernetes a cui viene eseguito l'upgrade dei nodi. Ad esempio, --cluster-version=1.7.2 o cluster-version=latest.

Upgrade di un pool di nodi:

gcloud container clusters upgrade CLUSTER_NAME \
  --node-pool=NODE_POOL_NAME

Per specificare una versione diversa di GKE sui nodi, utilizza il flag --cluster-versionfacoltativo:

gcloud container clusters upgrade CLUSTER_NAME \
  --node-pool=NODE_POOL_NAME \
  --cluster-version VERSION

Per ulteriori informazioni sulla specifica delle versioni, consulta la sezione Controllo delle versioni.

Per ulteriori informazioni, consulta la documentazione di gcloud container clusters upgrade.

Console

Per eseguire l'upgrade di un pool di nodi utilizzando Cloud Console, esegui questi passaggi:

  1. Vai alla pagina Google Kubernetes Engine in Cloud Console.

    Vai a Google Kubernetes Engine

  2. Accanto al cluster che vuoi modificare, fai clic su Azioni e poi su Modifica.

  3. Nella pagina Dettagli cluster, fai clic sulla scheda Nodi.

  4. Nella sezione Pool di nodi, fai clic sul nome del pool di nodi di cui vuoi eseguire l'upgrade.

  5. Fai clic su Modifica.

  6. Fai clic su Cambia in Versione del nodo.

  7. Seleziona la versione desiderata dall'elenco a discesa Versione nodo, quindi fai clic su Cambia.

Downgrade dei pool di nodi

Controllo dello stato di upgrade del pool di nodi

Puoi verificare lo stato di un upgrade utilizzando gcloud beta container operations.

Per visualizzare un elenco di tutte le operazioni in esecuzione e completate nel cluster, esegui il comando seguente:

gcloud beta container operations list

A ogni operazione è assegnato un ID operazione e un tipo di operazione, nonché orari di inizio e fine, cluster di destinazione e stato. L'elenco sembra simile al seguente esempio:

NAME                              TYPE                ZONE           TARGET              STATUS_MESSAGE  STATUS  START_TIME                      END_TIME
operation-1505407677851-8039e369  CREATE_CLUSTER      us-west1-a     my-cluster                          DONE    20xx-xx-xxT16:47:57.851933021Z  20xx-xx-xxT16:50:52.898305883Z
operation-1505500805136-e7c64af4  UPGRADE_CLUSTER     us-west1-a     my-cluster                          DONE    20xx-xx-xxT18:40:05.136739989Z  20xx-xx-xxT18:41:09.321483832Z
operation-1505500913918-5802c989  DELETE_CLUSTER      us-west1-a     my-cluster                          DONE    20xx-xx-xxT18:41:53.918825764Z  20xx-xx-xxT18:43:48.639506814Z

Per ottenere maggiori informazioni su un'operazione specifica, specifica l'ID operazione nel comando seguente:

gcloud beta container operations describe OPERATION_ID

Ad esempio:

gcloud beta container operations describe operation-1507325726639-981f0ed6
endTime: '20xx-xx-xxT21:40:05.324124385Z'
name: operation-1507325726639-981f0ed6
operationType: UPGRADE_CLUSTER
selfLink: https://container.googleapis.com/v1/projects/.../kubernetes-engine/docs/zones/us-central1-a/operations/operation-1507325726639-981f0ed6
startTime: '20xx-xx-xxT21:35:26.639453776Z'
status: DONE
targetLink: https://container.googleapis.com/v1/projects/.../kubernetes-engine/docs/zones/us-central1-a/clusters/...
zone: us-central1-a

Annullamento di un upgrade del pool di nodi

Puoi annullare un upgrade in qualsiasi momento. Quando annulli un upgrade:

  • I nodi che hanno avviato l'upgrade lo completano.
  • Non viene eseguito l'upgrade dei nodi che non hanno avviato l'upgrade.
  • I nodi che hanno già completato correttamente l'upgrade non sono interessati e non vengono ripristinati.
  1. Recupera l'ID operazione dell'upgrade utilizzando il seguente comando:

    gcloud container operations list
    
  2. Esegui il comando seguente per annullare l'upgrade:

    gcloud beta container operations cancel OPERATION_ID
    

Consulta la documentazione di gcloud container operations cancel.

Rollback di un upgrade del pool di nodi

Puoi eseguire il rollback dei pool di nodi di cui non è stato possibile eseguire l'upgrade o i cui upgrade sono stati annullati alla versione precedente di Kubernetes. Non puoi eseguire il rollback dei pool di nodi dopo aver eseguito l'upgrade. I nodi che non hanno avviato un upgrade non sono interessati.

Per eseguire il rollback di un upgrade, esegui il comando seguente:

gcloud container node-pools rollback NODE_POOL_NAME \
  --cluster CLUSTER_NAME

Sostituisci quanto segue:

  • NODE_POOL_NAME: il nome del pool di nodi di cui eseguire il rollback.
  • CLUSTER_NAME: il nome del cluster da cui eseguire il rollback del pool di nodi.

Consulta la documentazione di gcloud container node-pools rollback.

Modifica dei parametri di upgrade di sovraccarico

Gli upgrade Surge consentono di modificare il numero di nodi GKE contemporaneamente e la quantità di interruzioni che un upgrade può comportare sui tuoi carichi di lavoro.

Per ogni pool di nodi sono definiti i flag max-surge-upgrade e max-unavailable-upgrade. Per ulteriori informazioni sulla scelta dei parametri giusti, consulta Stabilire la configurazione ottimale del sovraccarico.

Puoi modificare queste impostazioni durante la creazione o l'aggiornamento di un cluster o di un pool di nodi.

Nei comandi riportati di seguito vengono utilizzate le seguenti variabili:

  • CLUSTER_NAME: il nome del cluster per il pool di nodi.
  • COMPUTE_ZONE: la zona per il cluster.
  • NODE_POOL_NAME: il nome del pool di nodi.
  • NUMBER_NODES: il numero di nodi nel pool di nodi in ciascuna zona del cluster.
  • SURGE_NODES: numero di nodi extra (sovratensione) da creare per ogni upgrade del pool di nodi.
  • UNAVAILABLE_NODES: il numero di nodi che possono essere non disponibili contemporaneamente a ogni upgrade del pool di nodi.

Creazione di un cluster con parametri di sovraccarico specifici

Per creare un cluster con impostazioni specifiche per gli upgrade di sovraccarico, utilizza i flag max-surge-upgrade e max-unavailable-upgrade.

gcloud container clusters create CLUSTER_NAME \
  --max-surge-upgrade=SURGE_NODES --max-unavailable-upgrade=UNAVAILABLE_NODES

Creazione di un cluster con upgrade di sovraccarico disabilitato

Per creare un cluster senza upgrade di sovraccarico, imposta il valore per il flag max-surge-upgrade su 0.

gcloud container clusters create CLUSTER_NAME \
  --max-surge-upgrade=0 --max-unavailable-upgrade=1

Creazione di un pool di nodi con parametri di sovraccarico specifici

Per creare un pool di nodi in un cluster esistente con impostazioni specifiche per gli upgrade di sovraccarico, utilizza i flag max-surge-upgrade e max-unavailable-upgrade.

gcloud container node-pools create NODE_POOL_NAME \
  --num-nodes=NUMBER_NODES --cluster=CLUSTER_NAME \
  --max-surge-upgrade=SURGE_NODES --max-unavailable-upgrade=UNAVAILABLE_NODES

Attivare o disattivare Surge Upgrade per un pool di nodi esistente

Per aggiornare le impostazioni di upgrade di un pool di nodi esistente, utilizza i flag max-surge-upgrade e max-unavailable-upgrade. Se il valore di max-surge-upgrade è maggiore di 0, GKE crea nodi di sovraccarico. Se imposti max-surge-upgrade su 0, GKE non crea nodi di sovraccarico.

gcloud beta container node-pools update NODE_POOL_NAME \
  --cluster=CLUSTER_NAME \
  --max-surge-upgrade=SURGE_NODES --max-unavailable-upgrade=UNAVAILABLE_NODES

Verifica dell'abilitazione degli upgrade di sovraccarico su un pool di nodi

Per verificare se gli upgrade di sovraccarico sono abilitati su un pool di nodi, utilizza gcloud per descrivere i parametri del cluster:

gcloud container node-pools describe NODE_POOL_NAME \
--cluster=CLUSTER_NAME

Problemi noti

Se hai configurato oggetti PodDisruptionBudget che non sono in grado di consentire altre interruzioni, dopo i ripetuti tentativi gli upgrade dei nodi potrebbero non riuscire a eseguire l'upgrade alla versione del piano di controllo. Per evitare questo errore, ti consigliamo di fare lo scale up di Deployment o HorizontalPodAutoscaler per consentire lo svuotamento del nodo pur rispettando la configurazione di PodDisruptionBudget.

Per visualizzare tutti gli oggetti PodDisruptionBudget che non consentono interruzioni:

kubectl get poddisruptionbudget --all-namespaces -o jsonpath='{range .items[?(@.status.disruptionsAllowed==0)]}{.metadata.name}/{.metadata.namespace}{"\n"}{end}'

Anche se gli upgrade automatici potrebbero riscontrare un problema, il processo di upgrade automatico forza l'upgrade dei nodi. Tuttavia, l'upgrade richiede un'ora aggiuntiva per ogni nodo nello spazio dei nomi istio-system che viola il PodDisruptionBudget.

Risolvere i problemi

Utilizzo CPU da parte dei nodi superiore al previsto

Potresti riscontrare un problema per cui alcuni nodi stanno utilizzando un utilizzo di CPU maggiore di quello previsto dai pod in esecuzione.

Può verificarsi se il cluster o i nodi non eseguono una versione supportata. Consulta le note di rilascio per assicurarti che le versioni che stai utilizzando siano disponibili e supportate. Puoi anche eseguire il comando seguente per elencare tutte le versioni dei cluster e dei nodi supportate:

gcloud container get-server-config

Passaggi successivi