Riparazione automatica dei nodi

La funzionalità di riparazione automatica dei nodi monitora continuamente l'integrità di ciascun nodo in un pool di nodi. Se un nodo non è integro, la funzionalità di riparazione automatica lo ripara automaticamente. Questa funzionalità riduce la probabilità di interruzioni dei cluster e un peggioramento delle prestazioni e riduce al minimo la necessità di manutenzione manuale dei cluster.

Puoi abilitare la riparazione automatica dei nodi durante la creazione o l'aggiornamento di un pool di nodi. Tieni presente che questa funzionalità viene abilitata o disabilitata nei pool di nodi anziché nei singoli nodi.

Condizioni dei nodi non integri

La riparazione automatica dei nodi esamina lo stato di integrità di ciascun nodo per determinare se richiede la riparazione. Un nodo è considerato integro se segnala uno stato Ready. In caso contrario, se segnala consecutivamente uno stato non integro per una durata specifica, vengono avviate le riparazioni.

Uno stato non integro può derivare da uno stato NotReady, rilevato in controlli consecutivi nell'arco di circa 15 minuti. In alternativa, uno stato non integro potrebbe essere dovuto all'esaurimento dello spazio sul disco di avvio, identificato in un periodo di circa 30 minuti.

Puoi controllare manualmente gli indicatori di integrità del nodo in qualsiasi momento eseguendo il comando kubectl get nodes.

Strategie di riparazione dei nodi

La riparazione automatica dei nodi segue determinate strategie per garantire sia l'integrità complessiva del cluster sia la disponibilità delle applicazioni durante il processo di riparazione. Questa sezione descrive in che modo la funzionalità di riparazione automatica dei nodi rispetta le configurazioni PodDisruptionBudget, rispetta Pod Termination Grace Period e adotta altre misure per ridurre al minimo le interruzioni del cluster durante la riparazione dei nodi.

Rispetta PodDisruptionBudget per 30 minuti

Se un nodo deve essere riparato, non viene subito svuotato e ricreato. La funzionalità di riparazione automatica dei nodi rispetta le configurazioni PodDisruptionBudget (PDB) per un massimo di 30 minuti, dopodiché vengono eliminati tutti i pod sul nodo. (una configurazione PDB definisce, tra le altre cose, il numero minimo di repliche di un determinato pod che devono essere disponibili in un determinato momento).

Rispettando PodDisruptionBudget per circa 30 minuti, la funzionalità di riparazione automatica dei nodi offre un'opportunità per ripianificare e ridistribuire i pod in modo sicuro su altri nodi integri del cluster. Ciò consente di mantenere il livello desiderato di disponibilità delle applicazioni durante il processo di riparazione.

Dopo il limite di tempo di 30 minuti, la riparazione automatica dei nodi procede con la procedura di riparazione, anche se ciò significa violazione del PodDisruptionBudget. Senza un limite di tempo, il processo di riparazione potrebbe bloccarsi a tempo indeterminato se la configurazione di PodDisruptionBudget impedisce le eliminazioni necessarie per una riparazione.

Rispettare il periodo di tolleranza per la chiusura dei pod

La funzionalità di riparazione automatica dei nodi rispetta anche un periodo di tolleranza per la chiusura dei pod di circa 30 minuti. Il periodo di tolleranza per la terminazione dei pod offre ai pod una finestra di tempo per un arresto controllato durante l'arresto. Durante il periodo di tolleranza, il kubelet su un nodo è responsabile dell'esecuzione delle attività di pulizia e della liberazione delle risorse associate ai pod su quel nodo. La funzionalità di riparazione automatica dei nodi consente al kubelet di completare la pulizia fino a 30 minuti. Se sono trascorsi i 30 minuti assegnati, il nodo viene forzato a terminarsi, indipendentemente dal fatto che i pod siano stati terminati in modo controllato.

Ulteriori strategie di riparazione dei nodi

La riparazione automatica dei nodi implementa anche le seguenti strategie:

  • Se più nodi devono essere riparati, vengono riparati uno alla volta per limitare l'interruzione del cluster e proteggere i carichi di lavoro.
  • Se disabiliti la riparazione automatica dei nodi durante il processo di riparazione, le riparazioni in corso continuano comunque finché l'operazione non va a buon fine o non va a buon fine.

Come abilitare e disabilitare la riparazione automatica dei nodi

Puoi abilitare o disabilitare la riparazione automatica dei nodi durante la creazione o l'aggiornamento di un pool di nodi. Puoi abilitare o disabilitare questa funzionalità nei pool di nodi anziché nei singoli nodi.

Abilita la riparazione automatica per un nuovo pool di nodi

gcloud container azure node-pools create NODE_POOL_NAME \
   --cluster CLUSTER_NAME \
   --location GOOGLE_CLOUD_LOCATION \
   --node-version 1.29.3-gke.600 \
   --vm-size VM_SIZE \
   --max-pods-per-node 110 \
   --min-nodes MIN_NODES \
   --max-nodes MAX_NODES \
   --azure-availability-zone AZURE_ZONE \
   --ssh-public-key SSH_PUBLIC_KEY" \
   --subnet-id SUBNET_ID \
   --enable-autorepair

Sostituisci quanto segue:

  • NODE_POOL_NAME: un nome univoco per il pool di nodi, ad esempio node-pool-1
  • CLUSTER_NAME: il nome del tuo cluster GKE su Azure
  • GOOGLE_CLOUD_LOCATION: la località Google Cloud che gestisce il tuo cluster
  • NODE_VERSION: la versione di Kubernetes da installare su ciascun nodo nel pool di nodi (ad es. "1.29.3-gke.600")
  • VM_SIZE: una dimensione della VM Azure supportata
  • MIN_NODES: numero minimo di nodi nel pool di nodi. Per ulteriori informazioni, consulta Gestore della scalabilità automatica dei cluster
  • MAX_NODES: il numero massimo di nodi nel pool di nodi
  • AZURE_ZONE: la zona di disponibilità Azure in cui GKE su Azure avvia il pool di nodi, ad esempio 3
  • SSH_PUBLIC_KEY: il testo della chiave pubblica SSH.
  • SUBNET_ID:l'ID della subnet del pool di nodi.

Abilita la riparazione automatica per un pool di nodi esistente

Per abilitare la riparazione automatica dei nodi su un pool di nodi esistente, esegui questo comando:

gcloud container azure node-pools update NODE_POOL_NAME \
   --cluster CLUSTER_NAME \
   --location GOOGLE_CLOUD_LOCATION \
   --enable-autorepair

Sostituisci quanto segue:

  • NODE_POOL_NAME: un nome univoco per il pool di nodi, ad esempio node-pool-1
  • CLUSTER_NAME: il nome del cluster
  • GOOGLE_CLOUD_LOCATION: la regione Google Cloud che gestisce il cluster

Disabilita la riparazione automatica per un pool di nodi esistente

gcloud container azure node-pools update NODE_POOL_NAME \
   --cluster CLUSTER_NAME \
   --location GOOGLE_CLOUD_LOCATION \
   --no-enable-autorepair

Sostituisci quanto segue:

  • NODE_POOL_NAME: un nome univoco per il pool di nodi, ad esempio node-pool-1
  • CLUSTER_NAME: il nome del cluster
  • GOOGLE_CLOUD_LOCATION: la regione Google Cloud che gestisce il cluster

Tieni presente che GKE su Azure esegue la disattivazione della riparazione automatica dei nodi. Quando disabiliti la riparazione automatica dei nodi per un pool di nodi esistente, GKE su Azure avvia un'operazione di aggiornamento del pool di nodi. L'operazione attende il completamento di eventuali riparazioni esistenti dei nodi prima di procedere.

Controlla se la riparazione automatica dei nodi è abilitata

Esegui questo comando per verificare se la riparazione automatica dei nodi è abilitata o meno:

gcloud container azure node-pools describe NODE_POOL_NAME \
   --cluster CLUSTER_NAME \
   --location GOOGLE_CLOUD_LOCATION

Sostituisci quanto segue:

  • NODE_POOL_NAME: un nome univoco per il pool di nodi, ad esempio node-pool-1
  • CLUSTER_NAME: il nome del cluster
  • GOOGLE_CLOUD_LOCATION: la regione Google Cloud che gestisce il cluster

Cronologia delle riparazioni dei nodi

Puoi visualizzare la cronologia delle riparazioni eseguite su un pool di nodi eseguendo questo comando:

gcloud container azure operations list \
   --location GOOGLE_CLOUD_LOCATION \
   --filter="metadata.verb=repair AND metadata.target=projects/PROJECT_ID/locations/GOOGLE_CLOUD_LOCATION/azureClusters/CLUSTER_NAME/azureNodePools/NODEPOOL_NAME

Sostituisci quanto segue:

  • GOOGLE_CLOUD_LOCATION: la regione supportata Google Cloud che gestisce il cluster, ad esempio us-west1
  • PROJECT_ID: il tuo progetto Google Cloud
  • CLUSTER_NAME: il nome del cluster
  • NODE_POOL_NAME: un nome univoco per il pool di nodi, ad esempio node-pool-1

Riepilogo dell'integrità del pool di nodi

Dopo aver abilitato la riparazione automatica dei nodi, puoi generare un riepilogo dell'integrità del pool di nodi eseguendo questo comando:

gcloud container azure node-pools describe NODE_POOL_NAME \
   --cluster CLUSTER_NAME \
   --location GOOGLE_CLOUD_LOCATION

Un riepilogo integro del pool di nodi è simile a questo esempio:

{
  "name": "some-np-name",
  "version": "some-version",
  "state": "RUNNING",

  ...

  "errors": [
    {
      "message": "1 node(s) is/are identified as unhealthy among 2 total node(s) in the node pool. No node is under repair."
    }
  ],
}

Il riepilogo dell'integrità del pool di nodi consente di comprendere lo stato attuale del pool di nodi. In questo esempio, il riepilogo contiene un messaggio di errore che indica che uno dei due nodi nel pool di nodi non è integro. Indica inoltre che al momento nessun nodo è in fase di riparazione.