Zmienianie rozmiaru pul węzłów w usłudze Azure Kubernetes Service (AKS)
W przypadku rosnącej liczby wdrożeń lub w celu uruchomienia większego obciążenia warto rozważyć zmianę planu zestawu skalowania maszyn wirtualnych lub zmianę rozmiaru wystąpień usługi AKS. Jednak zgodnie z zasadami pomocy technicznej dla usługi AKS:
Węzły agenta usługi AKS są wyświetlane w witrynie Azure Portal jako zwykłe zasoby IaaS platformy Azure. Jednak te maszyny wirtualne są wdrażane w niestandardowej grupie zasobów platformy Azure (zwykle poprzedzonej MC_*). Nie można wykonywać żadnych bezpośrednich dostosowań w tych węzłach przy użyciu interfejsów API IaaS lub zasobów. Wszelkie zmiany niestandardowe, które nie są wykonywane za pośrednictwem interfejsu API usługi AKS, nie będą utrwalane w ramach uaktualniania, skalowania, aktualizowania ani ponownego uruchamiania.
Ten brak trwałości dotyczy również operacji zmiany rozmiaru, dlatego zmiana rozmiaru wystąpień usługi AKS w ten sposób nie jest obsługiwana. W tym przewodniku z instrukcjami poznasz zalecaną metodę, aby rozwiązać ten scenariusz.
Ważne
Ta metoda jest specyficzna dla klastrów AKS opartych na zestawie skalowania maszyn wirtualnych. W przypadku korzystania z zestawów dostępności maszyn wirtualnych jest ograniczona tylko do jednej puli węzłów na klaster.
Przykładowe zasoby
Załóżmy, że chcesz zmienić rozmiar istniejącej puli węzłów o nazwie nodepool1
z rozmiaru jednostki SKU Standard_DS2_v2 na Standard_DS3_v2. Aby wykonać to zadanie, należy utworzyć nową pulę węzłów przy użyciu Standard_DS3_v2, przenieść obciążenia z nodepool1
do nowej puli węzłów i usunąć nodepool1
. W tym przykładzie wywołamy tę nową pulę mynodepool
węzłów .
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>
Tworzenie nowej puli węzłów przy użyciu żądanej jednostki SKU
Użyj polecenia az aks nodepool add, aby utworzyć nową pulę węzłów o nazwie mynodepool
z trzema węzłami przy użyciu Standard_DS3_v2
jednostki SKU maszyny wirtualnej:
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
Uwaga
Każdy klaster usługi AKS musi zawierać co najmniej jedną pulę węzłów systemowych z co najmniej jednym węzłem. W powyższym przykładzie używamy elementu --mode
System
, ponieważ zakłada się, że klaster ma tylko jedną pulę System
węzłów, co wymaga zastąpienia puli węzłów. Tryb puli węzłów można aktualizować w dowolnym momencie.
Podczas zmiany rozmiaru należy wziąć pod uwagę inne wymagania i odpowiednio skonfigurować pulę węzłów. Może być konieczne zmodyfikowanie powyższego polecenia. Aby uzyskać pełną listę opcji konfiguracji, zobacz stronę az aks nodepool add reference (Dodawanie puli węzłów az aks).
Po kilku minutach zostanie utworzona nowa pula węzłów:
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 istniejących węzłów
Cordoning oznacza określone węzły jako nieplanowalne i uniemożliwia dodawanie kolejnych zasobników do węzłów.
Najpierw uzyskaj nazwy węzłów, które chcesz połączyć za pomocą polecenia kubectl get nodes
. Dane wyjściowe powinny wyglądać podobnie do następujących:
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
Następnie, używając polecenia kubectl cordon <node-names>
, określ żądane węzły na liście rozdzielanej spacjami:
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
Opróżnianie istniejących węzłów
Ważne
Aby pomyślnie opróżnić węzły i wykluczyć uruchomione zasobniki, upewnij się, że wszystkie zasobniki PodDisruptionBudget (PDB) zezwalają na przeniesienie co najmniej jednej repliki zasobnika naraz. W przeciwnym razie operacja opróżniania/eksmisji zakończy się niepowodzeniem. Aby to sprawdzić, możesz uruchomić kubectl get pdb -A
polecenie i sprawdzić, czy ALLOWED DISRUPTIONS
jest co najmniej jeden.
Opróżnianie węzłów spowoduje, że zasobniki będą na nich eksmitowane i ponownie tworzone na innych węzłach, które można schedulowalne.
Aby opróżnić węzły, ponownie użyj polecenia kubectl drain <node-names> --ignore-daemonsets --delete-emptydir-data
, używając rozdzielanej spacjami listy nazw węzłów:
Ważne
Użycie --delete-emptydir-data
jest wymagane do eksmisji utworzonych coredns
i metrics-server
zasobników usługi AKS. Jeśli ta flaga nie jest używana, oczekiwany jest błąd. Aby uzyskać więcej informacji, zobacz dokumentację dotyczącą emptydir.
kubectl drain aks-nodepool1-31721111-vmss000000 aks-nodepool1-31721111-vmss000001 aks-nodepool1-31721111-vmss000002 --ignore-daemonsets --delete-emptydir-data
Po zakończeniu operacji opróżniania wszystkie zasobniki inne niż te kontrolowane przez zestawy demonów są uruchomione w nowej puli węzłów:
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>
Rozwiązywanie problemów
Może zostać wyświetlony błąd podobny do następującego:
Błąd podczas eksmitowania zasobników/[podname] -n [przestrzeń nazw] (spróbuje ponownie po 5s): Nie można wykluczyć zasobnika, ponieważ naruszałoby to budżet zakłóceń zasobnika.
Domyślnie klaster ma AKS_managed budżety zakłóceń zasobników (na przykład coredns-pdb
lub konnectivity-agent
) z wartością MinAvailable
1. Jeśli na przykład istnieją dwa coredns
zasobniki uruchomione, podczas gdy jeden z nich jest odtwarzany i jest niedostępny, drugi nie może mieć wpływu z powodu budżetu przerwy w działaniu zasobnika. To rozwiązuje się po zaplanowaniu i uruchomieniu początkowego coredns
zasobnika, co umożliwia prawidłowe eksmitowanie i ponowne utworzenie drugiego zasobnika.
Napiwek
Rozważ opróżnianie węzłów jeden po drugim w celu zapewnienia bezproblemowego środowiska eksmisji i uniknięcia ograniczania przepustowości. Aby uzyskać więcej informacji, zobacz:
Usuwanie istniejącej puli węzłów
Aby usunąć istniejącą pulę węzłów, użyj witryny Azure Portal lub polecenia az aks nodepool delete :
az aks nodepool delete \
--resource-group myResourceGroup \
--cluster-name myAKSCluster \
--name nodepool1
Po zakończeniu ostatecznym wynikiem jest klaster usługi AKS z jedną, nową pulą węzłów z nowym, żądanym rozmiarem jednostki SKU oraz prawidłowym uruchamianiem wszystkich aplikacji i zasobników:
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
Następne kroki
Po zmianie rozmiaru puli węzłów przez kordonowanie i opróżnianie dowiedz się więcej o używaniu wielu pul węzłów.
Azure Kubernetes Service