Změna velikosti fondů uzlů v Azure Kubernetes Service (AKS)
Z důvodu rostoucího počtu nasazení nebo spuštění větší úlohy může být vhodné změnit plán škálovací sady virtuálních počítačů nebo změnit velikost instancí AKS. Nicméně podle zásad podpory pro AKS:
Uzly agenta AKS se zobrazují na webu Azure Portal jako běžné prostředky Azure IaaS. Tyto virtuální počítače se ale nasazují do vlastní skupiny prostředků Azure (obvykle mají předponu MC_*). Pomocí rozhraní API nebo prostředků IaaS nemůžete provádět žádná přímá přizpůsobení těchto uzlů. Všechny vlastní změny, které se neprovedou přes rozhraní API AKS, se nebudou uchovávat prostřednictvím upgradu, škálování, aktualizace nebo restartování.
Tento nedostatek trvalosti platí také pro operaci změny velikosti, takže změna velikosti instancí AKS tímto způsobem není podporována. V tomto návodu se dozvíte, jak tento scénář vyřešit doporučeným způsobem.
Důležité
Tato metoda je specifická pro clustery AKS založené na škálovací sadě virtuálních počítačů. Pokud používáte skupiny dostupnosti virtuálních počítačů, jste omezeni pouze na jeden fond uzlů na cluster.
Ukázkové prostředky
Předpokládejme, že chcete změnit velikost existujícího fondu uzlů, který se nazývá nodepool1
, z velikosti skladové položky Standard_DS2_v2 na Standard_DS3_v2. K provedení tohoto úkolu budete muset vytvořit nový fond uzlů pomocí Standard_DS3_v2, přesunout úlohy z nodepool1
nového fondu uzlů a odebrat nodepool1
. V tomto příkladu budeme tento nový fond mynodepool
uzlů volat .
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>
Vytvoření nového fondu uzlů s požadovanou skladovou jednotkou
Při změně velikosti nezapomeňte zvážit všechny požadavky na úlohy, jako jsou zóny dostupnosti, a odpovídajícím způsobem nakonfigurovat fond uzlů. Možná budete muset upravit následující příkaz tak, aby co nejlépe vyhovoval vašim potřebám. Úplný seznam možností konfigurace najdete na az aks nodepool add
referenční stránce.
az aks nodepool add
Pomocí příkazu vytvořte nový fond uzlů volaný mynodepool
se třemi uzly pomocí skladové Standard_DS3_v2
položky virtuálního počítače:
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
Poznámka:
Každý cluster AKS musí obsahovat alespoň jeden fond systémových uzlů s alespoň jedním uzlem. V předchozím příkladu používáme hodnotu --mode
System
, protože se předpokládá, že cluster má pouze jeden fond uzlů, který System
potřebuje nahradit fond uzlů. Režim fondu uzlů je možné kdykoli aktualizovat.
Po několika minutách se vytvoří nový fond uzlů:
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 existující uzly
Připojení označuje zadané uzly jako neplánovatelné a zabrání přidání dalších podů do uzlů.
Nejprve získejte názvy uzlů, se kterými chcete cordonovat kubectl get nodes
. Výstup by měl vypadat nějak takto:
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
V dalším kroku zadejte kubectl cordon <node-names>
požadované uzly v seznamu odděleném mezerami:
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
Vyprázdnění existujících uzlů
Důležité
Pokud chcete úspěšně vyprázdnit uzly a vyřaďte spuštěné pody, ujistěte se, že všechny soubory PDB (PodDisruptionBudget) umožňují přesunutí alespoň jedné repliky podu najednou. Jinak operace vyprázdnění nebo vyřazení selže. Pokud to chcete zkontrolovat, můžete spustit kubectl get pdb -A
a ověřit ALLOWED DISRUPTIONS
, jestli je aspoň jedna nebo vyšší.
Vyprazdňování uzlů způsobí vyřazení podů a opětovné vytvoření na ostatních uzlech, které se dají schedovat.
Pokud chcete vyprázdnit uzly, znovu použijte kubectl drain <node-names> --ignore-daemonsets --delete-emptydir-data
seznam názvů uzlů oddělených mezerami:
Důležité
K vyřazení vytvořených coredns
a metrics-server
podů AKS se vyžaduje použití--delete-emptydir-data
. Pokud se tento příznak nepoužívá, očekává se chyba. Další informace najdete v dokumentaci k nástroji emptydir.
kubectl drain aks-nodepool1-31721111-vmss000000 aks-nodepool1-31721111-vmss000001 aks-nodepool1-31721111-vmss000002 --ignore-daemonsets --delete-emptydir-data
Po dokončení operace vyprázdnění jsou všechny pody kromě podů řízené sadami démonů spuštěny v novém fondu uzlů:
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>
Řešení problému
Může se zobrazit chyba podobná této:
Chyba při vyřazení podů/[podname] -n [namespace] (bude opakovat po 5s): Pod nelze vyřadit, protože by porušil rozpočet přerušení podu.
Ve výchozím nastavení má váš cluster AKS_managed rozpočty přerušení podů (například coredns-pdb
konnectivity-agent
) s hodnotou MinAvailable
1. Pokud jsou například spuštěné dva coredns
pody, zatímco jeden z nich se znovu vytváří a není k dispozici, druhý se kvůli rozpočtu na přerušení podu nedá ovlivnit. To se vyřeší po naplánování a spuštění počátečního coredns
podu, což umožňuje správné vyřazení a opětovné vytvoření druhého podu.
Tip
Zvažte vyprázdnění uzlů 1 po druhém, abyste se vyhnuli plynulejšímu vyřazování a vyhnuli se omezování. Další informace naleznete v tématu:
Odebrání existujícího fondu uzlů
Pokud chcete odstranit existující fond uzlů, použijte Azure Portal nebo az aks nodepool delete
příkaz:
az aks nodepool delete \
--resource-group myResourceGroup \
--cluster-name myAKSCluster \
--name nodepool1
Po dokončení je konečným výsledkem cluster AKS, který má jeden, nový fond uzlů s novou, požadovanou velikost skladové položky a všechny aplikace a pody správně spuštěné:
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
Další kroky
Po změně velikosti fondu uzlů pomocí kabelování a vyprázdnění se dozvíte více o použití více fondů uzlů.
Azure Kubernetes Service