Riparazione automatica dei nodi

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

Puoi abilitare la riparazione automatica dei nodi quando crei o aggiorni un pool di nodi. Tieni presente che puoi attivare o disattivare questa funzionalità 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 una riparazione. Un nodo è considerato integro se segnala uno stato Ready. In caso contrario, se segnala consecutivamente uno stato non integro per un periodo di tempo specifico, vengono avviate le riparazioni.

Uno stato non integro può derivare da uno stato NotReady, rilevato in controlli consecutivi per circa 15 minuti. In alternativa, uno stato non integro può derivare dallo spazio sul disco di avvio esaurito, 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 di PodDisruptionBudget, rispetta Pod Termination Grace Period e adotta altre misure che riducono al minimo l'interruzione del cluster durante la riparazione dei nodi.

Onora PodDisruptionBudget per 30 minuti

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

Rispettando il PodDisruptionBudget per circa 30 minuti, la funzionalità di riparazione automatica dei nodi offre una finestra di opportunità per riprogrammare e ridistribuire in modo sicuro i pod tra gli altri nodi integri del cluster. In questo modo viene mantenuto il livello di disponibilità dell'applicazione desiderato durante la procedura di riparazione.

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

Rispetta il periodo di tolleranza per la cessazione del pod

La funzionalità di riparazione automatica dei nodi rispetta anche un periodo di tolleranza per l'interruzione del pod di circa 30 minuti. Il periodo di tolleranza per l'arresto dei pod offre ai pod un periodo di tempo per un arresto controllato durante l'arresto. Durante il periodo di tolleranza, 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 a kubelet di completare questa pulizia entro 30 minuti. Se trascorrono i 30 minuti assegnati, il nodo viene arrestato forzatamente, indipendentemente dal fatto che i pod siano stati arrestati normalmente.

Strategie aggiuntive di riparazione dei nodi

La riparazione automatica dei nodi implementa anche le seguenti strategie:

  • Se più nodi richiedono la riparazione, vengono riparati uno alla volta per limitare l'interruzione del cluster e proteggere i carichi di lavoro.
  • Se disattivi la riparazione automatica dei nodi durante la procedura di riparazione, le riparazioni in corso continuano comunque fino al completamento o all'esito negativo dell'operazione.

Come attivare e disattivare la riparazione automatica dei nodi

Puoi abilitare o disabilitare la riparazione automatica dei nodi quando crei o aggiorni un pool di nodi. Puoi attivare o disattivare questa funzionalità sui pool di nodi anziché sui singoli nodi.

Abilita la riparazione automatica per un nuovo pool di nodi

gcloud container aws node-pools create NODE_POOL_NAME \
   --cluster CLUSTER_NAME \
   --instance-type INSTANCE_TYPE \
   --root-volume-size ROOT_VOLUME_SIZE \
   --iam-instance-profile NODEPOOL_PROFILE \
   --node-version NODE_VERSION \
   --min-nodes MIN_NODES \
   --max-nodes MAX_NODES \
   --max-pods-per-node MAX_PODS_PER_NODE \
   --location GOOGLE_CLOUD_LOCATION \
   --subnet-id NODEPOOL_SUBNET \
   --ssh-ec2-key-pair SSH_KEY_PAIR_NAME \
   --config-encryption-kms-key-arn CONFIG_KMS_KEY_ARN \
   --tags "Name=CLUSTER_NAME-NODE_POOL_NAME" \
   --enable-autorepair

Sostituisci quanto segue:

  • NODE_POOL_NAME: un nome che scegli per il tuo pool di nodi. Per ottenere i nomi dei tuoi node pool, esegui il comando gcloud container aws node-pools list --cluster CLUSTER_NAME --location GOOGLE_CLOUD_LOCATION
  • CLUSTER_NAME: il nome del cluster a cui collegare il pool di nodil
  • INSTANCE_TYPE: il tipo di istanza macchina AWS desiderato per questo node pool, ad esempio m5.large
  • ROOT_VOLUME_SIZE: la dimensione desiderata per il volume radice di ogni nodo, in GB
  • NODEPOOL_PROFILE: il profilo istanza IAM per le VM del pool di nodi
  • NODE_VERSION: la versione di Kubernetes da installare su ogni nodo del pool di nodi (ad es. "1.32.4-gke.200")
  • MIN_NODES: il numero minimo di nodi che il pool di nodi può contenere
  • MAX_NODES: il numero massimo di nodi che il pool di nodi può contenere
  • MAX_PODS_PER_NODE: il numero massimo di pod che possono essere creati su un singolo nodo del pool
  • GOOGLE_CLOUD_LOCATION: il nome della località Google Cloud da cui verrà gestito questo pool di nodi
  • NODEPOOL_SUBNET: l'ID della subnet su cui verrà eseguito il pool di nodi.
    • Non deve esserci alcuna sovrapposizione tra gli intervalli IP di pod/servizi del cluster e la rete di subnet del pool di nodi. Per maggiori informazioni sulla selezione degli intervalli IP di pod e servizi per il cluster, consulta Selezionare gli intervalli CIDR per il cluster.
    • Se questa subnet si trova al di fuori del blocco CIDR principale del VPC, sono necessari alcuni passaggi aggiuntivi. Per ulteriori informazioni, vedi Gruppi di sicurezza.
  • SSH_KEY_PAIR_NAME: il nome della coppia di chiavi SSH AWS creata per l'accesso SSH (facoltativo)
  • CONFIG_KMS_KEY_ARN: l'Amazon Resource Name (ARN) della chiave AWS KMS che cripta i dati utente

Abilitare la riparazione automatica per un pool di nodi esistente

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

gcloud container aws 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 tuo cluster
  • GOOGLE_CLOUD_LOCATION: la regione Google Cloud che gestisce il tuo cluster

Disabilitare la riparazione automatica per un pool di nodi esistente

gcloud container aws 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 tuo cluster
  • GOOGLE_CLOUD_LOCATION: la regione Google Cloud che gestisce il tuo cluster

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

Controlla se la riparazione automatica dei nodi è abilitata

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

gcloud container aws 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 tuo cluster
  • GOOGLE_CLOUD_LOCATION: la regione Google Cloud che gestisce il tuo cluster

Cronologia delle riparazioni dei nodi

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

gcloud container aws operations list \
   --location GOOGLE_CLOUD_LOCATION \
   --filter="metadata.verb=repair AND metadata.target=projects/PROJECT_ID/locations/GOOGLE_CLOUD_LOCATION/awsClusters/CLUSTER_NAME/awsNodePools/NODEPOOL_NAME

Sostituisci quanto segue:

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

Riepilogo dello stato del node pool

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

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

Un riepilogo dello stato di un 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 dello stato del pool di nodi ti aiuta a 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. Inoltre, segnala che nessun nodo è attualmente in fase di riparazione.