Der Betrieb einer eigenen private Cloud ist komplex und aufwändig. Die neue Open-Source-Lösung Yaook setzt sich das Ziel, die Bereitstellung und Verwaltung von OpenStack-Clouds zu automatisieren.
Wer eine eigene private Cloud bauen möchte und dabei auf Open-Source-Software setzt, kommt um OpenStack nicht herum. OpenStack ist eine Sammlung unterschiedlicher Projekte, die zusammen eine Infrastructure- und Platform as a Service-Lösung ergeben können. Durch die Aufteilung der einzelnen Features auf die unterschiedlichen Projekte und Services ist es jedem selbst überlassen, welche Features in seiner Cloud verfügbar sein sollen.
OpenStack selbst hat für das Deployment und den Betrieb mehrere eigene Projekte. Diese basieren dabei jeweils auf unterschiedlichen Technologien (beispielsweise ansible, docker oder helm). Ihnen gemein ist dabei ein enger Fokus auf OpenStack selbst. Viele weitere reguläre Tätigkeiten (z. B. Softwareupdates, Hardwaredeployment oder Maintenance von einzelnen Systemen) sind dem jeweiligen Nutzer selbst überlassen.
Das neue Open-Source-Projekt Yaook hat sich das Ziel gesetzt, diese regulären Tätigkeiten ebenfalls mit zu integrieren. OpenStack wird bei Yaook innerhalb eines Kubernetes-Clusters deployed. Dabei deckt Yaook die Verwaltung von den physischen Servern, der Kubernetes-Umgebung sowie dem OpenStack-Cluster ab.
Allgemeiner Aufbau einer OpenStack-Umgebung
Eine OpenStack-Umgebung lässt sich in 3 Teile untergliedern:
Der erste Teil beinhaltet alle “zentralen” Komponenten. Hierzu zählen alle APIs, die dem Nutzer zur Verfügung stehen, aber auch die notwendigen Datenbanken, Message Queues, oder Scheduling Services. Die zentralen Komponenten sind anhand eines Microservice-Ansatzes gebaut.
Der zweite Teil beinhaltet alle Compute Nodes. Hierunter werden alle Server verstanden, auf denen die virtuellen Maschinen der Cloud-Nutzer laufen. Die Menge der Compute Nodes einer OpenStack-Cloud kann dabei sehr unterschiedlich sein. Die meisten Umgebungen haben jedoch 20-500 dieser Systeme.
Der dritte Teil beinhaltet die Netzwerkservices von OpenStack. Dieser Teil kann bei kleineren Umgebungen auch mit dem ersten zusammenfallen. Hier werden die virtuellen Netze der Cloud-Nutzer mit der physischen Netzwerkumgebung (z. B. einer Internetanbindung) gekoppelt.
Der Bare-Metal Layer
Als erste Schicht eines Yaook Deployments verwaltet der Bare-Metal Layer alle physischen Server der Umgebung. Systeme werden automatisiert inventarisiert und mit einem Betriebssystem versorgt. Dabei kommt OpenStack Ironic für das Deployment der Systeme sowie Netbox für die Inventarisierung zum Einsatz.
Hiermit ist es möglich, mit wenigen Handgriffen neue Server in einen Cluster einzufügen oder einen neuen Cluster aufzubauen. Ab der Installation des Betriebssystems anhand eines vorgefertigten Abbildes werden alle Dienste der Kubernetes-Schicht vollautomatisch auf den Knoten installiert und die Knoten zu einem Cluster zusammengeführt.
Der Kubernetes Layer
Um die einzelnen OpenStack-Komponenten und deren Abhängigkeiten zu verwalten, setzt Yaook auf Kubernetes als Abstraktionsschicht.
Die zentralen Services (APIs, Datenbanken, etc.) profitieren durch die Features von Kubernetes, um eine hohe Stabilität und einfache Änderungen zu ermöglichen. Yaook kann sich damit auf die Änderung eines Openstack-Services konzentrieren (z. B. eine Aktualisierung von Keystone), Kubernetes übernimmt die Umsetzung auf die einzelnen Prozesse (z. B. das sequenzielle Aktualisieren der Keystone API um sicherzustellen, dass es zu keinen Ausfällen kommt).
Die dezentralen Services (vor allem die Compute Nodes) profitieren von der konsistenten Verteilung der Software auf alle Nodes. Dies ermöglicht es sowohl Yaook als auch ggf. dem Nutzer, die Software auf jeder Compute Node einfach laufen zu lassen.
Der Operator Layer
Die Yaook-Operator orchestrieren Dienste und Ressourcen im Kubernetes-Cluster auf Basis der jeweiligen Nutzeranforderungen. Der Nutzer definiert dabei, welcher OpenStack-Service mit welchen Parametern (z. B. Version, Konfiguration, Anzahl Replikas, Größe der Datenbank) erstellt werden soll. Zudem erfolgt hier die Zuweisung, welcher Service(-Teil) auf welcher physischen Node laufen soll.
Der Operator erstellt daraufhin die finale Konfiguration des Services und validiert sie. Dabei werden einige Parameter, die der Operator selbst generiert, automatisch eingebaut (z. B. Datenbank-Credentials). Danach werden die jeweiligen Kubernetes-Ressourcen erstellt, die benötigt werden, um den Service tatsächlich bereitzustellen (z. B. Deployments oder StatefulSets). Die Erstellung dieser Ressourcen folgt gewissen Abhängigkeiten, um z. B. notwendige Datenbankschemata anzupassen, bevor der eigentliche Service startet.
Darüber hinaus kann weitergehende Logik implementiert werden, um automatisierte Operationen gegen menschliche oder Codefehler abzusichern. Beispielsweise enthält der Operator für Compute Nodes zusätzliche Logik: Zum einen wird für diese Systeme sichergestellt, dass alle virtuellen Maschinen vor einer Wartung auf andere Systeme migriert werden. Zum anderen werden virtuelle Maschinen automatisch neu gestartet, sollte die jeweilige Compute Node ausfallen.
Weitere Informationen:
Yaook ist unter https://yaook.cloud kostenfrei unter der Apache-2 Lizenz verfügbar. Die Dokumentation ist unter https://docs.yaook.cloud zu finden.
Autoren:
Jonas Schäfer, DevOps Engineer bei Cloud&Heat Technologies & Felix Hüttner, Senior Professional bei Schwarz IT.
Nach seinem Informatik-Master-Abschluss ist Jonas Schäfer seit 2018 als DevOps Engineer bei Cloud&Heat Technologies angestellt. Er fokussiert sich vor allem auf das Life-Cycle-Management der Clouds. Dabei geht es vor allem um die Herausforderungen des täglichen Betriebs wie Updates, Monitoring und Behandeln von Fehlerzuständen. Zum anderen beschäftigt er sich mit längerfristigen Themen wie den Upgrades der eingesetzten OpenStack- oder Betriebssystem-Versionen.