Udostępnij za pośrednictwem


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 nodepool1z 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ę mynodepoolwęzłów .

Zrzut ekranu przedstawiający stronę witryny Azure Portal dla klastra, która została wyświetlona w obszarze Ustawienia > Pule węzłów. Zostanie wyświetlona jedna pula węzłów o nazwie pula węzłów 1.

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

Podczas zmiany rozmiaru należy wziąć pod uwagę wszystkie wymagania dotyczące obciążenia, takie jak strefy dostępności, i odpowiednio skonfigurować pulę węzłów. Może być konieczne zmodyfikowanie następującego polecenia, aby najlepiej dopasować je do Twoich potrzeb. Aby uzyskać pełną listę opcji konfiguracji, zobacz stronę referencyjną az aks nodepool add .

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 jednostki SKU maszyny Standard_DS3_v2 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.

Po kilku minutach zostanie utworzona nowa pula węzłów:

Zrzut ekranu przedstawiający stronę witryny Azure Portal dla klastra, która została wyświetlona w obszarze Ustawienia > Pule węzłów. Zostaną wyświetlone dwie pule węzłów o nazwie pula węzłów 1 i 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 az aks nodepool delete polecenia:

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:

Zrzut ekranu przedstawiający stronę witryny Azure Portal dla klastra, która została wyświetlona w obszarze Ustawienia > Pule węzłów. Zostanie wyświetlona jedna pula węzłów o nazwie moja pula węzłó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.