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 di degrado 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 puoi abilitare o disabilitare questa funzionalità sui pool di nodi anziché sui 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 viene considerato integro se segnala lo stato Ready
.
Altrimenti, se viene segnalato consecutivamente uno stato non integro per una durata specifica, le riparazioni vengono avviate.
Uno stato non integro può derivare da uno stato NotReady
, rilevato in controlli consecutivi di circa 15 minuti. In alternativa, uno stato non integro potrebbe derivare dall'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 di PodDisruptionBudget
, rispetta le Pod Termination
Grace Period
e adotta altre misure che riducono al minimo l'interruzione dei cluster durante la riparazione dei nodi.
Rendi omaggio a PodDisruptionBudget
per 30 minuti
Se un nodo deve essere riparato, non viene svuotato e ricreato immediatamente. La funzionalità di riparazione automatica dei nodi rispetta invece 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 deve essere disponibile in un determinato momento).
Rispettando il PodDisruptionBudget
per circa 30 minuti, la funzionalità di riparazione automatica dei nodi offre ai pod una finestra di opportunità per ripianificare e ridistribuire in sicurezza i pod tra altri nodi integri nel 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 il processo di riparazione, anche se significa violazione di PodDisruptionBudget
. Senza un limite di tempo, il processo di riparazione potrebbe bloccarsi a tempo indeterminato se la configurazione di PodDisruptionBudget
impedisce le rimozioni necessarie per la riparazione.
Rispetta il periodo di tolleranza per la risoluzione del pod
La funzionalità di riparazione automatica dei nodi rispetta anche un periodo di tolleranza per la terminazione 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 liberare le risorse associate ai pod su quel Nodo. La funzionalità di riparazione automatica dei nodi consente fino a 30 minuti affinché kubelet completi questa pulizia. Una volta trascorsi i 30 minuti previsti, il nodo verrà arrestato forzatamente, indipendentemente dal fatto che i pod siano stati arrestati correttamente.
Ulteriori strategie 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 disabiliti la riparazione automatica dei nodi durante il processo di riparazione, le riparazioni in corso continueranno finché l'operazione non va a buon fine o meno.
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à sui pool di nodi anziché su 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 scelto da te per il pool di nodi. Per ottenere i nomi dei tuoi pool di nodi, esegui il comandogcloud container aws node-pools list --cluster CLUSTER_NAME --location GOOGLE_CLOUD_LOCATION
CLUSTER_NAME
: il nome del cluster a cui collegare il pool di nodiINSTANCE_TYPE
: il tipo di istanza di macchina AWS desiderato per questo pool di nodi, ad esempiom5.large
ROOT_VOLUME_SIZE
: la dimensione desiderata per il volume principale di ogni nodo, in GBNODEPOOL_PROFILE
: il profilo dell'istanza IAM per le VM del pool di nodiNODE_VERSION
: la versione di Kubernetes da installare su ciascun nodo nel pool di nodi (ad es. "1.29.3-gke.600")MIN_NODES
: il numero minimo di nodi che il pool di nodi può contenereMAX_NODES
: il numero massimo di nodi che il pool di nodi può contenereMAX_PODS_PER_NODE
: numero massimo di pod che è possibile creare su qualsiasi singolo nodo del poolGOOGLE_CLOUD_LOCATION
: nome della località Google Cloud da cui verrà gestito questo pool di nodiNODEPOOL_SUBNET
: l'ID della subnet in cui verrà eseguito il pool di nodi.- Non deve esserci alcuna sovrapposizione tra gli intervalli IP di pod/servizio del cluster e la rete di subnet del pool di nodi. Per ulteriori informazioni sulla selezione degli intervalli IP di pod e servizi per il tuo cluster, consulta Selezionare gli intervalli CIDR per il cluster
- Se questa subnet si trova all'esterno del blocco CIDR primario del VPC, sono necessari alcuni passaggi aggiuntivi. Per maggiori informazioni, consulta la pagina relativa ai gruppi di sicurezza.
SSH_KEY_PAIR_NAME
: nome della coppia di chiavi AWS SSH creata per l'accesso SSH (facoltativo)CONFIG_KMS_KEY_ARN
: l'Amazon Resource Name (ARN) della chiave KMS AWS che cripta i dati utente
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 aws node-pools update NODE_POOL_NAME \
--cluster CLUSTER_NAME \
--location GOOGLE_CLOUD_LOCATION \
--enable-autorepair
Sostituisci quanto segue:
NODE_POOL_NAME
: nome univoco per il pool di nodi, ad esempionode-pool-1
CLUSTER_NAME
: il nome del clusterGOOGLE_CLOUD_LOCATION
: la regione Google Cloud che gestisce il cluster
Disabilita 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
: nome univoco per il pool di nodi, ad esempionode-pool-1
CLUSTER_NAME
: il nome del clusterGOOGLE_CLOUD_LOCATION
: la regione Google Cloud che gestisce il cluster
Tieni presente che GKE su AWS esegue la disabilitazione automatica della riparazione automatica dei nodi. 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 in attesa del completamento di eventuali riparazioni dei nodi esistenti prima di procedere.
Verificare se la riparazione automatica dei nodi è abilitata
Esegui questo comando per verificare se la riparazione automatica dei nodi è abilitata o meno:
gcloud container aws node-pools describe NODE_POOL_NAME \
--cluster CLUSTER_NAME \
--location GOOGLE_CLOUD_LOCATION
Sostituisci quanto segue:
NODE_POOL_NAME
: nome univoco per il pool di nodi, ad esempionode-pool-1
CLUSTER_NAME
: il nome del clusterGOOGLE_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 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 supportata di Google Cloud che gestisce il cluster, ad esempious-west1
PROJECT_ID
: il tuo progetto Google CloudCLUSTER_NAME
: il nome del clusterNODE_POOL_NAME
: nome univoco per il pool di nodi, ad esempionode-pool-1
Riepilogo 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 aws node-pools describe NODE_POOL_NAME \
--cluster CLUSTER_NAME \
--location GOOGLE_CLOUD_LOCATION
Un riepilogo dello stato 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 sull'integrità 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. Segnala inoltre che nessun nodo è attualmente sottoposto al processo di riparazione.