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.
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.
Azure Kubernetes Service