Arresto controllato dei nodi in GKE su Azure
A partire dalla versione 1.26, GKE su Azure abilita automaticamente l'arresto controllato dei nodi. Questa funzionalità gestisce l'arresto normale dei pod durante gli arresti dei nodi. L'arresto controllato consente ai pod di salvare il proprio stato e rilasciare le risorse prima che il nodo venga arrestato. Questo metodo di terminazione dei pod riduce al minimo il rischio di perdita di dati. Inoltre, riduce al minimo il rischio di interruzioni di altri pod e servizi che si basano sui pod in fase di arresto o interagiscono con questi, migliorando così la resilienza dei cluster.
Come funziona
Un evento come la manutenzione pianificata, lo scaling dei nodi o un problema hardware
attiva l'arresto di un nodo. Il componente kubelet
rileva l'evento e
avvia il processo di interruzione controllata del nodo istruendo systemd
a
ritardare l'arresto del sistema per una durata specificata. Questo ritardo consente al nodo
di svuotare e rimuovere i pod in esecuzione.
L'obiettivo dell'arresto controllato del nodo è arrestare in modo controllato sia i pod di sistema non critici sia quelli critici prima dell'arresto del nodo. Vengono utilizzate le seguenti impostazioni predefinite:
ShutdownGracePeriod
: 30 secondiShutdownGracePeriodCriticalPods
: 15 secondi
Queste impostazioni concedono ai pod non di sistema 15 secondi per terminare normalmente prima di essere arrestati forzatamente. I pod di sistema critici hanno 15 secondi per spegnersi dopo che i pod non di sistema sono stati terminati. Tuttavia, poiché la funzionalità opera in base al principio del best effort, è possibile che un nodo non riesca a spegnersi correttamente entro il periodo di 30 secondi designato.
Attivatori e limitazioni
Gli eventi che attivano l'arresto controllato del nodo includono eventi pianificati come i seguenti:
- Arresti comandati dall'utente
- Terminazione delle istanze
- Manutenzione pianificata
- Riduzione delle dimensioni di un cluster
In questi scenari, kubelet
rileva l'evento di arresto del nodo e avvia
il processo di arresto normale del nodo.
Al contrario, l'arresto normale del nodo non può essere attivato quando il comando di arresto
non attiva il meccanismo di blocco dell'inibitore systemd
su cui si basa il componente kubelet
. Ecco alcuni esempi di questo tipo di situazioni:
- Disconnessioni di rete
- Malfunzionamenti hardware
- Risorse insufficienti, ad esempio memoria o CPU
- Interruzioni di corrente impreviste.
In questi casi, il nodo potrebbe spegnersi improvvisamente, causando potenzialmente interruzioni o perdita di dati.