Konzepte der Clusterskalierbarkeit
Knotenressourcenmangel
Im spec.containers.resources
-Schlüssel einer Pod-YAML-Datei definieren Sie die Anzahl der Ressourcen, die der Pod benötigt. Nachdem Sie einen neuen Pod in einem Knoten erstellt haben, weist Kubernetes dem Pod automatisch die angegebene Anzahl von Ressourcen zu, sodass er mit der benötigten Energiemenge betrieben wird.
Ein einzelner Knoten ist ein einzelner virtueller Computer (VM) mit einer begrenzten Menge von Ressourcen, wie CPU und RAM, die für Pods verfügbar sind. Sie können keine unendliche Anzahl von Pods in einen Knoten drehen. Wenn ein Knoten die erforderlichen Anforderungen für die Ressource des Pods nicht erfüllt, konkurriert der Pod mit den angegebenen Ressourcen für die Ressourcen des Knotens, was zu Knotenhunger führt. Der Pod verbleibt in dem Status Ausstehend und wird erst dann für Knoten verplant, wenn genügend Ressourcen verfügbar sind.
Clusterskalierbarkeit
Um Knotenhunger zu vermeiden, muss der Operator das Cluster skalieren und dem Knotenpool weitere VMs hinzufügen. Sie können die manuelle Clusterskalierung mit dem Azure CLI-Befehl az aks scale
ausführen. Sie können auch das Azure-Portal verwenden, um Ihr Cluster manuell zu skalieren. Melden Sie sich beim Portal an und wählen Sie Ihren Azure Kubernetes Service-Cluster (AKS-Cluster) aus. Wählen Sie unter Einstellungen die Option Knotenpools aus. Wählen Sie den Knotenpool aus, den Sie skalieren möchten, und wählen Sie dann den Knotenpool Skalieren aus.
Manuelle Skalierung kann überwältigend sein, insbesondere bei Clustern mit inkonsistenter und schwankender Nachfrage. Wenn die Anzahl der Pods regelmäßig schwankt, müssen Sie sie ständig auf ungeplante Pods überwachen und alle erforderlichen Optimierungen in Echtzeit vornehmen.
Automatische Clusterskalierung
In AKS ist die Clusterautoskalierung ein Tool, mit dem der Clusterskalierungsprozess automatisiert wird. Wenn Sie sie auf Ihrem AKS-Cluster aktivieren, überwacht sie ungeplante Pods mit Ressourceneinschränkungen und erhöht automatisch die Anzahl der Knoten, um die Anforderungen zu erfüllen.
Cluster Autoscaler kann die Anzahl der Knoten in einem Cluster auch verringern, wenn für einige Zeit ungenutzte Clusterkapazität vorhanden ist. Wenn diese Bedingung erfüllt ist, sperrt (macht den Knoten für die Planung neuer Workloads nicht verfügbar) die Autoskalierung den Knoten und gleicht ihn aus (verschiebt die vorhandenen Workloads auf einen anderen Knoten). Dadurch werden alle Pods, die in diesem Knoten geplant sind, sicher auf andere Knoten verschoben. Außerdem wird sichergestellt, dass während des Prozesses keine weiteren Pods geplant werden. Anschließend wird der Knoten aus dem Pool entfernt.
Es gibt einige Situationen, in denen Cluster Autoscaler den Knoten nicht entfernen können, weil einige Pods nicht aus diesem Knoten verschoben werden können. Zu diesen Situationen gehören:
- Ein Pod wird mittels einer YAML-Datei direkt erstellt und ist nicht an Controller wie beispielsweise „Bereitstellungen“ oder „ReplicaSets“ gebunden.
- Das Budget für die Unterbrechung von Pods (Pod Disruption Budget, PDB) ist zu restriktiv und lässt nicht zu, dass die Anzahl von Pods unter einen bestimmten Schwellenwert fällt.
- Der Pod hat einen Knotenselektor für diesen bestimmten Knoten oder eine Knotenaffinität, die ihn daran hindern würde, woanders hin zu wechseln.
Wenn die automatische Skalierung aktiviert ist, ist die manuelle Clusterskalierung deaktiviert.