Definition

Kubernetes Scheduler

Was ist der Kubernetes-Scheduler?

Der Kubernetes-Scheduler ist eine Komponente der Open-Source-Container-Orchestrierungsplattform Kubernetes, die Leistung, Kapazität und Verfügbarkeit durch Richtlinien steuert und dabei die Topologie berücksichtigt.

Der Kubernetes-Scheduler leistet das für Container, was Scheduler für virtuelle Maschinen wie den VMware Distributed Resource Scheduler erreichen.

Wie funktioniert der Kubernetes-Scheduler?

Kubernetes stellt Container bereit, die in Pods organisiert sind, welche sich ihrerseits auf logischen Gruppierungen von Ressourcen, den so genannten Nodes, befinden. Arbeitslastspezifische Anforderungen lassen sich über die Kubernetes-Anwendungsprogrammschnittstelle (API) festgelegt.

Der Scheduler ist eine monolithische Komponente von Kubernetes, die vom API-Server zur Verwaltung von Clustern entkoppelt ist. Es handelt sich nicht um einen Admission Controller, also einen Plugin-Code, der Anfragen an die Kubernetes-API abfängt.

Der Kubernetes-Scheduler versucht, jeden von Kubernetes erstellten Pod einem geeigneten Satz von IT-Ressourcen auf einem Knoten zuzuordnen. Er ist auch in der Lage, Kopien von Pods auf verschiedene Knoten zu verteilen, um eine hohe Verfügbarkeit zu gewährleisten, falls gewünscht.

Wenn der Kubernetes-Scheduler keine Hardware findet, die den Anforderungen und Spezifikationen eines Pods entspricht (zum Beispiel über Affinitäts- und Anti-Affinitätsregeln und Quality-of-Service-Einstellungen), plant er den Pod nicht ein und startet immer wieder neue Versuche, bis schließlich Platz für ihn ist.

Konfigurieren des Kubernetes-Schedulers

Um den Kubernetes-Scheduler in den Versionen 1.24 und höher zu konfigurieren, schreiben Benutzer eine Konfigurationsdatei, in der sie über ein Scheduling-Profil angeben, wie sich Kubernetes in verschiedenen Phasen des Scheduling-Prozesses verhalten soll. Diese Konfigurationsdatei wird dann als Befehlszeilenargument an den Scheduler übergeben.

In Kubernetes-Versionen 1.23 und früher ist der Scheduler mit zwei Richtlinien konfigurierbar: PriorityFunction und FitPredicate. Zusammen zielen diese beiden Richtlinien darauf ab, die Container-Workloads auf mehrere Maschinen zu verteilen, damit Maschinen möglichst gleichmäßig belastet sind.

Eine andere Möglichkeit ist das Zuweisen von Ressourcen nach dem Zufallsprinzip – eine Methode, die Container mit minimalem Rechenaufwand den Ressourcen zuweist.

Kubernetes-Scheduler im Vergleich zu anderen Scheduling-Optionen

Neben dem Standard-Kubernetes-Scheduler gibt es auch Angebote von Drittanbietern oder Lösungen der Marke Eigenbau. Benutzerdefinierte Scheduler sind im Allgemeinen nicht sehr gefragt, aber sie sind sehr nützlich für Benutzer mit hohen Anforderungen an die Latenzzeit oder Runtime für bestimmte Workloads.

So ist es mitunter sinnvoll, einen benutzerdefinierten Scheduler für einen Workloads in einem Pod mit besonders hohen Anforderungen zu schreiben. Oder Sie implementieren Apache Spark- oder Mesos-Scheduler, um die Planung für Anwendungen zu übernehmen, die auf diesen Frameworks laufen.

Mit Kubernetes müssen sich Nutzer aber nicht zwingend zwischen Schedulern entscheiden: sie können mehrere gleichzeitig betreiben, um so möglichst bedarfsgerecht zu planen. So können einige Pods in einer Kubernetes-Bereitstellung den Standard-Scheduler verwenden, während andere in derselben Bereitstellung dies nicht tun.

Kubernetes-Scheduler-Geschichte und Zukunftsaussichten

Kubernetes ist ein sich schnell entwickelndes Open-Source-Projekt, das ursprünglich von Google-Ingenieuren entwickelt und erstmals 2014 angekündigt wurde.

Die Containerisierungs-Timeline
Frühe 2000er
Erste Konzepte für Container entstehen.
2008 
Das LXC-Systemcontainerprojekt geht an den Start.
2013
Das Docker-Projekt kommt auf den Markt und das zugehörige Unternehmen formiert sich.
2014
Kubernetes erscheint, inspiriert durch Googles sogenanntes Borg-Cluster Managementwerkzeug.
2017
Docker und AWS unterstützen nativ Kubernetes, gemeinsam mit Microsoft, Google und anderen großen Anbietern.
Abbildung 1: Container sind noch eine relativ neue Technologie, die sich stetig weiterentwickelt.

Viele Scheduler-Funktionen erscheinen in Alpha- und Beta-Versionen neuer Kubernetes-Versionen, bevor sie Teil der stabilen Version werden. Mit Kubernetes 1.7 kam beispielsweise eine Alpha-Funktion hinzu, mit der Benutzer das Ausführen von Pods auf Knoten mit lokal angeschlossenem Speicher über StorageClass-Einstellungen anfordern.

In künftigen Versionen wird sich das Kubernetes-Projekt auf die Verfeinerung fortschrittlicher Planungsfunktionen wie Affinität und Anti-Affinität auf Knoten- und Pod-Ebene, Taints und Toleranzen sowie benutzerdefinierte Parameter konzentrieren. Die Open-Source-Community von Kubernetes arbeitet außerdem an einer Priorisierungstechnologie, mit der Benutzer Kubernetes mitteilen können, dass ein Pod wichtiger ist als die anderen und deshalb beim Scheduling Vorrang erhalten sollte.

Diese Definition wurde zuletzt im März 2023 aktualisiert

Erfahren Sie mehr über Data-Center-Betrieb