Suche Grau Suche

Komplexe Anwendungen koordinieren mit Kubernetes

Software hochverfügbar, hochskalierbar, hochsicher in der Cloud betreiben

Kubernetes-Workflow

Für größtmögliche Flexibilität, Stabilität und Performance werden Software-Anwendungen heute als plattformunabhängige, virtualisierte Container eingesetzt. So nutzt Auctores für seine Microservices-Architektur die Open-Source-Software Docker. Die größte Herausforderung dabei ist die – möglichst automatisierte – Verwaltung der Systeme: Wie können diese Container koordiniert und terminiert werden? Wie kommunizieren die einzelnen Container miteinander? Wie lassen sie sich an den jeweils aktuellen Leistungsbedarf anpassen? Die Lösung dafür heißt Kubernetes.

Kubernetes ist ein ursprünglich von Google entwickeltes Open-Source-System, mit dem sich Container-Anwendungen auf verteilten Systemen einspielen, skalieren und warten lassen. Auctores setzt für diese Container Orchestration auf Kubernetes, da es Docker unterstützt und gerade bei komplexen Anwendungen in großem und sehr großem Maßstab Vorteile gegenüber dem ähnlich funktionierenden Docker Swarm bietet.

Damit kann Auctores hochverfügbare, hochskalierbare und hochsichere Anwendungen in der Cloud betreiben. Dabei unterstützt Kubernetes einen Continuous-Integration- und Continuous-Delivery-Workflow, der Voraussetzung für maximale Umsetzungsgeschwindigkeit und Softwarequalität ist. Kubernetes ergänzt so die von Auctores eingesetzten Komponenten für die Software-Entwicklung ideal. Zuverlässigkeit und Flexibilität sind große Pluspunkte von Kubernetes.

Vorteile für Entwickler und Anwender

Container und Clusterlösungen sind nicht nur die Grundlage für den Aufbau einer cloudbasierten Infrastruktur, sondern kommen auch den immer agiler werdenden Anforderungen an Entwicklung und Betrieb entgegen. In der modernen Software-Entwicklung sind Anwendungen keine monolithischen Programme mehr, sondern bestehen aus vielen miteinander verknüpften Komponenten, die in Containern enthalten sind.

Damit eine Anwendung funktioniert, ist also mehr erforderlich, als einfach einen Container zu starten oder stoppen. Es gilt auch, das Zusammenwirken aller benötigten Container zu steuern. Schon innerhalb eines einzelnen Netzes teilen sich Container Ressourcen wie etwa CPU und Arbeitsspeicher. Läuft eine Anwendung in der Cloud, erhöht sich die Komplexität beträchtlich. Diese Organisation der Komponenten erfolgt über Container Orchestration (auch: Container-Orchestrierung). Darüber hinaus umfasst die Orchestrierung Monitoring, Alerting und Versionsverwaltung.

Sobald damit eine große Zahl von Containern verwaltet wird, sind entsprechende Management-Tools nötig. Kubernetes ist dafür innerhalb eines eigenen Rechner-Netzwerkes ebenso wie in einer Unternehmens-Cloud oder auf Cloud-Diensten externer Anbieter einsetzbar. Dies erlaubt das schnelle Ausrollen von Software und Updates, erleichtert die Skalierung von Anwendungen und sorgt dafür, dass die Unterschiede zwischen Entwicklungs- und Produktiv-Umgebungen nicht zu groß werden und Anwendungen flächendeckend aktuell bleiben.

Kubernetes bietet sich für den Einsatz im Unternehmensumfeld aus einem weiteren Grund an: Auch wenn die Software Open Source ist, hat Google als Initiator einen scharfen Blick auf ihre Weiterentwicklung. Deshalb gibt es nicht nur eine klare Roadmap, sondern auch verlässliche Update- und Release-Zyklen und Bugfixes.

Kubernetes erklärt

Für automatisches Deployment und Skalierung fasst Kubernetes Container in logische Teile zusammen, die innerhalb eines Kubernetes-Clusters über eine hierarchische Struktur verwaltet werden. Diese setzt sich zusammen aus:

  • Master Node
    Die Master Nodes bilden das Kontrollzentrum eines Clusters, das über REST-Schnittstelle mit seinen untergeordneten Worker Nodes kommuniziert. Auf ihnen laufen eine zentrale Datenbank für die Konfiguration des Clusters sowie ein Controller-Manager und ein Scheduler. Der Controller Manager überwacht alle Prozesse und steuert die Auslastung der Worker Nodes. Der Scheduler entscheidet abhängig von der Auslastung, auf welchem System im Cluster ein Pod gestartet wird.
  • Worker Node
    In den Worker Nodes eines Kubernetes-Clusters laufen die Software-Anwendungen. Ein Worker Node umfasst Services, Pods, Labels und Replication-Controller. Nodes können echte, physische Rechner, aber auch virtuelle Maschinen sein.
  • Service
    Services stellen die Netzwerkverbindung zu einer Gruppe von Containern sicher und fungiert als Loadbalancer, der sich selbst laufend aktualisiert im Hinblick darauf, welche Pods aktuell verfügbar und welche ausgelastet sind. Dadurch lassen sich die Container-Strukturen einfach halten und mit Hilfe der Labels logische Verknüpfungen und Funktionen steuern.
  • Pod
    Pods sind die kleinsten Einheiten, die sich mit Kubernetes deployen lassen. In ihnen befindet sich mindestens ein Docker-Container, wobei die Zahl der in einem Pod laufenden Container anwendungsbezogen variiert. Pods fassen Container zusammen, die auf einem Node laufen und sich dessen Ressourcen teilen.
  • Replication-Controller
    Der Replication-Controller sichert übergreifend die Verfügbarkeit der Pods und damit der in ihnen laufenden Anwendungen. Er stellt sicher, dass ein Pod oder eine festgelegte Anzahl gleichartiger Instanzen (Replicas) des Pods aktiv sind und genutzt werden können. Dies bedeutet maximale Ausfallsicherheit.
  • Deployment
    Die Deployments kontrollieren die Replication-Controller. Sie sorgen dafür, dass ein Update der Pods nahezu ohne Offline-Zeit eingespielt werden kann. Das Update einer Anwendung ist damit mit minimaler Downtime möglich.

Sicher in der Cloud

Kubernetes ermöglicht es, dass sich Anwendungen gemeinsame Ressourcen teilen und dennoch von anderen Prozessen und dem Hostsystem isoliert sind, auf dem sie laufen. Die Network Policies gehen dabei über die Docker-immanente Separation hinaus. Role Based Access Control (RBAC) erlaubt die Isolation von Usern, Containern und Services und damit auch den Aufbau mandantenfähiger Cluster, in denen mehrere Kunden im gleichen System arbeiten können, ohne dass diese Einblick in Daten, Benutzerverwaltung etc. der anderen Kunden haben.

Für den erfolgreichen Aufbau einer mandantenfähigen Architektur und wartbarer und stabiler Applikationen müssen tragfähige Konzepte und entsprechende Pattern entwickelt werden. Nach einer ausführlichen Erprobungsphase ist Kubernetes inzwischen bei Kundenprojekten von Auctores im Einsatz.