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 potrzeby obsłużenia większego obciążenia, warto rozważyć zmianę planu skalowania maszyn wirtualnych lub zmianę rozmiaru wystąpień AKS. Jednak zgodnie z politykami wsparcia dla 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 nazwiemy tę nową pulę węzłów mynodepool.

Zrzut ekranu przedstawiający stronę portalu Azure dla klastra, z przejściem do Ustawienia > Pule węzłów. Wyświetlana jest 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>

Utwórz nową pulę węzłów z wybranym 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 SKU maszyny wirtualnej Standard_DS3_v2:

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 puli węzłów --modeSystem, ponieważ zakłada się, że klaster ma tylko jedną pulę węzłów, co wymaga zastąpienia jej inną pulą. 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ę portalu Azure dla klastra, który został wyświetlony w obszarze Ustawienia > Pule węzłów. Pokazane są dwie pule węzłów o nazwach pula węzłów 1 i moja 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

Odizoluj istniejące węzły

Izolowanie oznacza określone węzły jako nieplanowalne i uniemożliwia dodawanie kolejnych podó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ć polecenie kubectl get pdb -A i zweryfikować, czy ALLOWED DISRUPTIONS wynosi co najmniej jeden lub więcej.

Opróżnianie węzłów spowoduje, że zasobniki będą z nich usuwane i ponownie tworzone na innych węzłach, które można zaplanować.

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, aby usunąć utworzone przez AKS zasobniki coredns i metrics-server. Jeśli ta flaga nie zostanie użyta, można spodziewać się błędu. 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 zarządzane przez AKS budżety zakłóceń zasobników (na przykład coredns-pdb lub konnectivity-agent) z wartością 1 dla MinAvailable. 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. Problem rozwiązuje się po zaplanowaniu i uruchomieniu początkowego coredns zasobnika, co umożliwia prawidłowe usunięcie i ponowne utworzenie drugiego zasobnika.

Napiwek

Rozważ opróżnianie węzłów jeden po drugim, aby zapewnić płynniejszy proces wydalenia i uniknąć ograniczania. Aby uzyskać więcej informacji, zobacz:

Usuwanie istniejącej puli węzłów

Aby usunąć istniejącą pulę węzłów, użyj portalu Azure 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:

Zrzut ekranu przedstawiający stronę portalu Azure dla klastra, w którym nawigowano do sekcji Ustawienia > Pule węzłów. Wyświetlana jest jedna pula węzłów o nazwie

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.