Die Skalierbarkeit der Open edX® Plattform: Kubernetes und NixOS auf Hetzner


Bei Abstract-Technology haben wir die Open edX® Plattform auf Kubernetes (häufig kurz K8s genannt) bereitgestellt und dazu mit NixOS einen K3s-Cluster auf Hetzner-Cloud-VMs aufgesetzt.
Bevor wir jedoch in K8s mit NixOS einsteigen, zunächst eine kurze Einführung in Kubernetes.
Warum Open edX auf Kubernetes betreiben?
Mit der wachsende Nachfrage an Online-Lernplattformen wie der Open edX Plattform suchen viele Organisationen nach einer robusten, skalierbaren Infrastruktur, um eine steigende Zahl an Nutzer:innen und komplexere Arbeitsabläufe zu unterstützen. Kubernetes hat sich als verbreitete Lösung für die Verwaltung containerisierter Anwendungen etabliert und ist damit eine naheliegende Option für den Betrieb einer Open edX-Plattform. Dieser Ansatz bringt Vorteile in Bereichen wie Skalierbarkeit, Automatisierung und Ressourcennutzung mit sich, bringt aber auch eigene Überlegungen mit, die nicht für jede Organisation passend sind. Der Einsatz von Kubernetes ist für unser Unternehmen seit Jahren eine bewährte Option, um unseren Kund:innen skalierbare Lösungen anzubieten.
Vorteile von Open edX auf Kubernetes
Skalierbarkeit: Kubernetes erleichtert es, Dienste je nach Bedarf hoch- oder herunterzuskalieren. Beim Open edX LMS, bei dem der Datenverkehr rund um Kursstarts oder Prüfungen ansteigen kann, ermöglicht Kubernetes eine reibungslose Reaktion auf solche Schwankungen.
Resilienz und hohe Verfügbarkeit: Kubernetes ist auf hohe Verfügbarkeit ausgelegt und verwaltet Ressourcen automatisch, sodass Dienste auch bei Ausfall einzelner Knoten oder Container weiterlaufen. Diese Resilienz ist für eine LMS-Plattform wichtig, die möglichst geringe Ausfallzeiten für die Nutzer:innen erfordert.
Flexibilität über Plattformen hinweg: Kubernetes bietet Flexibilität hinsichtlich des Hosting-Orts der Open edX-Plattform – von On-Premises-Hardware bis zu Cloud-Umgebungen wie Hetzner, AWS oder GCP – und ermöglicht so kosteneffiziente Hosting-Entscheidungen.
Mögliche Herausforderungen
Komplexität der Einrichtung: Kubernetes gilt als anspruchsvoll in der Einarbeitung, insbesondere für Teams, die mit Container-Orchestrierung noch wenig Erfahrung haben. Aufbau und Verwaltung von Kubernetes-Clustern bringen zusätzliche betriebliche Komplexität mit sich, die Zeit, Fachwissen und passende Werkzeuge erfordert.
Infrastruktur-Overhead: Der Betrieb von Open edX auf Kubernetes kann zusätzliche Infrastrukturebenen mit sich bringen, die für kleinere Deployments oder Organisationen ohne hohes Verkehrsaufkommen unter Umständen nicht notwendig sind.
Kosten der Cluster-Wartung: Auch wenn Kubernetes die Ressourcennutzung optimieren kann, entstehen Kosten für Verwaltung und Wartung der Cluster – vor allem für kleinere Teams ohne dedizierte DevOps-Ressourcen.
Warum Hetzner und K3s?
Hetzner Cloud ist preisgünstig und zuverlässig und eignet sich gut für diese Art von Setup. Wir haben uns für die VM-Typen CX11, CX21 und CX31 von Hetzner entschieden – klein, aber solide für den Preis.
Zur Verwaltung haben wir K3s eingesetzt – eine schlankere Variante von Kubernetes, die einfacher gehalten und ressourcenschonender ist. NixOS, das durch seinen deklarativen Ansatz überzeugt, ließ sich gut mit K3s kombinieren und erleichterte uns die Arbeit spürbar.
Bereitstellung von K3s mit NixOS
Wir haben uns für NixOS aufgrund seiner Unveränderlichkeit (Immutability) und der einfachen Konfigurationsverwaltung entschieden. Colmena half uns dabei, alle Instanzen zentral aus der Ferne zu verwalten. Zunächst haben wir die Hetzner-VMs mit nixos-infect in NixOS umgewandelt, um eine einheitliche Basis für das Deployment zu schaffen.
Der Cluster bestand aus drei Knoten – einem Server und zwei Agents. Zusätzlich betrieben wir einen Nginx-Server auf einer separaten VM zur Verkehrssteuerung, versehen mit einem Taint, damit dort keine allgemeinen Pods laufen.
Herausforderungen bei Open edX
Open edX ist ressourcenintensiv, weshalb eine sorgfältige Abstimmung wichtig war:
Persistenter Speicher: Statt MySQL, MongoDB, Redis und OpenSearch innerhalb von Kubernetes zu betreiben, haben wir dedizierte VMs genutzt. Das vereinfachte die Wartung und verbesserte die Stabilität.
Netzwerk: Alle VMs liefen in einem privaten Netzwerk, wodurch die Kommunikation zwischen den Diensten sicher und unkompliziert erfolgte.

Erkenntnisse aus dem Projekt
- NixOS + Kubernetes: Leistungsfähig, aber anspruchsvoll. Das Debugging erforderte Geduld und die Auswertung zahlreicher Logs.
- Hetzner Cloud: Preisgünstig bei guter Leistung. Die Netzwerkverwaltung erforderte etwas zusätzlichen Aufwand, der sich jedoch gelohnt hat.
- K3s: Schlank und effizient, wobei einige Abweichungen vom Standard-Kubernetes Anpassungen erforderten.
- Dedizierte Datenbanken: MySQL, MongoDB und weitere Dienste auf eigenen VMs zu betreiben, wirkte sich deutlich positiv auf Stabilität und Performance aus.
- Nginx als Ingress: Nginx auf einer eigenen VM für das Ingress-Handling zu betreiben, funktionierte gut und vereinfachte sowohl die Verkehrssteuerung als auch die SSL-Terminierung.
Fazit
Die Bereitstellung der Open edX-Plattform auf Hetzner mit Kubernetes und NixOS war anspruchsvoll, doch die Kombination mit Hetzner Cloud hat sich bewährt.
Das Setup erwies sich als zuverlässig, skalierbar und kostengünstiger als andere Optionen. Wer mit NixOS vertraut ist und Interesse an einer Kubernetes-Herausforderung hat, für den kann sich dieser Ansatz lohnen.
Preisvergleich
Die folgende Tabelle zeigt den Preisvergleich zwischen AWS, Azure und Hetzner. Zu beachten ist, dass die VM-Ressourcen nicht direkt vergleichbar sind, jedoch so nah wie möglich an einer Gegenüberstellung kommt:
