Die hybride Cloud mit Docker Swarm und Ansible, Teil 1
Eine hybride Cloud aus Windows- und Linux-Systemen kann kompliziert sein: Docker Swarm und Ansible sind jedoch zwei Tools die dabei helfen können, die Container auch über System- und Servergrenzen hinweg kontrollieren zu können.
![Die hybdride Cloud mit Docker Swarm und Ansible (Teil 1)](https://heise.cloudimg.io/width/610/q85.png-lossy-85.webp-lossy-85.foil1/_www-heise-de_/imgs/18/2/3/2/0/3/5/1/js-c0bcab2496ac4e4e.jpeg)
- Jonas Hecht
Zeitgemäße Applikationen kommen nicht mehr mit nur einem Server auf einem Betriebssystem aus: Ein Docker-Orchestrierungstool wie Docker Swarm kann helfen, die Container über Server- und Betriebssystemgrenzen hinweg im Griff zu behalten. Das DevOps-Tool Ansible übernimmt im Sinne von "Infrastructure-as-Code" die komplette Initialisierung des Docker Swarm.
Der Artikel "Docker-Windows-Container mit Ansible managen" zeigte, dass aktuelle DevOps-Tools wie Ansible gut für das Managen von Windows-Servern geeignet sind, obwohl sie ursprünglich aus dem Unix-Umfeld stammen. Anwendungen, die eine Windows-Umgebung benötigen, können mit nativen Docker-Windows-Containern ebenfalls in den Genuss der Vorteile von Docker kommen.
In der Praxis betreiben selbst entschiedene Verfechtern eines Betriebssystems meist trotzdem Instanzen des anderen, sei es nun Linux oder Windows. Beispielsweise läuft ein für Linux geschriebener Nginx am besten auf Linux, wohingegen eine Anwendung, die eine für Windows-C kompilierte Bibliothek benötigt, einen nativen Windows-Container gut vertragen kann. Oft führt das zu der Anforderung, dass ein Docker-Orchestrierungswerkzeug ein hybrides System aus nativen Windows- und Linux-Containern unterstützt, die jeweils auf Windows- und Linux-Servern laufen. Idealerweise fügen die Tools alle "beweglichen Teile" zu einem Ganzen zusammen, beispielsweise indem ein einziger Befehl alle notwendigen Schritte automatisiert laufen lässt. Denn am Ende generiert die Applikation erst in ihrer Gesamtheit den vollen Geschäftswert.
Docker Swarm
Der Orchestrierung von Docker-Containern über Servergrenzen hinweg widmet sich mittlerweile zahlreiche Werkzeuge. Zwei populäre Vertreter sind Kubernetes und Docker Swarm. Ersteres kann sich aktuell vor Popularität kaum retten und bietet vor allem in großen Installationen viele Vorteile. Trotzdem fokussiert sich der vorliegende Artikel auf den "neuen" Docker Swarm mode, der minimal Docker 1.12.0 voraussetzt und direkt in die Docker-Engine integriert ist (nicht zu verwechseln ist er mit dem älteren Stand-Alone Docker Swarm).
Dem Fokus auf Docker Swarm liegt eine Empfehlung zugrunde: Häufig gibt es den Eindruck, dass die Nutzung von Kubernetes nach der Docker-Einführung Pflicht ist. Allerdings können ein paar Schritte vorab dem Lern- und Projekterfolg zuträglich sein können. Nach dem Start mit Docker sollten Entwickler zuerst Docker Compose in Betracht ziehen. Vor allem in Zusammenarbeit mit einem guten Provisionierungswerkzeug wie Ansible lassen sich damit viele Anforderungen abbilden – unter anderem erleichtern die Docker Compose Services das Skalieren von Containern, und die Datei docker-compose.yml ermöglicht das Ausführen der gesamten Applikation mit dem Befehl docker-compose up.
Sobald sich Docker-Container auf mehrere Server verteilen, ist die Nutzung von Docker Swarm mode sinnvoll. Da Swarm auf den bekannten Docker-Konzepten aufbaut, gelingt der Start schnell. Selbst das praktische docker-compose.yml findet bei einem Docker Stack (die Bezeichnung einer aus mehreren Containern bestehenden Anwendung in Docker Swarm) weitere Verwendung. Sollten noch weitergehende Anforderungen auftauchen, die Docker Swarm nicht mehr abdeckt, ist der Einsatz von Kubernetes sinnvoll. Erst dann lohnt es sich, die anspruchsvolle Lernkurve von Kubernetes zu bezwingen, denn es ist äußerst komplex und kann teilweise gerade erlernte Docker-Konzepte ersetzen. Besonders nach einer hart erkämpften Docker-Einführung inklusive der nicht zu unterschätzenden Dockerisierung von Legacy-Anwendungen kann es zu langen Gesichtern führen, wenn Kubernetes alles über den Haufen wirft.
Nicht zuletzt ist der Aufbau eines hybriden Docker-Container-Clusters mit nativen Windows- und Linux-Containern mit den aktuell für jedermann verfügbaren Versionen des Windows Server 2016 (siehe dazu den Artikel "Docker-Windows- Container mit Ansible managen" nicht sinnvoll mit Kubernetes umsetzbar. Die Kubernetes-Unterstützung des aktuellen Windows Server 2016 ist noch zu rudimentär. Nur für Kunden, die im Rahmen des Zusatz-Lizenzpakets Software Assurance für Volumenlizenzierung in den Genuss der neuen halbjährlichen Updates von Windows Server 2016 kommen, könnte sich das bald ändern. Die halbjährlichen Updates verteilt Microsoft über den sogenannten Semi-annual Channel. Die Aktualisierung auf Version 1709 bringt die benötigten Networking-Features für einen Kubernetes-Betrieb mit. Allen anderen steht für hybride Cluster mit nativen Windows- und Linux-Containern zurzeit ausschließlich Docker Swarm zur Verfügung.