Formaat van knooppuntgroepen wijzigen in Azure Kubernetes Service (AKS)
Vanwege een toenemend aantal implementaties of om een grotere workload uit te voeren, kunt u het plan voor de virtuele-machineschaalset wijzigen of het formaat van AKS-exemplaren wijzigen. Volgens het ondersteuningsbeleid voor AKS:
AKS-agentknooppunten worden in Azure Portal weergegeven als gewone Azure IaaS-resources. Deze virtuele machines worden echter geïmplementeerd in een aangepaste Azure-resourcegroep (meestal voorafgegaan door MC_*). U kunt geen directe aanpassingen aan deze knooppunten uitvoeren met behulp van de IaaS-API's of -resources. Aangepaste wijzigingen die niet via de AKS-API worden uitgevoerd, blijven niet behouden via een upgrade, schaal, update of opnieuw opstarten.
Dit gebrek aan persistentie is ook van toepassing op de bewerking voor het wijzigen van het formaat, waardoor het wijzigen van het formaat van AKS-exemplaren op deze manier niet wordt ondersteund. In deze handleiding leert u de aanbevolen methode om dit scenario aan te pakken.
Belangrijk
Deze methode is specifiek voor AKS-clusters op basis van virtuele-machineschaalsets. Wanneer u beschikbaarheidssets voor virtuele machines gebruikt, bent u beperkt tot slechts één knooppuntgroep per cluster.
Voorbeeldbronnen
Stel dat u het formaat van een bestaande knooppuntgroep, genaamd nodepool1
, wilt wijzigen van de SKU-grootte Standard_DS2_v2 naar Standard_DS3_v2. Als u deze taak wilt uitvoeren, moet u een nieuwe knooppuntgroep maken met behulp van Standard_DS3_v2, workloads verplaatsen van nodepool1
naar de nieuwe knooppuntgroep en verwijderen nodepool1
. In dit voorbeeld noemen we deze nieuwe knooppuntgroep mynodepool
.
kubectl get nodes
NAME STATUS ROLES AGE VERSION
aks-nodepool1-31721111-vmss000000 Ready agent 10d v1.21.9
aks-nodepool1-31721111-vmss000001 Ready agent 10d v1.21.9
aks-nodepool1-31721111-vmss000002 Ready agent 10d v1.21.9
kubectl get pods -o wide -A
NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
default sampleapp2-74b4b974ff-676sz 1/1 Running 0 93m 10.244.1.6 aks-nodepool1-31721111-vmss000002 <none> <none>
default sampleapp2-76b6c4c59b-pfgbh 1/1 Running 0 94m 10.244.1.5 aks-nodepool1-31721111-vmss000002 <none> <none>
kube-system azure-ip-masq-agent-4n66k 1/1 Running 0 10d 10.240.0.6 aks-nodepool1-31721111-vmss000002 <none> <none>
kube-system azure-ip-masq-agent-9p4c8 1/1 Running 0 10d 10.240.0.4 aks-nodepool1-31721111-vmss000000 <none> <none>
kube-system azure-ip-masq-agent-nb7mx 1/1 Running 0 10d 10.240.0.5 aks-nodepool1-31721111-vmss000001 <none> <none>
kube-system coredns-845757d86-dtvvs 1/1 Running 0 10d 10.244.0.2 aks-nodepool1-31721111-vmss000000 <none> <none>
kube-system coredns-845757d86-x27pp 1/1 Running 0 10d 10.244.2.3 aks-nodepool1-31721111-vmss000001 <none> <none>
kube-system coredns-autoscaler-5f85dc856b-nfrmh 1/1 Running 0 10d 10.244.2.4 aks-nodepool1-31721111-vmss000001 <none> <none>
kube-system csi-azuredisk-node-9nfzt 3/3 Running 0 10d 10.240.0.4 aks-nodepool1-31721111-vmss000000 <none> <none>
kube-system csi-azuredisk-node-bblsb 3/3 Running 0 10d 10.240.0.5 aks-nodepool1-31721111-vmss000001 <none> <none>
kube-system csi-azuredisk-node-tjhj4 3/3 Running 0 10d 10.240.0.6 aks-nodepool1-31721111-vmss000002 <none> <none>
kube-system csi-azurefile-node-9pcr8 3/3 Running 0 3d10h 10.240.0.6 aks-nodepool1-31721111-vmss000002 <none> <none>
kube-system csi-azurefile-node-bh2pc 3/3 Running 0 3d10h 10.240.0.5 aks-nodepool1-31721111-vmss000001 <none> <none>
kube-system csi-azurefile-node-h75gq 3/3 Running 0 3d10h 10.240.0.4 aks-nodepool1-31721111-vmss000000 <none> <none>
kube-system konnectivity-agent-6cd55c69cf-ngdlb 1/1 Running 0 10d 10.240.0.6 aks-nodepool1-31721111-vmss000002 <none> <none>
kube-system konnectivity-agent-6cd55c69cf-rvvqt 1/1 Running 0 10d 10.240.0.4 aks-nodepool1-31721111-vmss000000 <none> <none>
kube-system kube-proxy-4wzx7 1/1 Running 0 10d 10.240.0.4 aks-nodepool1-31721111-vmss000000 <none> <none>
kube-system kube-proxy-g5tvr 1/1 Running 0 10d 10.240.0.6 aks-nodepool1-31721111-vmss000002 <none> <none>
kube-system kube-proxy-mrv54 1/1 Running 0 10d 10.240.0.5 aks-nodepool1-31721111-vmss000001 <none> <none>
kube-system metrics-server-774f99dbf4-h52hn 1/1 Running 1 3d10h 10.244.1.3 aks-nodepool1-31721111-vmss000002 <none> <none>
Een nieuwe knooppuntgroep maken met de gewenste SKU
Houd bij het wijzigen van het formaat rekening met alle workloadvereisten, zoals beschikbaarheidszones, en configureer uw knooppuntgroep dienovereenkomstig. Mogelijk moet u de volgende opdracht aanpassen aan uw behoeften. Zie de az aks nodepool add
referentiepagina voor een volledige lijst met configuratieopties.
Gebruik de az aks nodepool add
opdracht om een nieuwe knooppuntgroep mynodepool
met drie knooppunten te maken met behulp van de Standard_DS3_v2
VM-SKU:
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
Notitie
Elk AKS-cluster moet ten minste één systeemknooppuntgroep met ten minste één knooppunt bevatten. In het bovenstaande voorbeeld gebruiken we een --mode
van System
, omdat wordt aangenomen dat het cluster slechts één knooppuntgroep heeft, waardoor een System
knooppuntgroep deze moet vervangen. De modus van een knooppuntgroep kan op elk gewenst moment worden bijgewerkt.
Na enkele minuten is de nieuwe knooppuntgroep gemaakt:
kubectl get nodes
NAME STATUS ROLES AGE VERSION
aks-mynodepool-20823458-vmss000000 Ready agent 23m v1.21.9
aks-mynodepool-20823458-vmss000001 Ready agent 23m v1.21.9
aks-mynodepool-20823458-vmss000002 Ready agent 23m v1.21.9
aks-nodepool1-31721111-vmss000000 Ready agent 10d v1.21.9
aks-nodepool1-31721111-vmss000001 Ready agent 10d v1.21.9
aks-nodepool1-31721111-vmss000002 Ready agent 10d v1.21.9
Cordon de bestaande knooppunten
Cordoning markeert opgegeven knooppunten als niet-gepland en voorkomt dat er meer pods aan de knooppunten worden toegevoegd.
Haal eerst de namen op van de knooppunten waarmee kubectl get nodes
u wilt cordonen. Uw uitvoer moet er ongeveer als volgt uitzien:
NAME STATUS ROLES AGE VERSION
aks-nodepool1-31721111-vmss000000 Ready agent 7d21h v1.21.9
aks-nodepool1-31721111-vmss000001 Ready agent 7d21h v1.21.9
aks-nodepool1-31721111-vmss000002 Ready agent 7d21h v1.21.9
kubectl cordon <node-names>
Geef vervolgens de gewenste knooppunten op in een door spaties gescheiden lijst:
kubectl cordon aks-nodepool1-31721111-vmss000000 aks-nodepool1-31721111-vmss000001 aks-nodepool1-31721111-vmss000002
node/aks-nodepool1-31721111-vmss000000 cordoned
node/aks-nodepool1-31721111-vmss000001 cordoned
node/aks-nodepool1-31721111-vmss000002 cordoned
De bestaande knooppunten leegmaken
Belangrijk
Als u knooppunten wilt verwijderen en actieve pods wilt verwijderen, moet u ervoor zorgen dat podDisruptionBudgets (PDBs) ervoor zorgen dat ten minste één podreplica tegelijk kan worden verplaatst. Anders mislukt de afvoer-/verwijderingsbewerking. U kunt dit controleren door ten minste één of hoger uit te voeren kubectl get pdb -A
en te controleren ALLOWED DISRUPTIONS
.
Het leegmaken van knooppunten zorgt ervoor dat pods die erop worden uitgevoerd, worden verwijderd en opnieuw worden gemaakt op de andere, schedulbare knooppunten.
Als u knooppunten wilt leegmaken, gebruikt kubectl drain <node-names> --ignore-daemonsets --delete-emptydir-data
u opnieuw een door spaties gescheiden lijst met knooppuntnamen:
Belangrijk
Het gebruik --delete-emptydir-data
is vereist om de door AKS gemaakte coredns
pods te metrics-server
verwijderen. Als deze vlag niet wordt gebruikt, wordt een fout verwacht. Zie de documentatie over emptydir voor meer informatie.
kubectl drain aks-nodepool1-31721111-vmss000000 aks-nodepool1-31721111-vmss000001 aks-nodepool1-31721111-vmss000002 --ignore-daemonsets --delete-emptydir-data
Nadat de afvoerbewerking is voltooid, worden alle andere pods dan die beheerd door daemon-sets uitgevoerd op de nieuwe knooppuntgroep:
kubectl get pods -o wide -A
NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
default sampleapp2-74b4b974ff-676sz 1/1 Running 0 15m 10.244.4.5 aks-mynodepool-20823458-vmss000002 <none> <none>
default sampleapp2-76b6c4c59b-rhmzq 1/1 Running 0 16m 10.244.4.3 aks-mynodepool-20823458-vmss000002 <none> <none>
kube-system azure-ip-masq-agent-4n66k 1/1 Running 0 10d 10.240.0.6 aks-nodepool1-31721111-vmss000002 <none> <none>
kube-system azure-ip-masq-agent-9p4c8 1/1 Running 0 10d 10.240.0.4 aks-nodepool1-31721111-vmss000000 <none> <none>
kube-system azure-ip-masq-agent-nb7mx 1/1 Running 0 10d 10.240.0.5 aks-nodepool1-31721111-vmss000001 <none> <none>
kube-system azure-ip-masq-agent-sxn96 1/1 Running 0 49m 10.240.0.9 aks-mynodepool-20823458-vmss000002 <none> <none>
kube-system azure-ip-masq-agent-tsq98 1/1 Running 0 49m 10.240.0.8 aks-mynodepool-20823458-vmss000001 <none> <none>
kube-system azure-ip-masq-agent-xzrdl 1/1 Running 0 49m 10.240.0.7 aks-mynodepool-20823458-vmss000000 <none> <none>
kube-system coredns-845757d86-d2pkc 1/1 Running 0 17m 10.244.3.2 aks-mynodepool-20823458-vmss000000 <none> <none>
kube-system coredns-845757d86-f8g9s 1/1 Running 0 17m 10.244.5.2 aks-mynodepool-20823458-vmss000001 <none> <none>
kube-system coredns-autoscaler-5f85dc856b-f8xh2 1/1 Running 0 17m 10.244.4.2 aks-mynodepool-20823458-vmss000002 <none> <none>
kube-system csi-azuredisk-node-7md2w 3/3 Running 0 49m 10.240.0.7 aks-mynodepool-20823458-vmss000000 <none> <none>
kube-system csi-azuredisk-node-9nfzt 3/3 Running 0 10d 10.240.0.4 aks-nodepool1-31721111-vmss000000 <none> <none>
kube-system csi-azuredisk-node-bblsb 3/3 Running 0 10d 10.240.0.5 aks-nodepool1-31721111-vmss000001 <none> <none>
kube-system csi-azuredisk-node-lcmtz 3/3 Running 0 49m 10.240.0.9 aks-mynodepool-20823458-vmss000002 <none> <none>
kube-system csi-azuredisk-node-mmncr 3/3 Running 0 49m 10.240.0.8 aks-mynodepool-20823458-vmss000001 <none> <none>
kube-system csi-azuredisk-node-tjhj4 3/3 Running 0 10d 10.240.0.6 aks-nodepool1-31721111-vmss000002 <none> <none>
kube-system csi-azurefile-node-29w6z 3/3 Running 0 49m 10.240.0.9 aks-mynodepool-20823458-vmss000002 <none> <none>
kube-system csi-azurefile-node-4nrx7 3/3 Running 0 49m 10.240.0.7 aks-mynodepool-20823458-vmss000000 <none> <none>
kube-system csi-azurefile-node-9pcr8 3/3 Running 0 3d11h 10.240.0.6 aks-nodepool1-31721111-vmss000002 <none> <none>
kube-system csi-azurefile-node-bh2pc 3/3 Running 0 3d11h 10.240.0.5 aks-nodepool1-31721111-vmss000001 <none> <none>
kube-system csi-azurefile-node-gqqnv 3/3 Running 0 49m 10.240.0.8 aks-mynodepool-20823458-vmss000001 <none> <none>
kube-system csi-azurefile-node-h75gq 3/3 Running 0 3d11h 10.240.0.4 aks-nodepool1-31721111-vmss000000 <none> <none>
kube-system konnectivity-agent-6cd55c69cf-2bbp5 1/1 Running 0 17m 10.240.0.7 aks-mynodepool-20823458-vmss000000 <none> <none>
kube-system konnectivity-agent-6cd55c69cf-7xzxj 1/1 Running 0 16m 10.240.0.8 aks-mynodepool-20823458-vmss000001 <none> <none>
kube-system kube-proxy-4wzx7 1/1 Running 0 10d 10.240.0.4 aks-nodepool1-31721111-vmss000000 <none> <none>
kube-system kube-proxy-7h8r5 1/1 Running 0 49m 10.240.0.7 aks-mynodepool-20823458-vmss000000 <none> <none>
kube-system kube-proxy-g5tvr 1/1 Running 0 10d 10.240.0.6 aks-nodepool1-31721111-vmss000002 <none> <none>
kube-system kube-proxy-mrv54 1/1 Running 0 10d 10.240.0.5 aks-nodepool1-31721111-vmss000001 <none> <none>
kube-system kube-proxy-nqmnj 1/1 Running 0 49m 10.240.0.9 aks-mynodepool-20823458-vmss000002 <none> <none>
kube-system kube-proxy-zn77s 1/1 Running 0 49m 10.240.0.8 aks-mynodepool-20823458-vmss000001 <none> <none>
kube-system metrics-server-774f99dbf4-2x6x8 1/1 Running 0 16m 10.244.4.4 aks-mynodepool-20823458-vmss000002 <none> <none>
Probleemoplossing
Mogelijk ziet u een foutbericht als volgt:
Fout bij het uitzetten van pods/[podname] -n [naamruimte] (probeert het opnieuw na 5s): Pod kan niet worden verwijderd omdat deze het onderbrekingsbudget van de pod zou schenden.
Uw cluster heeft standaard AKS_managed budgetten voor podonderbreking (zoals coredns-pdb
of konnectivity-agent
) met een MinAvailable
van 1. Als er bijvoorbeeld twee coredns
pods worden uitgevoerd terwijl een van deze pods opnieuw wordt gemaakt en niet beschikbaar is, kan de andere niet worden beïnvloed vanwege het budget voor podonderbreking. Dit lost zichzelf op nadat de eerste coredns
pod is gepland en wordt uitgevoerd, zodat de tweede pod correct kan worden verwijderd en opnieuw kan worden gemaakt.
Tip
Overweeg om knooppunten één voor één leeg te maken voor een soepelere verwijderingservaring en om beperking te voorkomen. Zie voor meer informatie:
De bestaande knooppuntgroep verwijderen
Als u de bestaande knooppuntgroep wilt verwijderen, gebruikt u Azure Portal of de az aks nodepool delete
opdracht:
az aks nodepool delete \
--resource-group myResourceGroup \
--cluster-name myAKSCluster \
--name nodepool1
Na voltooiing is het uiteindelijke resultaat het AKS-cluster met één nieuwe knooppuntgroep met de nieuwe, gewenste SKU-grootte en alle toepassingen en pods die correct worden uitgevoerd:
kubectl get nodes
NAME STATUS ROLES AGE VERSION
aks-mynodepool-20823458-vmss000000 Ready agent 63m v1.21.9
aks-mynodepool-20823458-vmss000001 Ready agent 63m v1.21.9
aks-mynodepool-20823458-vmss000002 Ready agent 63m v1.21.9
Volgende stappen
Na het wijzigen van het formaat van een knooppuntgroep door cordoning en leegmaken, vindt u meer informatie over het gebruik van meerdere knooppuntgroepen.
Azure Kubernetes Service