Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
È possibile modificare le dimensioni delle macchine virtuali per supportare un numero crescente di distribuzioni o per eseguire un carico di lavoro più grande. Il ridimensionamento delle istanze del servizio Azure Kubernetes direttamente non è supportato quando si usano set di scalabilità di macchine virtuali nel servizio Azure Kubernetes, come descritto nei criteri di supporto per il servizio Azure Kubernetes:
I nodi dell'agente del servizio Azure Kubernetes vengono visualizzati nel portale di Azure come normali risorse IaaS di Azure. Tuttavia, queste macchine virtuali vengono distribuite in un gruppo di risorse di Azure personalizzato (in genere preceduto da MC_*). Non è possibile eseguire personalizzazioni dirette a questi nodi usando le API O le risorse IaaS. Le modifiche personalizzate non eseguite tramite l'API di AKS non verranno mantenute durante un aggiornamento, una scalatura, un aggiornamento o un riavvio.
In questo articolo viene illustrato il metodo consigliato per ridimensionare un pool di nodi creando un nuovo pool di nodi con le dimensioni dello SKU desiderate, il blocco e lo svuotamento dei nodi esistenti e quindi la rimozione del pool di nodi esistente.
Importante
Questo metodo è specifico per i cluster AKS basati su set di scalabilità di macchine virtuali. Quando si usano pool di nodi basati su macchine virtuali, è possibile aggiornare facilmente le dimensioni delle macchine virtuali in un pool di nodi esistente usando un singolo comando dell'interfaccia della riga di comando di Azure e avere più dimensioni della macchina virtuale nello stesso pool di nodi. Per altre informazioni, vedere la documentazione relativa ai pool di nodi delle macchine virtuali.
Ridimensionare direttamente un pool di nodi del set di scalabilità di macchine virtuali (anteprima)
Importante
Le funzionalità di anteprima di AKS sono disponibili su base self-service, su scelta. Le anteprime vengono fornite "così come sono" e "come disponibili" e sono escluse dai contratti di servizio e dalla garanzia limitata. Le anteprime del servizio Azure Kubernetes sono parzialmente coperte dal supporto clienti con la massima diligenza possibile. Di conseguenza, queste funzionalità non sono destinate all'uso in produzione. Per altre informazioni, vedere gli articoli di supporto seguenti:
È ora possibile ridimensionare le dimensioni della macchina virtuale (SKU) di un pool di nodi basato su VMSS esistente in un singolo comando usando az aks nodepool update --node-vm-size <new-size>. Quando si avvia questo aggiornamento, il provider di risorse AKS esegue un aggiornamento progressivo come segue:
- Aumento del numero di nodi con la dimensione della VM di destinazione.
- Blocco e svuotamento dei nodi precedenti.
- Eliminazione dei nodi precedenti.
In questo modo si evita il flusso di lavoro manuale di creazione/blocco/svuotamento/eliminazione descritto nel resto di questo articolo.
Come funziona il rilascio del ridimensionamento
La distribuzione del ridimensionamento usa lo stesso motore di aggiornamento progressivo di quello usato per un aggiornamento dell'immagine del nodo e per un aggiornamento della versione di Kubernetes, quindi rispetta le seguenti impostazioni relative agli aggiornamenti già configurate nel pool di nodi. In particolare, il ridimensionamento rispetta:
-
Max surge (
--max-surge): controlla il numero di nodi aggiuntivi con le dimensioni della macchina virtuale di destinazione aggiunte durante l'implementazione. Un valore più alto ridimensiona il pool più velocemente, ma utilizza una maggiore quota di calcolo e IP; un valore inferiore è più lento ma meno dirompente. Il valore predefinito di AKS è1, e33%è consigliato per i pool di nodi di produzione. -
Timeout di drenaggio del nodo (
--drain-timeout): tempo per cui AKS attende l'evizione dei pod su ciascun nodo precedente prima di eliminarlo forzatamente. Il valore predefinito è 30 minuti. Combinarla con podDisruptionBudgets appropriati in modo che i carichi di lavoro possano essere svuotati in modo sicuro. -
Durata di stabilizzazione del nodo (
--node-soak-duration): Per quanto tempo AKS attende dopo che un nuovo nodo diventa pronto prima di passare al gruppo successivo. Utile per consentire la stabilizzazione dei carichi di lavoro sulle nuove dimensioni della macchina virtuale prima di continuare l'implementazione.
Poiché il ridimensionamento riutilizza la pipeline di aggiornamento, si applicano gli stessi prerequisiti: assicurarsi che la sottoscrizione disponga di capacità di sostituzione delle dimensioni della macchina virtuale di destinazione sufficiente e degli indirizzi IP di subnet disponibili per i nodi di picco e che i PodDisruptionBudget consentano la rimozione di almeno una replica alla volta, altrimenti il ridimensionamento può essere bloccato durante lo svuotamento. Per consigli completi, vedi Procedure consigliate per gli aggiornamenti del pool di nodi di AKS.
Prerequisiti
- Versione dell'API di AKS
2026-01-02-previewo successiva. - La versione più recente dell'estensione interfaccia della riga di comando di Azure aks-preview.
Ridimensionare il pool di nodi
Usare il az aks nodepool update comando con il --node-vm-size parametro per modificare le dimensioni della macchina virtuale di un pool di nodi basato su VMSS esistente:
az aks nodepool update \
--resource-group MyResourceGroup \
--cluster-name MyManagedCluster \
--name nodepool1 \
--node-vm-size Standard_D4s_v3
Convalida e combinazioni non supportate
Il provider di risorse del servizio Azure Kubernetes convalida la richiesta di ridimensionamento e blocca le modifiche alle dimensioni delle macchine virtuali incompatibili. Le modifiche seguenti non sono supportate come parte di un ridimensionamento del set di scalabilità di macchine virtuali sul posto:
- Modifica del tipo di controller del disco, ad esempio da SCSI a NVMe.
- Modifica dell'architettura della CPU (ad esempio, da x64 ad ARM64).
- Modifica del supporto per il calcolo riservato (ad esempio, l'abilitazione o la disabilitazione di SNP).
- Modifica della generazione dell'hypervisor ( ad esempio da V1 a V2).
- Combinazione del ridimensionamento con un aggiornamento della versione di Kubernetes o una modifica del numero di nodi nella stessa operazione.
Se le dimensioni della macchina virtuale di destinazione richiedono una delle modifiche precedenti, usare invece il flusso di lavoro manuale di cordon-and-drain descritto nelle sezioni seguenti.
Note
Il ridimensionamento sul posto richiede capacità aggiuntiva temporanea per effettuare il provisioning di nuovi nodi con la dimensione della VM di destinazione prima di svuotare i nodi precedenti. Se il pool di nodi è configurato con --max-surge 0 (vale a dire, --max-unavailable è attivo), la richiesta di ridimensionamento viene rifiutata con un oggetto 400 Bad Request. Per continuare, impostare --max-surge ad almeno 1 durante il ridimensionamento con
az aks nodepool update \
--resource-group MyResourceGroup \
--cluster-name MyManagedCluster \
--name nodepool1 \
--node-vm-size Standard_D4s_v3 \
--max-surge 33%
e, facoltativamente, ripristinare i valori originali --max-surge e --max-unavailable al termine del ridimensionamento.
Creare un nuovo pool di nodi con lo SKU desiderato
Note
Ogni cluster del servizio Azure Kubernetes deve contenere almeno un pool di nodi di sistema con almeno un nodo. In questo esempio viene usato un --mode di System per aggiungere un pool di nodi di sistema in sostituzione del pool di nodi di sistema da ridimensionare. È possibile aggiornare la modalità di un pool di nodi in qualsiasi momento. È anche possibile aggiungere un pool di nodi utente impostando --mode su User.
Durante il ridimensionamento, assicurarsi di prendere in considerazione tutti i requisiti del carico di lavoro, ad esempio le zone di disponibilità, e di configurare di conseguenza il pool di nodi del set di scalabilità di macchine virtuali. Potrebbe essere necessario modificare il comando seguente in base alle proprie esigenze. Per un elenco completo delle opzioni di configurazione, vedere la pagina di riferimento az aks nodepool add.
Creare un nuovo pool di nodi usando il
az aks nodepool addcomando . In questo esempio, creiamo un nuovo pool di nodi,mynodepool, con tre nodi e lo SKU della macchina virtualeStandard_DS3_v2per sostituire un pool di nodi esistente,nodepool1, che ha lo SKU della macchina virtualeStandard_DS2_v2.az aks nodepool add \ --resource-group myResourceGroup \ --cluster-name myAKSCluster \ --name mynodepool \ --node-count 3 \ --node-vm-size Standard_DS3_v2 \ --mode System \ --no-waitLa creazione del nuovo pool di nodi richiede alcuni minuti.
Ottenere lo stato del nuovo pool di nodi usando il
kubectl get nodescomando .kubectl get nodesL'output dovrebbe essere simile all'output di esempio seguente, che mostra sia il nuovo pool
mynodepooldi nodi che il poolnodepool1di nodi esistente:NAME STATUS ROLES AGE VERSION aks-mynodepool-98765432-vmss000000 Ready agent 23m v1.21.9 aks-mynodepool-98765432-vmss000001 Ready agent 23m v1.21.9 aks-mynodepool-98765432-vmss000002 Ready agent 23m v1.21.9 aks-nodepool1-12345678-vmss000000 Ready agent 10d v1.21.9 aks-nodepool1-12345678-vmss000001 Ready agent 10d v1.21.9 aks-nodepool1-12345678-vmss000002 Ready agent 10d v1.21.9
Blocco dei nodi esistenti
Il blocco contrassegna i nodi specificati come non pianificabili e impedisce l'aggiunta di altri pod ai nodi.
Ottieni i nomi dei nodi che vuoi isolare usando il comando
kubectl get nodes.kubectl get nodesL'output dovrebbe essere simile al seguente esempio, che mostra i nodi nel pool di nodi esistente
nodepool1che desideri isolare.NAME STATUS ROLES AGE VERSION aks-nodepool1-12345678-vmss000000 Ready agent 7d21h v1.21.9 aks-nodepool1-12345678-vmss000001 Ready agent 7d21h v1.21.9 aks-nodepool1-12345678-vmss000002 Ready agent 7d21h v1.21.9Bloccare i nodi esistenti usando il comando
kubectl cordon, specificando i nodi desiderati in un elenco delimitato da spazi. Per esempio:kubectl cordon aks-nodepool1-12345678-vmss000000 aks-nodepool1-12345678-vmss000001 aks-nodepool1-12345678-vmss000002L'output dovrebbe essere simile all'output di esempio seguente, che mostra che i nodi sono delimitati:
node/aks-nodepool1-12345678-vmss000000 cordoned node/aks-nodepool1-12345678-vmss000001 cordoned node/aks-nodepool1-12345678-vmss000002 cordoned
Svuotare i nodi esistenti
Importante
Per svuotare correttamente i nodi e rimuovere i pod in esecuzione, assicurarsi che qualsiasi PodDisruptionBudgets (PDB) consenta lo spostamento di almeno una replica pod alla volta. In caso contrario, l'operazione di svuotamento/rimozione ha esito negativo. Per eseguire la verifica, è possibile eseguire kubectl get pdb -A e verificare che ALLOWED DISRUPTIONS sia almeno 1 o superiore.
Lo svuotamento dei nodi causerà la rimozione e la ricreazione dei pod negli altri nodi pianificabili.
Svuotare i nodi esistenti usando il comando
kubectl draincon le opzioni--ignore-daemonsetse--delete-emptydir-data, specificando i nodi desiderati in un elenco separato da spazi. Per esempio:Importante
L'uso di
--delete-emptydir-dataè necessario per rimuovere ilcorednscreato dal servizio Azure Kubernetes e i podmetrics-server. Se non si usa questo flag, viene visualizzato un errore. Per altre informazioni, vedere la documentazione su emptydir.kubectl drain aks-nodepool1-12345678-vmss000000 aks-nodepool1-12345678-vmss000001 aks-nodepool1-12345678-vmss000002 --ignore-daemonsets --delete-emptydir-dataAl termine dell'operazione di svuotamento, tutti i pod (esclusi quelli controllati dai set daemon) devono essere operativi nel nuovo pool di nodi. È possibile verificarlo usando il comando
kubectl get pods.kubectl get pods -o wide -A
Risolvere i problemi di rimozione dei pod
Durante lo svuotamento dei nodi potrebbe verificarsi l'errore seguente:
Error when evicting pods/[podname] -n [namespace] (will retry after 5s): Cannot evict pod as it would violate the pod's disruption budget.
Per impostazione predefinita, il cluster prevede budget di interruzione dei pod gestiti dal servizio Azure Kubernetes (ad esempio coredns-pdb o konnectivity-agent) con MinAvailable pari a 1. Ad esempio, se sono in esecuzione due pod coredns, è possibile interromperne uno solo alla volta. Mentre un pod è in corso di creazione e non è disponibile, non è possibile rimuovere l'altro pod coredns a causa del budget di interruzione del pod. Questo problema si risolve dopo la pianificazione e l'esecuzione del pod coredns iniziale, consentendo al secondo pod di essere rimosso e ricreato correttamente.
Suggerimento
Valutare la possibilità di svuotare i nodi uno per uno per un'esperienza di rimozione più fluida ed evitare limitazioni. Per altre informazioni, vedere:
Rimuovere il pool di nodi esistente
Importante
Quando si elimina un pool di nodi, il servizio Azure Kubernetes non esegue il blocco e lo svuotamento. Per ridurre al minimo l'interruzione dei pod di riprogrammazione attualmente in esecuzione nel pool di nodi che si prevede di eliminare, eseguire un blocco e svuotamento di tutti i nodi del pool, prima di eliminarli.
Eliminare il pool di nodi originale usando il
az aks nodepool deletecomando .az aks nodepool delete \ --resource-group myResourceGroup \ --cluster-name myAKSCluster \ --name nodepool1Verificare che il cluster AKS abbia solo il nuovo pool di nodi con le applicazioni e i pod correttamente in esecuzione utilizzando il comando
kubectl get nodes.kubectl get nodesL'output dovrebbe essere simile all'output di esempio seguente, che mostra solo il nuovo pool
mynodepooldi nodi :NAME STATUS ROLES AGE VERSION aks-mynodepool-98765432-vmss000000 Ready agent 63m v1.21.9 aks-mynodepool-98765432-vmss000001 Ready agent 63m v1.21.9 aks-mynodepool-98765432-vmss000002 Ready agent 63m v1.21.9
Passaggi successivi
Dopo il ridimensionamento di un pool di nodi tramite il blocco e lo svuotamento, vedere altre informazioni sull’uso di più pool di nodi.