Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Möglicherweise möchten Sie die Größe Ihrer virtuellen Computer (VMs) ändern, um eine steigende Anzahl von Bereitstellungen zu berücksichtigen oder eine größere Workload auszuführen. Das direkte Ändern der Größe von AKS-Instanzen wird bei Verwendung von Skalierungssätzen für virtuelle Computer in AKS nicht unterstützt, wie in den Supportrichtlinien für AKS beschrieben:
AKS-Agentknoten werden im Azure Portal als reguläre Azure IaaS-Ressourcen angezeigt. Diese virtuellen Computer werden jedoch in einer benutzerdefinierten Azure-Ressourcengruppe bereitgestellt (in der Regel mit dem Präfix MC_*). Sie können diese Knoten nicht direkt anpassen, indem Sie die IaaS-APIs oder -Ressourcen verwenden. Alle benutzerdefinierten Änderungen, die nicht über die AKS-API durchgeführt werden, werden nicht über ein Upgrade, eine Skalierung, ein Update oder einen Neustart beibehalten.
In diesem Artikel lernen Sie die empfohlene Methode zum Ändern der Größe eines Knotenpools kennen, indem Sie einen neuen Knotenpool mit der gewünschten SKU-Größe erstellen, die vorhandenen Knoten abkabeln und entwässern und dann den vorhandenen Knotenpool entfernen.
Wichtig
Diese Methode gilt speziell für AKS-Cluster, die auf Virtual Machine Scale Sets basieren. Wenn Sie virtuelle Computer-basierte Knotenpools verwenden, können Sie die VM-Größen in einem vorhandenen Knotenpool ganz einfach mit einem einzigen Azure CLI-Befehl aktualisieren und mehrere VM-Größen im selben Knotenpool haben. Weitere Informationen finden Sie in der Dokumentation zu Knotenpools für virtuelle Computer.
Erstellen eines neuen Knotenpools mit der gewünschten SKU
Hinweis
Jeder AKS-Cluster muss mindestens einen Systemknotenpool mit mindestens einem Knoten enthalten. In diesem Beispiel verwenden wir einen --mode von System, um einen Systemknotenpool hinzuzufügen, der den zu ändernden Systemknotenpool ersetzt. Sie können den Modus eines Knotenpools jederzeit aktualisieren . Sie können auch einen Benutzerknotenpool hinzufügen, indem Sie --mode auf User setzen.
Stellen Sie beim Ändern der Größe sicher, dass Sie alle Workloadanforderungen berücksichtigen, z. B. Verfügbarkeitszonen, und konfigurieren Sie den VMSS-Knotenpool entsprechend. Möglicherweise müssen Sie den folgenden Befehl so ändern, dass er Ihren Anforderungen am besten entspricht. Eine vollständige Liste der Konfigurationsoptionen finden Sie auf der Referenzseite zu az aks nodepool add.
Erstellen Sie einen neuen Knotenpool mithilfe des
az aks nodepool addBefehls. In diesem Beispiel erstellen wir einen neuen Knotenpool mitmynodepooldrei Knoten und derStandard_DS3_v2VM-SKU, um einen vorhandenen Knotenpool zu ersetzen,nodepool1der über dieStandard_DS2_v2VM-SKU verfügt.az aks nodepool add \ --resource-group myResourceGroup \ --cluster-name myAKSCluster \ --name mynodepool \ --node-count 3 \ --node-vm-size Standard_DS3_v2 \ --mode System \ --no-waitEs dauert ein paar Minuten, bis der neue Knotenpool erstellt wird.
Rufen Sie den Status des neuen Knotenpools mithilfe des
kubectl get nodesBefehls ab.kubectl get nodesDie Ausgabe sollte der folgenden Beispielausgabe ähneln und sowohl den neuen Knotenpool
mynodepoolals auch den vorhandenen Knotenpoolnodepool1anzeigen:NAME STATUS ROLES AGE VERSION aks-mynodepool-98765432-vmss000000 Ready agent 23m v1.21.9 aks-mynodepool-98765432-vmss000001 Ready agent 23m v1.21.9 aks-mynodepool-98765432-vmss000002 Ready agent 23m v1.21.9 aks-nodepool1-12345678-vmss000000 Ready agent 10d v1.21.9 aks-nodepool1-12345678-vmss000001 Ready agent 10d v1.21.9 aks-nodepool1-12345678-vmss000002 Ready agent 10d v1.21.9
Absperren der vorhandenen Knoten
Durch das Absperren werden bestimmte Knoten als nicht planbar markiert. Dadurch wird verhindert, dass den Knoten weitere Pods hinzugefügt werden.
Rufen Sie die Namen der Knoten ab, die Sie mit dem
kubectl get nodesBefehl abschotten möchten.kubectl get nodesDie Ausgabe sollte der folgenden Beispielausgabe ähneln, die die Knoten im vorhandenen Knotenpool
nodepool1anzeigt, die Sie sperren möchten.NAME STATUS ROLES AGE VERSION aks-nodepool1-12345678-vmss000000 Ready agent 7d21h v1.21.9 aks-nodepool1-12345678-vmss000001 Ready agent 7d21h v1.21.9 aks-nodepool1-12345678-vmss000002 Ready agent 7d21h v1.21.9Sperren Sie die bestehenden Knoten mit dem Befehl
kubectl cordonab, und geben Sie die gewünschten Knoten in einer durch Leerzeichen getrennten Liste an. Beispiel:kubectl cordon aks-nodepool1-12345678-vmss000000 aks-nodepool1-12345678-vmss000001 aks-nodepool1-12345678-vmss000002Die Ausgabe muss dem folgenden Beispielergebnis ähneln, das zeigt, dass die Knoten gesperrt sind.
node/aks-nodepool1-12345678-vmss000000 cordoned node/aks-nodepool1-12345678-vmss000001 cordoned node/aks-nodepool1-12345678-vmss000002 cordoned
Entleeren der vorhandenen Knoten
Wichtig
Um Knoten erfolgreich auszugleichen und ausgeführte Pods zu entfernen, stellen Sie sicher, dass für alle PodDisruptionBudgets (PDB) jeweils die Verschiebung von mindestens einem Podreplikat gleichzeitig zulässig ist. Andernfalls schlägt der Entwässerungs-/Auslassvorgang fehl. Um dies zu überprüfen, können Sie kubectl get pdb -A ausführen und überprüfen, ob ALLOWED DISRUPTIONS mindestens 1 oder höher ist.
Das Entleeren von Knoten führt dazu, dass Pods, die darauf ausgeführt werden, entfernt und auf den anderen, planbaren Knoten neu erstellt werden.
Entwässern Sie die vorhandenen Knoten mithilfe des
kubectl drainBefehls und der--ignore-daemonsets--delete-emptydir-dataKennzeichnungen, und geben Sie die gewünschten Knoten in einer durch Leerzeichen getrennten Liste an. Beispiel:Wichtig
Die Verwendung von
--delete-emptydir-dataist erforderlich, um den von AKS erstelltencorednsund diemetrics-server-Pods zu entfernen. Wenn Sie dieses Flag nicht verwenden, wird eine Fehlermeldung angezeigt. Weitere Informationen finden Sie in der Dokumentation zu „emptydir“.kubectl drain aks-nodepool1-12345678-vmss000000 aks-nodepool1-12345678-vmss000001 aks-nodepool1-12345678-vmss000002 --ignore-daemonsets --delete-emptydir-dataNach Abschluss des Abflussvorgangs sollten alle Pods (mit Ausnahme der Pods, die durch DaemonSets gesteuert werden) im neuen Knotenpool laufen. Sie können dies mithilfe des
kubectl get pods-Befehls überprüfen.kubectl get pods -o wide -A
Problembehebung bei Pod-Entfernungsproblemen
Beim Entwässern von Knoten tritt möglicherweise der folgende Fehler auf:
Error when evicting pods/[podname] -n [namespace] (will retry after 5s): Cannot evict pod as it would violate the pod's disruption budget.
Standardmäßig verfügt Ihr Cluster über von AKS verwaltete Budgets für die Unterbrechung von Pods (z. B. coredns-pdb oder konnectivity-agent) mit einem MinAvailable-Wert von 1. Wenn beispielsweise zwei coredns-Pods ausgeführt werden, kann jeweils nur einer unterbrochen werden. Während einer von ihnen neu erstellt wird und nicht verfügbar ist, kann der andere coredns-Pod aufgrund des Pod-Unterbrechungsbudgets nicht entfernt werden. Dieses Problem löst sich von selbst, wenn der erste coredns-Pod geplant ist und ausgeführt wird, sodass der zweite Pod ordnungsgemäß entfernt und neu erstellt werden kann.
Tipp
Erwägen Sie, Knoten einzeln nacheinander zu entleeren, um einen reibungsloseren Entfernungsvorgang zu gewährleisten und eine Drosselung zu vermeiden. Weitere Informationen finden Sie unter
Entfernen des vorhandenen Knotenpools
Wichtig
Wenn Sie einen Knotenpool löschen, führt AKS kein Absperren und Ausgleichen durch. Um die durch die Neuplanung von Pods, die derzeit in dem zu löschenden Knotenpool ausgeführt werden, bedingte Unterbrechung zu minimieren, sperren und entleeren Sie alle Knoten im Knotenpool, bevor Sie diesen löschen.
Löschen Sie den ursprünglichen Knotenpool mithilfe des
az aks nodepool deleteBefehls.az aks nodepool delete \ --resource-group myResourceGroup \ --cluster-name myAKSCluster \ --name nodepool1Stellen Sie sicher, dass Ihr AKS-Cluster nur über den neuen Knotenpool verfügt und die Anwendungen und Pods ordnungsgemäß laufen, indem Sie den
kubectl get nodesBefehl verwenden.kubectl get nodesDie Ausgabe sollte der folgenden Beispielausgabe ähneln, wobei nur der neue Knotenpool
mynodepoolangezeigt wird:NAME STATUS ROLES AGE VERSION aks-mynodepool-98765432-vmss000000 Ready agent 63m v1.21.9 aks-mynodepool-98765432-vmss000001 Ready agent 63m v1.21.9 aks-mynodepool-98765432-vmss000002 Ready agent 63m v1.21.9
Nächste Schritte
Nachdem Sie die Größe eines Knotenpools durch Sperren und Entleeren geändert haben, erfahren Sie mehr über die Verwendung mehrerer Knotenpools.