Kubernetes Scheduler
Der Kubernetes Scheduler ist ein Teil der Open-Source-Orchestrierungsplattform Kubernetes, der Leistung, Kapazität und Verfügbarkeit über Richtlinien steuert.
Der Scheduler ist eine monolithische Komponente von Kubernetes und entkoppelt von dem API-Server, der die Cluster verwaltet. Er ist kein Zugriffs-Controller. Das Kubernetes Scheduling kann als das Containeräquivalent zur VM-Planung betrachtet werden, ähnlich dem VMware Distributed Resource Scheduler.
Kubernetes setzt Container ein, die in Pods organisiert sind und sich auf logischen Gruppierungen von Ressourcen befinden, die als Nodes bezeichnet werden. Die für einen Workload spezifischen Anforderungen werden über eine API festgelegt. Der Kubernetes Scheduler versucht, jeden von Kubernetes erstellten Pod den geeigneten IT-Ressourcen auf einem Node zuzuordnen. Der Scheduler kann auch Kopien von Pods auf verschiedene Nodes verteilen, um eine hohe Verfügbarkeit zu gewährleisten.
Wenn der Kubernetes Scheduler keine Hardware findet, die den Anforderungen und Spezifikationen eines Pods entspricht (von Affinitäts- und Anti-Affinitätsregeln bis hin zu den Quality-of-Service-Einstellungen), wird dieser Pod ungeplant gelassen, und der Scheduler versucht es erneut, bis eine Maschine verfügbar ist.
Konfiguration
Der Kubernetes Scheduler kann über zwei verschiedene Richtlinien konfiguriert werden: PriorityFunction und FitPredicate. Eine weitere Möglichkeit besteht in der zufälligen Auswahl von Nodes – dies hat den Vorteil eines minimalen Overheads beim Zuweisen von Containern an Ressourcen.
Die Richtlinie FitPredicate folgt den erforderlichen Regeln und versucht gleichzeitig, Labels am Kubernetes Node zu finden oder die Anzahl angefragter Ressourcen zu ermitteln, die von bereits auf der gegebenen Maschine ablaufenden Containern angefordert wurden. FitPredicate hilft bei der Ermittlung von Containern, die die Kapazität der vorhandenen Hardwareressourcen überbeanspruchen. Wählt ein Anwender keinerlei Ressourcen aus, so kann der Scheduler dem Node jederzeit einen anderen Pod hinzufügen.
PriorityFunction wird angewendet, wenn der Scheduler bereits auf mehreren Systemen nach der besten Übereinstimmung gesucht hat. Findet der Scheduler mehrere Optionen, die den Pod unterstützen, so weist PriorityFunction den Scheduler an, die Maschinen auf Basis der am besten passenden Übereinstimmung einzusortieren. Ein Beispiel: Entsprechen drei Nodes den Anforderungen des neuen Pods, einer davon hat jedoch mehr freie Ressourcen als die anderen, so stellt dieser die beste Übereinstimmung dar.
In der Kubernetes-Umgebung helfen diese beiden Richtlinien bei der Lastverteilung von Container-Workloads über mehrere Maschinen hinweg, so dass es nicht zu Situationen kommt, in denen einige Maschinen unter Höchstlast laufen, während andere im Leerlauf sind.
Kubernetes Scheduler versus andere Optionen
Kubernetes bietet Anwendern die Möglichkeit, einen ausgewählten Scheduler anstelle des standardmäßigen zu implementieren und eine gleichzeitige Planung durchzuführen. Mehrere Scheduler können gleichzeitig arbeiten, einschließlich des Standard-Schedulers. Einige Pods verwenden möglicherweise den Standard-Scheduler, während andere ihn innerhalb derselben Kubernetes-Bereitstellung nicht benutzten.
Ein Anwender kann zum Beispiel einen eigenen Scheduler schreiben, um spezifisch hohen Anforderungen eines Workloads in einem Pod gerecht zu werden. Anwender können aber auch den Schedulern von Apache Spark oder Mesos die Übernahme des Schedulings für Anwendungen erlauben, die auf diesen Frameworks basieren. Es gibt im Allgemeinen keine große Nachfrage nach benutzerdefinierten Schedulern, aber sie erfüllen anspruchsvolle Anforderungen in Bezug auf Latenzzeiten oder Betriebszeiten für bestimmte Workloads.
Die Kubernetes Open Source Community konzentriert sich vor allem auf Priorisierungstechnologien, mit denen ein Anwender Kubernetes mitteilen kann, dass ein Pod wichtiger ist als andere und nicht in eine Warteschlange eingereiht wird.
Ausblick
Kubernetes ist ein junges, sich schnell entwickelndes Open-Source-Projekt, das ursprünglich von Google initiiert wurde. Viele der Scheduling-Features erscheinen erst in Alpha- und Beta-Versionen, bevor sie Teil eines Stable Release werden.
So hat zum Beispiel Kubernetes 1.7 eine Alpha-Funktion eingeführt, mit der Benutzer über die StorageClass-Einstellungen verlangen können, dass Pods auf Nodes mit lokalem Speicher ausgeführt werden.
Man sollt auch auf erweiterte Scheduling-Funktionen aus dem Kubernetes-Projekt achten, die über Node-Affinität und Anti-Affinität, Toleranzen, Pod-Affinität und Anti-Affinität und benutzerdefinierte Parameter definiert werden.