Questo documento fornisce una breve panoramica degli aggiornamenti in sequenza standard e poi approfondisce gli aggiornamenti di sovraccarico, che sono un tipo speciale di aggiornamento in sequenza. Rispetto agli aggiornamenti in sequenza standard, gli aggiornamenti di sovraccarico ti consentono di configurare la velocità dell'aggiornamento. Gli aggiornamenti di sovraccarico ti consentono anche di esercitare un certo controllo sul livello di interruzione degli aggiornamenti per i tuoi workload.
Per informazioni su come abilitare e configurare gli aggiornamenti di sovraccarico per GKE su AWS, consulta Configurare gli aggiornamenti di sovraccarico dei node pool.
Come funzionano gli aggiornamenti in sequenza standard
Alcuni aggiornamenti di un pool di nodi, ad esempio quando modifichi le annotazioni di un pool di nodi, non richiedono il riavvio dei nodi e quindi non generano un aggiornamento in sequenza. Se GKE su AWS può applicare le modifiche a un pool di nodi senza dover riavviare o ricreare le risorse, lo farà per evitare interruzioni.
Tuttavia, la maggior parte degli aggiornamenti di un pool di nodi in GKE su AWS in genere comporta la terminazione dei nodi esistenti e l'avvio di nuovi nodi con le impostazioni aggiornate. Il processo di terminazione dei nodi esistenti può interrompere i workload.
Per impostazione predefinita, GKE su AWS esegue aggiornamenti in sequenza standard. Questo metodo aggiorna i nodi uno alla volta e vengono sostituiti utilizzando un approccio "termina prima di creare": un nodo viene terminato per primo e poi viene avviato un nuovo nodo aggiornato. Ciò riduce al minimo le interruzioni perché in un determinato momento viene terminato e sostituito un solo nodo.
Di seguito sono riportati i passaggi eseguiti da GKE su AWS durante un aggiornamento in sequenza standard:
- Seleziona un nodo dal pool di nodi e lo contrassegna come non disponibile per assicurarsi che non vengano avviati nuovi pod. Questa azione è chiamata cordoning.
- Trasferisce i pod attivi dal nodo in cordoning ad altri nodi disponibili all'interno del cluster. Se gli altri nodi hanno capacità sufficiente, ospitano i pod eliminati. In caso contrario, il gestore della scalabilità automatica dei cluster, che rimane attivo durante un aggiornamento in sequenza standard, avvia uno scale up ed esegue il provisioning di nodi aggiuntivi per garantire una capacità sufficiente per pianificare i pod eliminati. Per informazioni sulle misure adottate per proteggere i workload durante questo processo, consulta Protezione dei workload durante il ridimensionamento.
- Termina il nodo in cordoning.
- Sostituisce il nodo in cordoning con uno nuovo con le impostazioni aggiornate.
- Esegue un controllo di integrità sul nodo appena operativo. Se il pool di nodi non supera il controllo di integrità, viene contrassegnato con lo stato
DEGRADED. Questo stato può essere visualizzato eseguendo il comandogcloud container aws node-pools describe. Quando un pool di nodi è contrassegnato comeDEGRADED, è possibile che i nuovi pod non vengano pianificati sui nodi all'interno di quel pool. - Continua l'aggiornamento, nodo per nodo, finché non sono stati aggiornati tutti i nodi nel pool.
Come funzionano gli aggiornamenti di sovraccarico
In GKE su AWS, il metodo in sequenza standard aggiorna i nodi uno alla volta. Gli aggiornamenti Surge, che sono una forma di aggiornamento in sequenza, ti consentono di aggiornare più nodi contemporaneamente. Gli aggiornamenti di sovraccarico sono quindi più veloci degli aggiornamenti in sequenza standard. Tuttavia, l'aggiornamento simultaneo di più nodi può interrompere i workload. Per attenuare questo problema, gli aggiornamenti di sovraccarico forniscono opzioni per modulare il livello di interruzione dei workload.
Un altro modo in cui gli aggiornamenti di sovraccarico possono differire dagli aggiornamenti in sequenza standard è il modo in cui vengono sostituiti i nodi. Gli aggiornamenti in sequenza standard sostituiscono i nodi utilizzando una strategia "termina prima di creare". A seconda delle impostazioni scelte, gli aggiornamenti di sovraccarico possono utilizzare una strategia "crea prima di terminare", una strategia "termina prima di creare" o anche una combinazione di entrambe.
Il gestore della scalabilità automatica dei cluster svolge un ruolo più importante negli aggiornamenti di sovraccarico rispetto agli aggiornamenti in sequenza standard, motivo per cui è presente in modo prominente nel seguente elenco di azioni eseguite da GKE su AWS durante un aggiornamento di sovraccarico:
- Creazione di un nuovo gruppo di scalabilità automatica: GKE su AWS esegue il provisioning di nuovi nodi con le modifiche specificate dal comando di aggiornamento e assegna questi nuovi nodi a un nuovo gruppo di scalabilità automatica (ASG) AWS.
- Comportamento del gestore della scalabilità automatica dei cluster: all'inizio dell'aggiornamento di sovraccarico, il gestore della scalabilità automatica dei cluster viene attivato per il nuovo gruppo di scalabilità automatica. Il gestore della scalabilità automatica dei cluster per il gruppo di scalabilità automatica originale viene disattivato. In questo modo, tutte le operazioni di scalabilità hanno come target solo il nuovo gruppo.
- Sostituzione dei nodi: a seconda dei parametri di aggiornamento di sovraccarico, vengono utilizzate diverse
strategie per la sostituzione dei nodi:
- "Crea prima di terminare": questa strategia viene attivata quando il parametro
max-surge-updateè impostato su un valore maggiore di zero. Genera nuovi nodi nel nuovo ASG prima di terminare quelli precedenti nell'ASG originale, con l'obiettivo di ridurre al minimo le interruzioni del servizio. - "Termina prima di creare": questo metodo viene attivato quando il parametro
max-surge-updateè impostato su zero e il parametromax-unavailable-updateha un valore maggiore di zero. I nodi dell'ASG originale vengono terminati per primi, seguiti dalla creazione di nuovi nodi nel nuovo ASG.
- "Crea prima di terminare": questa strategia viene attivata quando il parametro
- Modifiche delle dimensioni del node pool: durante l'aggiornamento, le dimensioni del pool di nodi
(ovvero la somma dei nodi nell'ASG precedente e in quello nuovo) potrebbero fluttuare
al di sopra o al di sotto del conteggio originale dei nodi presenti nel pool di nodi prima
dell'inizio dell'aggiornamento. In particolare, GKE su AWS mira a mantenere il conteggio totale dei nodi
nell'intervallo da (
original_count-max-unavailable-update) a (original_count+max-surge-update). Alla fine, i nodi nel vecchio ASG (original_count) vengono sostituiti con i nodi aggiornati nel nuovo ASG. Il gestore della scalabilità automatica dei cluster potrebbe avviare altri nodi nel nuovo ASG se rileva che i pod non possono essere pianificati, ma rimane entro i limiti definiti damin-nodesemax-nodes.
Un esempio per illustrare il processo
Per comprendere meglio il funzionamento degli aggiornamenti di sovraccarico, considera l'esempio seguente. Supponiamo che tu abbia un pool di nodi con 5 nodi ed esegui il seguente comando:
gcloud container aws node-pools update production-node-pool
--cluster my-cluster \
--location us-west1 \
--max-surge-update 2 \
--max-unavailable-update 1 \
--node-version 1.27.6-gke.700
In questo esempio, max-surge-update è impostato su 2, max-unavailable-update è impostato su 1 e stai fornendo una nuova versione pool di nodi (ovvero stai modificando la versione di GKE in esecuzione sui nodi nel pool di nodi).
L'esecuzione di questo comando attiva un aggiornamento di sovraccarico e GKE su AWS esegue le seguenti azioni:
- Crea 2 nodi aggiuntivi perché il valore di
max-surge-updateè 2. - Assegna questi 2 nodi aggiuntivi a un nuovo gruppo di scalabilità automatica AWS.
- Rimuove i nodi dal gruppo di scalabilità automatica originale una volta che questi nuovi nodi sono operativi. GKE su AWS disattiva fino a 3 nodi (il valore combinato di
max-surge-updateemax-unavailable-update), ma garantisce che al massimo un solo nodo diventi non disponibile in qualsiasi momento (a causa del valoremax-unavailable-updatepari a 1). - Ripeti questi passaggi finché tutti i nodi nel pool di nodi non sono stati aggiornati alla nuova versione di GKE.
Durante questo aggiornamento, il pool di nodi contiene da 4 a 7 nodi operativi.
Aspetti da considerare prima di eseguire gli aggiornamenti di sovraccarico
Prima di eseguire un aggiornamento di sovraccarico, tieni presente quanto segue:
- Le istanze aggiuntive create nell'ambito di questo passaggio di sovraccarico possono potenzialmente superare il limite di quota delle istanze AWS. Se non hai una quota sufficiente e non è possibile eseguire il provisioning di queste istanze aggiuntive, l'aggiornamento potrebbe non riuscire.
- Se
max-unavailable-updateè impostato su 0, possono comunque verificarsi interruzioni dei workload quando i pod vengono eliminati e ripianificati sui nodi più recenti. - Il numero massimo di nodi che possono essere aggiornati contemporaneamente è uguale alla somma di
max-surge-updateemax-unavailable-updateed è limitato a 20.
Scegli le impostazioni di sovraccarico giuste per le tue esigenze
Mentre gli aggiornamenti in sequenza standard spesso utilizzano un approccio "termina prima di creare", gli aggiornamenti di sovraccarico introducono una maggiore flessibilità. A seconda della configurazione, gli aggiornamenti di sovraccarico possono seguire una strategia "crea prima di terminare", una strategia "termina prima di creare" o una combinazione di entrambe. Questa sezione descrive diverse configurazioni per aiutarti a selezionare l'approccio migliore per i tuoi workload.
La tabella seguente mostra tre esempi di impostazioni ed evidenzia il loro impatto sulla velocità dell'aggiornamento e sulla potenziale interruzione dei workload:
| Nome | Descrizione | Configurazione |
| Impostazione bilanciata (impostazione predefinita) | Bilanciata, più lenta ma meno interruttiva. | maxSurge=1, maxUnavailable=0 |
| Aggiornamenti rapidi senza risorse aggiuntive | Veloce, senza risorse di sovraccarico, più interruttiva. | maxSurge=0, maxUnavailable=20 |
| Aggiornamenti rapidi meno interruttivi | Veloce, la maggior parte delle risorse di sovraccarico e meno interruttiva. | maxSurge=20, maxUnavailable=0 |
Ogni impostazione nella tabella è descritta nelle sezioni seguenti.
Impostazione bilanciata (impostazione predefinita)
Il modo più semplice per utilizzare gli aggiornamenti di sovraccarico è con la configurazione predefinita di max-surge-update=1 e max-unavailable-update=0. Questa configurazione aggiunge solo 1 nodo di sovraccarico al pool di nodi durante l'aggiornamento e viene aggiornato un solo nodo alla volta, seguendo un approccio "crea prima di terminare". Rispetto all'aggiornamento in sequenza standard senza sovraccarico, che è equivalente a (max-surge-update=0, max-unavailable-update=1), questo metodo è meno interruttivo, accelera i riavvii dei pod durante gli aggiornamenti ed è più conservativo nella sua progressione.
È importante notare che l'adozione dell'impostazione bilanciata può comportare costi aggiuntivi a causa del nodo di sovraccarico temporaneo aggiunto durante l'aggiornamento. Questo nodo aggiuntivo comporta addebiti mentre è attivo, aumentando leggermente la spesa complessiva rispetto ai metodi senza nodi di sovraccarico.
Aggiornamenti rapidi senza risorse aggiuntive
Per i workload che possono tollerare interruzioni, potrebbe essere adatto un approccio di aggiornamento più rapido. La configurazione di max-surge-update=0 e max-unavailable-update=20 consente di ottenere questo risultato. Con questa configurazione, è possibile aggiornare 20 nodi contemporaneamente senza aggiungere nodi di sovraccarico. Questo metodo di aggiornamento segue un approccio "termina prima di creare". Poiché non vengono introdotti nodi di sovraccarico aggiuntivi durante il processo, questo metodo è anche il più conveniente, in quanto evita spese aggiuntive associate ai nodi temporanei.
Aggiornamenti rapidi meno interruttivi
Se i tuoi workload sono sensibili alle interruzioni, puoi aumentare la velocità dell'aggiornamento con le seguenti impostazioni: max-surge-update=20 e max-unavailable-update=0. Questa configurazione aggiorna 20 nodi in parallelo in modalità "crea prima di terminare".
Tuttavia, la velocità complessiva dell'aggiornamento può essere limitata se hai configurato
PodDisruptionBudgets (PDB)
per i tuoi workload. Questo perché il PDB limita il numero di pod che possono essere svuotati in un determinato momento. Sebbene le configurazioni dei PDB possano variare, se crei un PDB con maxUnavailable uguale a 1 per uno o più workload in esecuzione sul pool di nodi, solo un pod di questi workload può essere eliminato alla volta, limitando il parallelismo dell'intero aggiornamento.
Ricorda che l'avvio di più nodi di sovraccarico all'inizio del processo di aggiornamento può comportare un aumento temporaneo dei costi, soprattutto rispetto alle configurazioni che non aggiungono nodi aggiuntivi o ne aggiungono meno durante gli aggiornamenti.
Passaggi successivi
Per informazioni su come abilitare e configurare gli aggiornamenti di sovraccarico per GKE su AWS, consulta Configurare gli aggiornamenti di sovraccarico dei node pool.