Optimierung der Pod-Zuweisung: QueueingHint in Kubernetes v1.32
Entdecken Sie, wie QueueingHint in Kubernetes v1.32 die Effizienz der Pod-Zuweisung verbessert und DevOps-Teams neue Möglichkeiten eröffnet.
Der Kubernetes Scheduler ist das Herzstück, das bestimmt, auf welchen Knoten neue Pods laufen. Er verarbeitet diese neuen Pods einen nach dem anderen. Daher wird die Effizienz des Schedulers mit der Größe Ihrer Cluster immer wichtiger.
Im Laufe der Jahre hat das Kubernetes SIG Scheduling die Durchsatzrate des Schedulers durch verschiedene Verbesserungen optimiert. In diesem Artikel stellen wir eine wesentliche Neuerung des Schedulers in Kubernetes v1.32 vor: ein Scheduling-Kontextelement namens QueueingHint. Hier erfahren Sie, wie QueueingHint die Effizienz der Pod-Zuweisung verbessert.
Scheduling-Warteschlange
Der Scheduler speichert alle nicht zugewiesenen Pods in einem internen Element, das als Scheduling-Warteschlange bezeichnet wird.
Die Scheduling-Warteschlange besteht aus folgenden Datenstrukturen:
- ActiveQ: Enthält neu erstellte Pods oder Pods, die bereit sind, erneut zur Zuweisung verarbeitet zu werden.
- BackoffQ: Enthält Pods, die bereit sind, erneut zugewiesen zu werden, aber auf das Ende eines Backoff-Zeitraums warten müssen. Der Backoff-Zeitraum hängt von der Anzahl der erfolglosen Zuweisungsversuche ab, die der Scheduler für diesen Pod unternommen hat.
- Unschedulable Pod Pool: Enthält Pods, die der Scheduler nicht zuweisen kann, aus einem der folgenden Gründe:
- Der Scheduler hat zuvor versucht, die Pods zuzuweisen, konnte dies jedoch nicht. Seit diesem Versuch hat sich der Cluster nicht so verändert, dass diese Pods zuweisbar wären.
- Die Pods werden von PreEnqueue-Plugins davon abgehalten, an den Zuweisungszyklen teilzunehmen, zum Beispiel haben sie ein Scheduling-Gate und werden durch das Scheduling-Gate-Plugin blockiert.
Scheduling-Framework und Plugins
Der Kubernetes-Scheduler wird gemäß dem Kubernetes Scheduling-Framework implementiert.
Und alle Funktionen zur Zuweisung sind als Plugins implementiert (z.B. wird Pod-Affinität im InterPodAffinity
-Plugin implementiert).
Der Scheduler verarbeitet wartende Pods in Phasen, die als Zyklen bezeichnet werden:
-
Scheduling-Zyklus: Der Scheduler nimmt wartende Pods aus der ActiveQ-Komponente der Scheduling-Warteschlange einen nach dem anderen. Für jeden Pod führt der Scheduler die Filter- und Bewertungslogik jedes Scheduling-Plugins aus. Der Scheduler entscheidet dann, auf welchem Knoten der Pod platziert werden soll oder ob der Pod zu diesem Zeitpunkt nicht zugewiesen werden kann.
Wenn der Scheduler entscheidet, dass ein Pod nicht zugewiesen werden kann, gelangt dieser Pod in den Unschedulable Pod Pool der Scheduling-Warteschlange. Wenn der Scheduler jedoch beschließt, den Pod auf einem Knoten zu platzieren, geht der Pod in den Bindungszyklus.
-
Bindungszyklus: Der Scheduler kommuniziert die Knotenplatzierungsentscheidung an den Kubernetes-API-Server. Dieser Vorgang bindet den Pod an den ausgewählten Knoten.
Abgesehen von einigen Ausnahmen gelangen die meisten nicht zugewiesenen Pods nach jedem Scheduling-Zyklus in den Unschedulable Pod Pool. Die Unschedulable Pod Pool-Komponente ist entscheidend, da der Scheduling-Zyklus Pods einzeln verarbeitet. Wenn der Scheduler ständig versuchen müsste, unschedulable Pods zu platzieren, anstatt diese Pods in den Unschedulable Pod Pool zu übergeben, würden viele Scheduling-Zyklen mit diesen Pods verschwendet werden.
Mit der Einführung von QueueingHint in Kubernetes v1.32 können Entwickler und DevOps-Teams die Effizienz ihrer Pod-Zuweisungsprozesse erheblich steigern. ayedo unterstützt Sie dabei, Kubernetes optimal zu nutzen und Ihre Cloud-Infrastruktur zu optimieren.
Quelle: Kubernetes Blog