Die Umstellung auf Microservices hat allerdings Nebeneffekte: Neue Services entstehen deutlich häufiger, und die Infrastruktur, um diese auszurollen und zu betreiben, muss jeweils neu bereitgestellt werden. In einer überwiegend hostbasierten Umgebung bleibt das trotz Virtualisierung oft teilweise eine manuelle Aufgabe. Auch die Verwaltung und Wartung der zusätzlichen Systeme erfordert bei aller Automatisierung weiterhin einen gewissen Arbeitsaufwand.
Docker als Antwort auf die neue Microservice-Dynamik
Der initiale Erfolg von CI/CD kann also zu einer Überforderung der Betriebsorganisation führen. Um diese Herausforderung zu adressieren, sind weitere Innovationen erforderlich. In diesem Fall ist die Container-Technik Docker das entscheidende Element. Docker ermöglicht es, die Applikationen – insbesondere Microservices – einschließlich aller Abhängigkeiten in ein in sich geschlossenes Paket zu bündeln. Dieses kann dann auf einem minimal ausgestatteten Host-System laufen. Zudem können viele Container parallel dort ausgeführt werden, während eine stringente Ressourcenzuteilung dafür sorgt, dass diese sich gegenseitig nicht beeinflussen.

Klassische hostbasierte Systeme müssen individuell konfiguriert werden. Container ermöglichen es, verschiedene Applikationen sicher auf einem Host zu betreiben und vereinfachen so die Verwaltung der Systeme, während deren Auslastung verbessert wird.
Damit erleichtert Docker die Verwaltung der Hosts, die nun in großer Zahl mit identischer Konfiguration bereitgestellt werden können. Die Abstimmung auf Applikationsabhängigkeiten entfällt komplett.
Einige Aspekte sind damit allerdings noch ungelöst: Wie überwacht man die große Zahl kleiner Container? Wie erkennt und behebt man Probleme? Wie werden Container zur Steigerung von Resilienz oder Verarbeitungskapazität auf mehreren Hosts installiert und miteinander verknüpft?
Bühne frei für Kubernetes
Diese Fragen müssen effizient und mit einem hohen Automatisierungsgrad gelöst werden. Ein geeignetes Orchestrierungs-Werkzeug muss ausgewählt und zum Einsatz gebracht werden. Inzwischen ist Kubernetes der Standard dafür. Ursprünglich von Google initiiert und 2014 veröffentlicht, ist es heute eines der größten und aktivsten Open-Source-Projekte überhaupt. Viele Unternehmen aus dem Cloud-Umfeld tragen intensiv dazu bei und bringen so einen enormen Wissens- und Erfahrungsschatz ein.
Mit Kubernetes steht ein System zur Verfügung, das kaum Wünsche offenlässt: Die Architektur ist sehr gut skalierbar, sodass Cluster von wenigen Servern bis hin zu einigen Tausend Systemen unterstützt werden. Gleiches gilt für die Workloads, die darauf ausgeführt werden. Auch Resilienz und Redundanz lassen sich fast beliebig gestalten, wodurch hoch- und höchstverfügbare Cluster leicht umzusetzen sind. Davon machen WEB.DE und GMX intensiv Gebrauch – und erreichen dadurch Systemverfügbarkeiten oberhalb von 99,99%.
Die Orchestrierung für die laufenden Workloads (Applikationen) ist dank Kubernetes ebenfalls auf höchstem Niveau: Entsprechend der Konfiguration werden mehrere Replikate der Applikationen bereitgestellt, und eingehende Anfragen werden automatisch darauf verteilt. Auch die automatische Skalierung anhand verschiedener Metriken gehört zum Funktionsumfang.

Everything as Code: CI/CD und Kubernetes
Aus Sicht der CI/CD-Umgebung ist hervorzuheben, dass Applikationen in Kubernetes über YAML-Dateien konfiguriert werden, die die Pipelines einer API (Schnittstelle) übergeben. Kubernetes setzt die angeforderte Spezifikation anschließend automatisch um.
Damit entfallen aus Nutzersicht vor allem die Provisionierung von Systemen und anderen Ressourcen sowie deren Pflege. Erforderliche Änderungen lassen sich leicht durch Bearbeitung der YAML-Dateien vornehmen. Diese wiederum können zusammen mit allen erforderlichen Daten und Konfigurationen sowie dem Code für die Pipelines in einem Git-Repository versioniert verwaltet werden. Kurz: “everything-as-code“ – perfekt für ein CI/CD-Setup (siehe den ersten Blog-Beitrag dieser Serie).

Durch CI/CD und Kuberentes ist es jeweils möglich, etwa 10 Mal so oft Änderungen an unserer Software vorzunehmen.
Von Pilot zu Plattformstandard: Kubernetes übernimmt den Betrieb
Seit der Einführung von Kubernetes bei WEB.DE und GMX hat sich eine klare Erfolgsgeschichte entwickelt. Anfang 2017 liefen nur wenige Dienste auf Kubernetes, und die Cluster waren noch vergleichsweise überschaubar dimensioniert.
Inzwischen laufen mehrere Hundert Applikationen in über einem Duzend Kubernetes-Clustern, die verschiedene Umgebungen (wie Test und Produktion) abdecken und über mehrere redundante Rechenzentren verteilt sind. Insgesamt werden dort über zwei Drittel der gesamten Applikationslandschaft betrieben – Tendenz weiter steigend. Damit schafft die Kombination von CI/CD mit Kubernetes die Grundlage für kurze Entwicklungszyklen und eine hohe Innovationsdynamik in unseren Produkten.

Dr. David Meder-Marouelli ist Experte für Continuous Delivery bei GMX und WEB.DE. Er ist Product Owner der Developer Platform, die eine standardisierte und automatisierte Softwareauslieferung ermöglicht.
Teil 1 der Beitragsserie: Automatisiert und standardisiert – die CI/CD-Plattform von GMX und WEB.DE