Opzioni di aggiornamento per i cluster del servizio Azure Kubernetes (AKS)
Questo articolo illustra le diverse opzioni di aggiornamento per i cluster del servizio Azure Kubernetes. Per eseguire un aggiornamento della versione Kubernetes di base, vedere Aggiornare un cluster del servizio Azure Kubernetes.
Per i cluster del servizio Azure Kubernetes che usano più pool di nodi o nodi di Windows Server, vedere Aggiornare un pool di nodi nel servizio Azure Kubernetes. Per aggiornare un pool di nodi specifico senza eseguire un aggiornamento del cluster Kubernetes, vedere Aggiornare un pool di nodi specifico.
Eseguire aggiornamenti manuali
È possibile eseguire aggiornamenti manuali per controllare quando il cluster viene aggiornato a una nuova versione di Kubernetes. Gli aggiornamenti manuali sono utili quando si vuole testare una nuova versione di Kubernetes prima di aggiornare il cluster di produzione. È possibile usare gli aggiornamenti manuali anche per aggiornare il cluster a una versione specifica di Kubernetes che non è la versione più recente disponibile.
Per eseguire gli aggiornamenti manuali, vedere gli articoli seguenti:
- Aggiornare un cluster del servizio Azure Kubernetes
- Aggiornare l'immagine del nodo
- Personalizzare l'aggiornamento del picco di nodi
- Elaborare gli aggiornamenti del sistema operativo del nodo
- Aggiornare più cluster del servizio Azure Kubernetes tramite Gestione flotta Kubernetes
Configurare gli aggiornamenti automatici
È possibile configurare gli aggiornamenti automatici per aggiornare automaticamente il cluster alla versione più recente disponibile di Kubernetes. Gli aggiornamenti automatici sono utili quando ci si vuole assicurare che il cluster esegua sempre la versione più recente di Kubernetes. È possibile usare gli aggiornamenti automatici anche per assicurarsi che il cluster esegua sempre una versione di Kubernetes supportata.
Per configurare gli aggiornamenti automatici, vedere gli articoli seguenti:
- Aggiornare automaticamente un cluster del servizio Azure Kubernetes
- Usare la manutenzione pianificata per pianificare e controllare gli aggiornamenti per il cluster del servizio Azure Kubernetes
- Arrestare automaticamente gli aggiornamenti del cluster del servizio Azure Kubernetes nelle modifiche che causano un'interruzione dell'API (Anteprima)
- Aggiornare automaticamente le immagini del sistema operativo del nodo del cluster del servizio Azure Kubernetes
- Applicare automaticamente gli aggiornamenti della sicurezza ai nodi del servizio Azure Kubernetes usando GitHub Actions
Considerazioni speciali per i pool di nodi che si estendono su più zone di disponibilità
Il servizio Azure Kubernetes usa il bilanciamento delle zone con massimo sforzo nei gruppi di nodi. Durante un picco di aggiornamento, le zone relative ai nodi di picco nei set di scalabilità di macchine virtuali sono inizialmente sconosciute, il che può temporaneamente causare una configurazione sbilanciata delle zone durante l'aggiornamento. Tuttavia, il servizio Azure Kubernetes elimina i nodi di picco al termine dell'aggiornamento e mantiene il bilanciamento delle zone originale. Se si vuole mantenere bilanciate le zone durante gli aggiornamenti, è possibile aumentare il picco di un numero multiplo di tre nodie i set di scalabilità di macchine virtuali bilanceranno i nodi nelle zone di disponibilità con il bilanciamento delle zone con massimo sforzo. Con il bilanciamento delle zone con massimo sforzo, il set di scalabilità tenta di aumentare e ridurre il numero di macchine virtuali mantenendo il bilanciamento. Tuttavia, se per qualche motivo questo non è possibile (ad esempio, se una zona scende, il set di scalabilità non può creare una nuova macchina virtuale in tale zona), il set di scalabilità consente lo squilibrio temporaneo per aumentare o ridurre correttamente il numero di istanze.
Le attestazioni di volume persistente (PVC) supportate da dischi di archiviazione con ridondanza locale (LRS) di Azure sono associate a una determinata zona e potrebbero non riuscire a eseguire il ripristino immediato se il nodo di picco non corrisponde alla zona del PVC. Se le zone non corrispondono, possono verificarsi tempi di inattività nell'applicazione quando l'operazione di aggiornamento continua a svuotare i nodi, ma i PVC sono associati a una zona. Per gestire questo caso e mantenere la disponibilità elevata, configurare un budget per l'interruzione dei pod nell'applicazione per consentire a Kubernetes di rispettare i requisiti di disponibilità durante l'operazione di svuotamento.
Ottimizzare il comportamento dei nodi non restrittivi (anteprima)
È possibile configurare il comportamento del processo di aggiornamento per gli errori di svuotamento. Il comportamento di aggiornamento predefinito è Schedule
, costituito da un errore di svuotamento del nodo che causa l'esito negativo dell'operazione di aggiornamento, lasciando i nodi non radicati in uno stato pianificabile. In alternativa, è possibile selezionare il Cordon
comportamento, che ignora i nodi che non riescono a svuotare inserendoli in uno stato in quarantena, li etichetta kubernetes.azure.com/upgrade-status:Quarantined
e procede con l'aggiornamento dei nodi rimanenti. Questo comportamento garantisce che tutti i nodi vengano aggiornati o messi in quarantena. Questo approccio consente di risolvere gli errori di svuotamento e gestire normalmente i nodi in quarantena.
Ricerca per categorie impostare il nuovo comportamento di Cordon?
Usare l'anteprima dell'interfaccia della riga di comando e installare aks-preview
l'estensione 9.0.0b3 o successiva.
È possibile usare i comandi seguenti per aggiornare o installare aks-preview
l'estensione:
az extension update --name aks-preview
az extension add --name aks-preview
Aggiornare il comportamento del nodo non restrittivo del pool di nodi in Cordon
:
az aks nodepool update --cluster-name $CLUSTER_NAME --name $NODE_POOL_NAME --resource-group $RESOURCE_GROUP --max-surge 1 --undrainable-node-behavior Cordon
L'output di esempio seguente mostra il comportamento del nodo non restrittivo aggiornato:
"upgradeSettings": {
"drainTimeoutInMinutes": null,
"maxSurge": "1",
"nodeSoakDurationInMinutes": null,
"undrainableNodeBehavior": "Cordon"
}
Verificare l'etichetta in tutti i nodi bloccati. Quando si verifica un errore di svuotamento del nodo durante l'aggiornamento usando il comando seguente:
kubectl get nodes --show-labels=true
I nodi bloccati non sono pianificati per i pod e contrassegnati con l'etichetta "kubernetes.azure.com/upgrade-status: Quarantined"
. Il numero massimo di nodi che possono essere lasciati bloccati non può essere maggiore del Max-Surge
valore.
Ricerca per categorie rimuovere i nodi bloccati?
Risolvere prima di tutto il problema che causa lo svuotamento. Nell'esempio seguente viene rimosso il PDB responsabile:
kubectl delete pdb nginx-pdb
poddisruptionbudget.policy "nginx-pdb" deleted.
Eliminare quindi il nodo bloccato usando il az aks nodepool delete-machines
comando . Questo comando è utile se si intende ridurre il footprint del pool di nodi rimuovendo i nodi lasciati indietro nelle versioni precedenti.
az aks nodepool delete-machines --cluster-name MyCluster --machine-names aks-nodepool1-test123-vmss000000 --name nodepool1 --resource-group TestRG
Dopo aver completato questo passaggio, è possibile riconciliare lo stato del cluster eseguendo qualsiasi operazione di aggiornamento senza i campi facoltativi come descritto qui.
Comando di esempio:
az aks update --resource-group TestRG --name MyCluster
In alternativa, è possibile ridimensionare il pool di nodi allo stesso numero di nodi del numero di nodi aggiornati. Questa azione garantisce che il pool di nodi ottenga le dimensioni originali desiderate. Il servizio Azure Kubernetes assegna la priorità alla rimozione dei nodi bloccati. Questo comando ripristina anche lo stato del provisioning del cluster su Succeeded
. Nell'esempio specificato è 2
il numero totale di nodi aggiornati.
az aks nodepool scale --resource-group TestRG --cluster-name MyCluster --name nodepool1 --node-count 2
Ottimizzare gli aggiornamenti per migliorare le prestazioni e ridurre al minimo le interruzioni
La combinazione di Finestra di manutenzione pianificata, Picco massimo, Budget per l'interruzione dei pod, Timeout di svuotamento dei nodie Tempo di attesa dei nodi può aumentare significativamente la probabilità che gli aggiornamenti dei nodi vengano completati correttamente entro la fine della finestra di manutenzione, riducendo al minimo le interruzioni.
- Finestra di manutenzione pianificata consente ai team del servizio di pianificare l'aggiornamento automatico durante una finestra predefinita, in genere un periodo di traffico ridotto, per ridurre al minimo l'impatto sul carico di lavoro. È consigliabile una finestra della durata di almeno quattro ore.
- Picco massimo nel pool di nodi consente di richiedere una quota aggiuntiva durante il processo di aggiornamento e limita contemporaneamente il numero di nodi selezionati per l'aggiornamento. Un picco massimo superiore comporta un processo di aggiornamento più rapido. Non è consigliabile impostare il picco massimo su 100%, in quanto tutti i nodi vengono aggiornati contemporaneamente, causando interruzioni nell'esecuzione delle applicazioni. Per i pool di nodi di produzione, è consigliabile una quota di picco massimo di 33%.
- Budget per l'interruzione dei pod è impostato per le applicazioni di servizio e limita il numero di pod che possono essere disattivati durante interruzioni volontarie, ad esempio gli aggiornamenti dei nodi controllati dal servizio Azure Kubernetes. Può essere configurato come repliche
minAvailable
, che indica il numero minimo di pod dell'applicazione che devono essere attivi o replichemaxUnavailable
, che indica il numero massimo di pod dell'applicazione che possono essere terminati, garantendo la disponibilità elevata per l'applicazione. Fare riferimento alle indicazioni fornite per configurare Budget per l'interruzione dei pod (PDB). I valori PDB devono essere convalidati per determinare le impostazioni che funzionano meglio per il servizio specifico. - Timeout di svuotamento dei nodi nel pool di nodi consente di configurare la durata di attesa per la rimozione dei pod e la terminazione normale per ogni nodo durante un aggiornamento. Questa opzione è utile quando si gestiscono carichi di lavoro a esecuzione prolungata. Quando viene specificato il timeout di svuotamento dei nodi (in minuti), il servizio Azure Kubernetes rispetta l'attesa nei budget di interruzione dei pod. Se non specificato, il timeout predefinito è 30 minuti.
- Tempo di attesa dei nodi consente di scaglionare gli aggiornamenti dei nodi in modo controllato e può ridurre al minimo i tempi di inattività delle applicazioni durante un aggiornamento. È possibile specificare un tempo di attesa, preferibilmente il più vicino possibile a 0 minuti, per verificare la disponibilità dell'applicazione tra gli aggiornamenti dei nodi. Se non è specificato, il valore predefinito è 0 minuti. Tempo di attesa dei nodi funziona insieme alle proprietà Picco massimo e Timeout di svuotamento dei nodi disponibili nel pool di nodi per restituire risultati corretti in termini di velocità di aggiornamento e disponibilità dell'applicazione.
Passaggi successivi
Questo articolo illustra le diverse opzioni di aggiornamento per i cluster del servizio Azure Kubernetes. Per una descrizione dettagliata delle procedure consigliate per l'aggiornamento e altre considerazioni, vedere Linee guida per l'aggiornamento e le patch del servizio Azure Kubernetes.
Azure Kubernetes Service