Autoscaling für elastische Container Plattformen

21 Sep 2017 , first release: 20 Jan 2017 Pixabay.com, MikeBird, Lizenz: CC0 Public Domain

Meta

  • Author: Christian Stüben
  • State: completed
  • Study programme: Informatik/Softwaretechnik
  • Degree: Bachelor (B. Sc.)
  • Company: CoSA
  • Thesis report
  • Source code

Thesis

In dieser Bachelorarbeit sollen existierende Open Source Monitoring Lösungen (wie z.B. der ELK-Stack, Prometheus, etc.) analysiert und mit einer bestehenden Deployer-Lösung für elastische Containerplattformen (wie Kubernetes, Apache Mesos, Docker Swarm, Nomad, etc.), zu einem Auto-Scaler integriert werden. Eine Realisierung dieses Deployers wurde bereits für Kubernetes auf Amazon AWS und OpenStack umgesetzt. Es sollen Metriken der Cluster-Nodes erfasst, zusammengeführt und analysiert werden. Die Bestimmung geeigneter Metriken für Skalierungsmaßnahmen gehört nicht zum Umfang dieser Arbeit. Die Arbeit soll jedoch nachweisen, dass beliebig erfassbare Metriken (und Metrikkombinationen) für eine Autoskalierung genutzt werden können. Im Detail müssen folgende Teilaufgaben bearbeitet und dokumentiert (Bachelorarbeit) werden:

Teilaufgaben

Hinweis: Sollten sich während der Bearbeitung dieser Arbeit einzelne Aspekte als schwer realisierbar erweisen, kann die Aufgabenstellung - nach plausiblem Nachweis der Schwierigkeit - angepasst werden.

Analyse von bestehenden Monitoring-Lösungen

Es gibt diverse Tools und Tool-Stacks mit denen das Monitoring von Cluster-Nodes erfolgen kann.

  • Mittels einer Recherche sollen geeignete (mind. drei) Monitoring-Systeme/Stacks identifiziert und verglichen werden.
  • Die Kriterien für eine vergleichende Analyse sollen auf dem Funktionsumfang (unterstützt Metriken) und der Skalierbarkeit beruhen. Ausschlusskriterien sind Dienste die nur als externer Service zu Verfügung stehen und Tools unter nicht-freier Lizenz.
  • Weitere Kriterien, besonders solche, die für die Umsetzung und Integration mit dem vorhandenen ECP-Deployer zusammenhängen, sollen in Absprache selbstständig identifiziert werden.

Automatisches Skalieren des Clusters (Integration)

Aktuell ist ein Deployer für ein Kubernetes Cluster vorhanden und für andere Plattformen, wie beispielweise Apache Mesos und Docker Swarm, geplant. Der bestehende Deployer soll um eine Monitoring- und Skalierungs-Komponente ergänzt werden.

  • Entsprechend der vergleichenden Analyse soll das geeignetste Monitoring-System installiert und integriert werden.
  • Es soll ein System in Ruby umgesetzt werden, welches anhand der Daten aus dem Monitoring-System und der übergebenen Metriken die Anzahl der Cluster-Nodes nach Bedarf anpasst (Auto-Skallierung)
  • Dazu muss die Cluster-Konfiguration angepasst und der ECP-Deployer geeignet getriggert werden.
  • Es sind nach Möglichkeit einfache Datenformate wie bspw. JSON zu nutzen.

Evaluierung der Skalierbarkeit des Clusters

Anhand von mehreren erfassbaren Metriken/Metrikkombinationen soll das Skalieren des Clusters exemplarisch nachgewiesen werden.

  • Es muss gezeigt werden, das Systemzustände der Cluster-Nodes (bspw. CPU-Load, Arbeitsspeicher, Plattenplatz, Netzwerklast, etc.) erkannt und in sinnvolle Skalierungsaktionen umgesetzt werden können.
  • Dazu müssen geeignete Tools zur Erzeugung von Lasten identifiziert oder ggf. erstellt werden.
  • Es muss getestet werden, dass das System entsprechend der überwachten Metriken selbstständig skaliert.
  • Es soll horizontales und automatisches Hoch- und Runterskalieren getestet werden.