Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Du kanske vill ändra storleken på dina virtuella datorer (VM) för att hantera ett ökande antal distributioner eller för att köra en större arbetsbelastning. Storleksändring av AKS-instanser direkt stöds inte när du använder Virtuella Datorers Skalningsuppsättningar i AKS, enligt AKS supportprinciper:
AKS-agentnoder visas i Azure Portal som vanliga Azure IaaS-resurser. Men dessa virtuella datorer distribueras till en anpassad Azure-resursgrupp (vanligtvis prefix med MC_*). Du kan inte göra direkta anpassningar till dessa noder med hjälp av IaaS-API:er eller resurser. Eventuella anpassade ändringar som inte görs via AKS-API:et bevaras inte via en uppgradering, skalning, uppdatering eller omstart.
I den här artikeln lär du dig den rekommenderade metoden för att ändra storlek på en nodpool genom att skapa en ny nodpool med önskad SKU-storlek, spärra och tömma befintliga noder och sedan ta bort den befintliga nodpoolen.
Viktigt!
Den här metoden är specifik för VM Scale Sets-baserade AKS-kluster. När du använder virtual machines-baserade nodpooler kan du enkelt uppdatera VM-storlekarna i en befintlig nodpool med ett enda Azure CLI-kommando och ha flera VM-storlekar i samma nodpool. Mer information finns i dokumentationen om nodpooler för virtuella datorer.
Skapa en ny nodpool med önskad SKU
Kommentar
Varje AKS-kluster måste innehålla minst en systemnodpool med minst en nod. I det här exemplet använder vi en --mode av System för att lägga till en systemnodpool för att ersätta den systemnodpool som vi vill ändra storlek på. Du kan uppdatera läget för en nodpool när som helst. Du kan också lägga till en användarnodpool genom att ange --mode till User.
När du ändrar storlek bör du överväga alla arbetsbelastningskrav, till exempel tillgänglighetszoner, och konfigurera VMSS-nodpoolen i enlighet med detta. Du kan behöva ändra följande kommando så att det passar dina behov. En fullständig lista över konfigurationsalternativen finns på az aks nodepool add referenssidan.
- Skapa en ny nodpool med kommandot - az aks nodepool add. I det här exemplet skapar vi en ny nodpool, ,- mynodepoolmed tre noder och vm-SKU- Standard_DS3_v2:n för att ersätta en befintlig nodpool,- nodepool1, som har vm-SKU- Standard_DS2_v2:n.- az aks nodepool add \ --resource-group myResourceGroup \ --cluster-name myAKSCluster \ --name mynodepool \ --node-count 3 \ --node-vm-size Standard_DS3_v2 \ --mode System \ --no-wait- Det tar några minuter innan den nya nodpoolen skapas. 
- Hämta status för den nya nodpoolen - kubectl get nodesmed kommandot .- kubectl get nodes- Dina utdata bör likna följande exempelutdata som visar både den nya nodpoolen - mynodepooloch den befintliga nodpoolen- nodepool1:- 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
Spärra de befintliga noderna
Avspärrning markerar angivna noder som oplanerade och förhindrar att fler poddar läggs till i noderna.
- Hämta namnen på de noder som du vill spärra med kommandot - kubectl get nodes.- kubectl get nodes- Dina utdata bör likna följande exempelutdata som visar noderna i den befintliga nodpoolen - nodepool1som du vill spärra:- 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.9
- Spärra de befintliga noderna med kommandot - kubectl cordonoch ange önskade noder i en blankstegsavgränsad lista. Till exempel:- kubectl cordon aks-nodepool1-12345678-vmss000000 aks-nodepool1-12345678-vmss000001 aks-nodepool1-12345678-vmss000002- Dina utdata bör likna följande exempelutdata som visar att noderna är avspärrade: - node/aks-nodepool1-12345678-vmss000000 cordoned node/aks-nodepool1-12345678-vmss000001 cordoned node/aks-nodepool1-12345678-vmss000002 cordoned
Töm de befintliga noderna
Viktigt!
Om du vill tömma noder och avlägsna poddar som körs kontrollerar du att alla PodDisruptionBudgets (PDB) tillåter att minst en poddreplik flyttas i taget. Annars misslyckas dränerings-/vräkningsåtgärden. Om du vill kontrollera detta kan du köra kubectl get pdb -A och kontrollera ALLOWED DISRUPTIONS att det är minst 1 eller högre.
När du tömmer noder avlägsnas podarna som körs på dem, vilket innebär att de återskapas på andra schemaläggningsbara noder.
- Töm de befintliga noderna med - kubectl drain-kommandot och flaggorna- --ignore-daemonsetsoch- --delete-emptydir-data, genom att ange önskade noder i en blankstegsavgränsad lista. Till exempel:- Viktigt! - Användning - --delete-emptydir-datakrävs för att avlägsna AKS-skapade- corednsoch- metrics-serverpoddar. Om du inte använder den här flaggan får du ett fel. Mer information finns i dokumentationen om emptydir.- kubectl drain aks-nodepool1-12345678-vmss000000 aks-nodepool1-12345678-vmss000001 aks-nodepool1-12345678-vmss000002 --ignore-daemonsets --delete-emptydir-data
- När dräneringsåtgärden är klar ska alla poddar (exklusive poddar som styrs av daemonuppsättningar) köras i den nya nodpoolen. Du kan verifiera detta med kommandot - kubectl get pods.- kubectl get pods -o wide -A
Felsöka problem med utvisning av poddar
Du kan stöta på följande fel när du tömmer noder:
Error when evicting pods/[podname] -n [namespace] (will retry after 5s): Cannot evict pod as it would violate the pod's disruption budget.
Som standardinställning har klustret AKS-hanterade poddavbrottsbudgetar (till exempel coredns-pdb eller konnectivity-agent) med en MinAvailable av 1. Om det till exempel finns två coredns poddar som körs kan bara en avbrytas i taget. Medan en av dem återskapas och inte är tillgänglig kan den andra coredns podden inte tas bort på grund av poddens avbrottsbudget. Det här problemet löser sig när den första coredns podden schemaläggs och är igång, vilket möjliggör att den andra podden kan avlägsnas och återskapas korrekt.
Dricks
Överväg att avlasta noder en i taget för en smidigare avlastningsprocess och för att undvika strypning. Mer information finns i:
Ta bort den befintliga nodpoolen
Viktigt!
När du tar bort en nodpool utför AKS inte avspärrning och tömning. Utför en avspärrning och tömning på alla noder i nodpoolen innan du tar bort för att minimera störningarna i de omplanerade poddar som körs på nodpoolen som du planerar att ta bort.
- Ta bort den ursprungliga nodpoolen - az aks nodepool deletemed kommandot .- az aks nodepool delete \ --resource-group myResourceGroup \ --cluster-name myAKSCluster \ --name nodepool1
- Kontrollera att AKS-klustret bara har den nya nodpoolen med program och poddar som körs korrekt med kommandot - kubectl get nodes.- kubectl get nodes- Dina utdata bör likna följande exempelutdata, som endast visar den nya nodpoolen - mynodepool:- 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
Nästa steg
När du har storleksanpassat en nodpool genom avspärrning och tömning kan du läsa mer om hur du använder flera nodpooler.
Azure Kubernetes Service