Containerisierung erfordert ab einer gewissen Größenordnung auch Automatisierung im Betrieb - Unterstützung bietet die Container-Orchestrierung. Kubernetes ist der de facto Standard in diesem Bereich, sehr leistungsfähig und reif für den produktiven Einsatz - bringt aber auch eigene Komplexität sowie eine steile Lernkurve mit sich und erfordert Veränderungen in Anwendungsarchitektur und Betrieb.

Automatisierung
Die Container-Orchestrierungswerkzeuge können nahezu alle Aspekte des Anwendungs- und Infrastrukturmanagements automatisieren und erleichtern somit das Management und den Betrieb komplexer Systeme: von der erstmaligen Verteilung der Container auf die verfügbaren Nodes, der Einrichtung der benötigten Netzwerkinfrastruktur (Software Defined Networking), über die Einsatzplanung der Containerinstanzen nach definierbaren Kriterien (Scheduling), bis hin zu Betriebsaktivitäten wie unterbrechungsfreie Rollouts. Sämtlicher Metriken, die Funktionsfähigkeit, Gesundheit und Auslastung der einzelnen Container-Instanzen werden vom System kontinuierlich überwacht. Aktive Komponenten gleichen die ermittelten Werte mit den gewünschten Anwendungsparametern ab und handeln nach festgelegten Plänen um automatische Selbstheilung, Skalierung und Hochverfügbarkeit zu ermöglichen.

Deklarative Konfiguration
Orchestrierungs-Werkzeuge bieten DevOps-Teams die Möglichkeit, die Blaupause für einen Anwendungs-Workload und dessen Konfiguration in einem Standardschema zu deklarieren, wobei typischerweise JSON oder YAML verwendet wird.
Diese Deklaration enthält eine Beschreibung der Workload, z.B. das Container-Image und dessen Konfiguration, die verwendeten Netzwerk-Ports, benötigter persistenter Speicher (Volumes), Abhängigkeiten zu anderen Services im Cluster, die gewünschte Anzahl von parallel laufenden Container-Instanzen sowie Meta-Informationen, die für die Gruppierung von Containern oder Referenzierung verwendet werden können. Mit der Blaupause können auf verschiedenen Umgebungen reproduzierbare Ergebnisse erzielt werden. Außerdem können unterschiedlich parametrisierte Konfigurationen für dieselbe Anwendung während der verschiedenen Entwicklungs-, Test- und Produktionsstadien für verschiedene Zielumgebungen verwendet werden.

Scheduling von Containern
Für Workloads gelten häufig besondere Regeln und Anforderungen für Platzierung auf den verfügbaren Maschinen im Cluster um die optimale Performance und Hochverfügbarkeit zu erreichen. Beispielsweise muss darauf geachtet werden, den Master- und den Slave-Datenbankcontainer nicht auf demselben Host bereitzustellen. Dagegen ist es unbedingt empfehlenswert, den In-Memory-Cache zusammen mit dem Webserver zu platzieren. Orchestrierungswerkzeuge unterstützen Mechanismen zur Definition der Affinitätsregeln und der Einschränkungen für die Platzierung von Containern.
Beim Scheduling handelt es sich um das Ermitteln der optimalen Platzierung von Containern innerhalb des Clusters, d.h. die Auswahl einer Menge an geeigneten Hosts basierend auf den Affinitätsregeln, und das konkrete Zuweisen zu den Maschinen.

Service-Discovery & Kommunikation zwischen Containern
Der Container-Orchestrator muss dafür sorgen, dass Container Kommunikationsbeziehungen zu anderen Containern herstellen können. Beispielsweise müssen Applikations-Backendservices die Datenbankservices dynamisch ermitteln, Web-Services sollten sich bei Load-Balancern registrieren bzw. von diesen entdeckt werden können. Orchestrierungstools stellen einen verteilten Schlüsselwertspeicher (Key-Value-Store), einen schlanken DNS oder einen anderen Mechanismus zum Auffinden von Containern bereit oder erwarten diesen von der Umgebung.

Automatisierter Betrieb
Da Orchestrierungs-Tools die gewünschte Konfiguration des Systems kennen, können sie den Zustand der Container und Hosts des Systems überwachen, Abweichungen erkennen und entsprechende Aktionen auslösen. Im Falle eines Ausfalls eines Nodes können die Tools den Container auf einen anderen Host verschieben. Wenn der Health-Check eines Containers fehlschlägt, können Orchestrierungswerkzeuge Ersatz starten und den Container beenden. Während Lastspitzen kann die Auslastung der Container-Instanzen vom Orchestrator unter einem konfigurierten Niveau gehalten werden, indem automatisch weitere Instanzen gestartet werden (auto-scale) und in die Lastverteilung aufgenommen werden. Orchestrierungs-Tools stellen sicher, dass die Bereitstellung immer mit dem vom Entwickler oder Operator angegebenen gewünschten Status übereinstimmt, auch z.B. die Anzahl der angeforderten Instanzen des Containers oder eine dynamische Skalierung innerhalb des konfigurierten Umfangs.

Lesen Sie mehr zum Thema im dritte Teil unserer Reihe "Containerorchestrierung mit Kubernetes"