© Excellent backgrounds/Shutterstock.com
DC/OS für Java-Entwickler

Containerorchestrierung fest im Griff


In Zeiten von Docker, Big Data und Microservices wird es immer wichtiger, verteilte Anwendung sinnvoll und dynamisch auf Cluster verteilen zu können und dabei trotzdem noch den Überblick zu behalten. Daher werden Clustermanagementsysteme wie Apache Mesos und DC/OS immer wichtiger. Dabei geht es nicht nur um die Orchestrierung von Containern, sondern auch um die Verwaltung von persistenten Daten, die fehlertolerante Auslegung der Anwendungslandschaft und die optimale Auslastung der Ressourcen im Cluster.

Video: Containerorchestrierung mit Mesos – DC/OS für Java-Entwickler

Schaut man sich die Ressourcenauslastung vieler aktueller Cluster an, stellt man mit Schrecken fest, dass sie sich häufig im Bereich von 10 bis 15 Prozent befindet. Das ist nicht verwunderlich, da viele Anwendungen darauf ausgelegt sind, auf ganz bestimmten Knoten des Clusters zu laufen. Und natürlich müssen auch Lastspitzen abgedeckt werden. Da meist nur eine Anwendung pro Knoten läuft und ihn dadurch charakterisiert, spricht man auch von einer statischen Partitionierung des Clusters. Ein dynamisches Verteilen freier Ressourcen, auch wenn Knoten ausfallen, findet nur in seltenen Fällen statt. Häufig kann man beobachten, dass bestimmte Anwendungen Lastspitzen zu einer Tageszeit haben und andere Anwendungen wiederum zu einer anderen. Da aber beide Anwendungen separat betrachtet und freie Ressourcen nicht dynamisch verteilt werden können, müssen wir beide Anwendungen separat bezüglich ihrer Lastspitzen optimieren.

An genau diesem Punkt kommen Mesos und DC/OS ins Spiel. DC/OS, das Datacenter Operating System, ist eine Plattform für den Betrieb von Microservices, traditionellen Datenbanken sowie Big- und Fast-Data-Anwendungen. Es baut auf Mesos auf, das genutzt wird, um beispielsweise Twitter oder Apple Siri zu betreiben und dynamisch skalieren zu können (Abb. 1).

Mesos: Abstraktion weg vom Cluster

Mesos abstrahiert den Fakt, dass man mit einem Cluster arbeitet, und lässt es sich anfühlen, als würde man mit einem einzigen Server interagieren. Das Ziel dabei ist es, die im Cluster verfügbaren Ressourcen auf alle Anwendungen zu verteilen und so dynamisch auf Anforderungen reagieren zu können. Auch die Auslastung der Knoten lässt sich so erhöhen.

unterstein_dcos_1.tif_fmt1.jpgAbb. 1: Ressourcenauslastung traditionell vs. DC/OS

Mesos implementiert eine Scheduling-Architektur auf zwei Ebenen. Es verfolgt das Ziel, freie Ressourcen, wie CPU, Arbeitsspeicher (Memory) oder Festplattenspeicher (Disk), fair den verschiedenen Schedulern anzubieten, Anwendungen auf diesen Angeboten zu starten und den Zustand dieser Anwendungen zu überwachen und zu berichten. Mesos selbst besteht dabei aus zwei Arten von Knoten: Mesos Master und Mesos Agents. Die Mesos Master verwalten den Zustand des Clusters und sind rein als Managementknoten tätig, wohingegen Mesos Agents rein für die Ausführung von Anwendungen zuständig sind. Mesos Master sollten hoch verfügbar ausgelegt sein. Hierbei wird der führende Master-Knoten über ein ZooKeeper-Quorum bestimmt. Die anderen Master-Knoten laufen passiv. Im Fall eines Ausfalls wird ein neuer Master als der führende gewählt.

Diese Aufteilung zwischen Verteilung der Ressourcen und Entscheidung über das Scheduling ermöglicht große Flexibilität beim Betrieb von Anwendungen. Diese erlaubt es, unterschiedliche Anwendungen auf Mesos zu betreiben, da das Verhalten in bestimmten Szenarien sehr unterschiedlich sein kann. Der Scheduler entscheidet dabei nicht nur, ob mit einem Angebot eine Instanz einer Anwendung gestartet werden soll. Er wird auch informiert, wenn eine Instanz beendet wird, fehlschlägt oder unerreichbar ist. Als Beispiel für solche Scheduler seien an dieser Stelle Apache Myriad (Hadoop), Apache Spark, Apache Flink, Apache Cassan­dra, Apache Kafka oder Marathon genannt.

Marathon ist an der Stelle interessant, da es sich um einen generischen Scheduler zur Containerorchestrierung handelt. Marathon ermöglicht es dem Benutzer, einfach Container zu starten, und bietet zahlreiche Konfigurationsoptionen, wie Ressourcenlimitierung, Anzahl der laufenden Instanzen, Health-Checks oder Upgradestrategien. Weiterhin ist es möglich, zu definieren, wie die Container im Cluster verteilt werden sollen, dass Container Abhängigkeiten zueinander besitzen oder bestimmte Netzwerkkonfigurationen enthalten sollen. Man kann aber auch definieren, dass pro Agent z. B. nur ein Container laufen darf oder alle Container auf einem Agenten mit einem bestimmten Kriterium laufen müssen. Weiterhin ist es möglich, Health-Checks zu definieren. Ein Health-Check kann als HTTP-Endpunkt, TCP-Check oder Shell-Skript innerhalb des Containers definiert sein. Diese Health-Checks werden periodisch ausgeführt. Sollte ein Health-Check öfter als erlaubt scheitern, wird Marathon die Instanz erneut starten.

Was ist jetzt DC/OS genau?

DC/OS nutzt sowohl Mesos als Kernel als auch Marathon als Container-Scheduler. DC/OS ist allerdings mehr als Mesos und Marathon. Es ist eine Bündelung von mehr als dreißig Open-Source-Projekten mit einer gemeinsamen Distribution, Roadmap, Dokumentation, Securitykonzept, Benutzeroberfläche, Design und Tutorials. Die enthaltenen Komponenten sind aufeinander abgestimmt und bilden so eine Sammlung von Best Practices vieler Installationen. DC/OS wird als vorgefertigt...

Neugierig geworden? Wir haben diese Angebote für dich:

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang