Batch-Verarbeitung in Cloud-Native-Umgebungen Volcano: Gruppen-Scheduling von Containern in Kuberntes

Autor / Redakteur: Thomas Joos / Ulrike Ostler

Bei Volcano handelt es sich um ein Projekt der Cloud Native Computing Foundation, kurz CNCF. Es kommt vor allem als Batch-System im KI-Bereich und bei Big Data-Anwendungen zum Einsatz, wenn die Umgebung auf Kubernetes aufbaut.

Firmen zum Thema

Das CNCF-Projekt für die Batch-Verarbeitung trägt seit 2019 die Bezeichnung „Volcano“.
Das CNCF-Projekt für die Batch-Verarbeitung trägt seit 2019 die Bezeichnung „Volcano“.
(Bild: Reimund Bertrams auf Pixabay)

Das CNCF-Projekt Volcano ist ein Batch-System, das auf Kubernetes aufbaut. Im Fokus von Workloads stehen vor allem Workloads aus dem Bereich KI (Machine Learning und Deep Learning) und andere Big-Data-Anwendungen, die eine hohe Rechenlast verursachen und optimal im Kubernetes-Cluster eingeplant werden müssen.

Frameworks wie Tensorflow, Spark, Pytorch, MPI, Flink, Argo, Mindspore und PaddlePaddle, die Workloads mit hohen Arbeitslasten benötigen, arbeiten gut mit Volcano zusammen. Volcano unterstützt dabei die Integration mit verschiedenen Computing-Frameworks, zum Beispiel Kubeflow und Kubegene.

Volcano erweitert Kubernetes um verschiedene Funktionen. Dazu gehören vor allem Scheduling-Erweiterungen, Job-Management-Erweiterungen und Beschleuniger wie GPU und FPGA (Field Programmable Gate Array).

Gruppiertes Scheduling für Container

Volcano gehört zu den Projekten, die aus „Kube Batch“ hervorgegangen sind. Das Projekt wurde ursprünglich geschaffen, um Container besser zu gruppieren und die Ressourcen besser zu planen.

Vor allem für KI- und Big-Data-Lösungen ist Volcano in Kubernetes-Cluster ein wichtiger Bestandteil für bessere Ressourcenauslastung. Mit Volcano ist es möglich, KI-Workloads in Kubernetes-Clustern deutlich zu beschleunigen.

Ursprünglich im Jahr 2015 von der CNCF als Sandbox-Projekt 'Kubernetes-natives System für High-Performance-Workloads' akzeptiert, bekam es 2019 die Bezeichnung Volcano. Der Quellcode und die Issues des Projektes sind auch im Volcano-Branch auf Github zu finden.

Ergänzung für den Kubernetes-Scheduler

Der Scheduler in Kubernetes plant Container einzeln. Das ist für viele Szenarien sinnvoll, aber selten für Workloads mit rechenintensiven Aufgaben. Vor allem beim Training von KI-Umgebungen und auch in Big-Data-Analysen spielen oft ganze Gruppen von Containern eine wichtige Rolle.

Wenn eine Anwendung mehrere Container für ihre Ausführung benötigt, kann es mit dem Standard-Scheduler in Kubernetes, verursacht durch die die Einzelplanung, passieren, dass einzelne Container der Gruppe nicht starten können, weil nicht genügend Ressourcen vorhanden sind. Dadurch laufen solche Workloads entweder weniger effektiv, oder überhaupt nicht.

Gleichzeitig verursachen die bereits gestarteten Container der Gruppe aber Ressourcen, die überhaupt nichts bringen, weil ja ein wesentlicher Bestandteil der Gruppe fehlt. Das ist der Ansatz von Volcano. Die Lösung fasst die komplette Gruppe der voneinander abhängigen Container zusammen und plant deren Ressourcen gemeinsam ein.

„Volcano“ hilft bei der optimalen Bereitstellung von ressourcenhungrigen Workloads im KI-Bereich.
„Volcano“ hilft bei der optimalen Bereitstellung von ressourcenhungrigen Workloads im KI-Bereich.
(Bild: CNCF.io)

Können nicht alle Container in der Gruppe starten, verhindert Volcano den Start aller Container in der Gruppe. Das entlastet den Kubernetes-Cluster deutlich, da in diesem Fall wenigstens Ressourcen für andere Container- und Container-Gruppen zur Verfügung stehen. Wenn in einem Cluster mehrere solcher Gruppen laufen, ist der Einsatz von Volcano durchaus sinnvoll.

Automatische Ressourcenzuweisung für Container

Volcano hat durch seine interne Funktionen einen vollständigen Überblick zu den einzelnen Containern auf Kubernetes, aber auch auf Gruppen von Containern, die gemeinsam einen Workload zur Verfügung stehen. Neben der Gruppierung und gemeinsamen Ressourcenzuweisung von Containern, kann die Software auch erkennen, welche Knoten am besten dazu geeignet sind, die einzelnen Container einer Gruppe bereitzustellen.

Dabei lassen sich auch die CPU-, Speicher-, GPU- und andere Ressourcen spezifisch einplanen, und den Containern einer Gruppe bereitzustellen. Volcano kennt dazu die freien Ressourcen und die maximale Auslastung aller Knoten. Auf Basis dieser Informationen wählt Volcano den am besten geeigneten Knoten für die einzelnen Container aus.

Volcano bietet darüber hinaus auch die Möglichkeiten mit Prioritäten zu arbeiten. Auch Funktionen wie Domain Resource Fairness (DRF) und Binpack sind in Volcano integriert und lassen sich bei der Ressourcenplanung berücksichtigen. Wenn mehrere Gruppen miteinander konkurrieren, oder nicht gemeinsam auf einem Knoten zum Einsatz kommen sollen, lässt sich das mit Volcano berücksichtigen.

So arbeitet Volcano

Domain Resource Fairness (DRF) kann Aufträge priorisieren, auch in YARN und Mesos. Dabei kann DRF zum Beispiel auch Aufträge priorisieren, die weniger Ressourcen benötigen. Das resultiert darin, dass der Cluster mehr Aufträge ausführen kann und kleine Aufgaben nicht von großen Anwendungen blockiert werden. Als Auftrag definiert DRF in Volcano die Gesamtheit aller notwendigen Container für eine definierte Aufgabe.

Der Binpack-Algorithmus versucht alle Knoten im Cluster möglichst maximal auszulasten. Dabei lassen sich Konfigurationen vornehmen, über die Knoten erst vollständig belegt werden, bevor Volcano weitere Knoten belegt. Binpack plant die Auslastung aller Knoten im Cluster und plant anschließend die einzelnen Aufträge nach diesen Maßgaben ein.

„Volcano“ arbeitet mit verschiedenen Algorithmen für die Ressourcenoptimierung im Kubernetes-Cluster.
„Volcano“ arbeitet mit verschiedenen Algorithmen für die Ressourcenoptimierung im Kubernetes-Cluster.
(Bild: CNCF.io)

Der Algorithmus für Warteschlangen kann die gesamte Ressourcenzuweisung eines Clusters steuern. Zum Einsatz kommt diese Technik auch in YARN. Teilen sich mehrere Containergruppen einen Pool der Ressourcen in einem Cluster, kann Volcano steuern, welche Gruppe mehr Ressourcen benötigt.

Dadurch erkennt Volcano auch in einem solchen Szenario welche Gruppe vermutlich weniger Ressourcen nutzt und kann diese Gruppe zuerst ausführen. Sind deren Aufgaben erledigt, kann Volcano die Gruppe mit der höheren Ressourcenaulastung einplanen. Volcano kann seine verschiedenen Planungsalgorithmus-Plugins unterschiedlich gewichten.

Ergo: Kommen auf einem Kubernetes-Cluster Workloads zum Einsatz, die auf mehrere Container und Pods aufbauen sowie einen hohen Ressourcenverbrauch haben, kann Volcano deutliche Vorteile mit sich bringen. Der Einsatz lohnt sich vor allem bei der Arbeit mit KI-Workloads, zum Beispiel für Machine Learning und Deep Learning. Aber auch andere, ressourcenhungrige Workloads im Big Data-Bereich beim Rendering und bei umfassenden Berechnungen profitieren von Volcano.

Schlussendlich bringt Volcano auch für die anderen Workloads im Cluster einige Vorteile, da durch die wesentlich bessere Ressourcenplanung auch die anderen Workloads mehr Ressourcen nutzen können, oder beim Starten bevorzugt werden, weil sie weniger Ressourcen benötigen und damit schneller mit ihrer Arbeit fertig sind.

Artikelfiles und Artikellinks

(ID:47697999)