Windows Server 2019 bietet zahlreiche neue Funktionen für Container und unterstützt nun auch eine Integration mit der Orchestrierungslösung Kubernetes. Der erweiterte Linux-Support soll ebenfalls dazu beitragen, WS2019 als Containerplattform zu etablieren. LANline hat sich die neuen Funktionen auch unter diesem Aspekt genauer angeschaut.

Die Bereitstellung von Anwendungen auf Basis von Containern erfreut sich steigender Beliebtheit, wobei derartige Lösungen bislang meist auf Linux-Servern laufen. Container kapseln die Betriebssystemumgebung, die für die Ausführung einer Applikation nötig ist. Damit können zum Beispiel Anwendungen, die unterschiedliche Java- oder .NET-Versionen benötigen, auf demselben Host-System konfliktfrei in verschiedenen Containern laufen. Da Container sehr schlank sind, ist zudem eine hohe Dichte pro Server möglich. Microsofts Server-Betriebssystem unterstützt bereits seit Windows Server 2016 (WS2016) den Betrieb von Containern. Der Anwender kann dabei sowohl Docker-Container als auch die Hyper-V-Variante einsetzen, bei der ein Container in einer schlanken VM läuft. Linux-Container lassen sich bei WS2016 mit einer Standard-Linux-VM bereitstellen, in der die Docker-Engine und die zugehörigen Services installiert sind. In WS2019 hat Microsoft den Support für Linux-Container und die Funktionen für Containerbereitstellung und -Management deutlich erweitert. Neben der Option, mehrere Container in einer Standard-Linux-VM laufen zu lassen, unterstützt WS2019 nun auch Linux-Container mit Hyper-V-Isolation (Linux Container on Windows, LCOW). Dabei erhält jeder Container eine eigene schlanke Linux-VM, verwaltet über die Docker-Dienste des Windows-Hosts.

Um das Management von Linux-Containern zu verbessern, hat Microsoft zudem das Windows Subsystem for Linux (WSL) ausgebaut. Entwickler können mit WS2019 in einer Linux-Shell nun Standard-Linux-Tools wie OpenSSH, Curl und Tar nutzen. Zudem stehen die Linux-Container-Tools runc, containerd und cri jetzt auch in einer Windows-Variante zur Verfügung. Während für die Containerorchestrierung von Windows- und Linux-Clustern bisher nur Docker Swarm erhältlich war, bietet das von WS2019 unterstützte Docker Enterprise 2.1 mittlerweile die freie Auswahl zwischen Swarm und Kubernetes innerhalb desselben Clusters. Ebenfalls neu in WS2019 ist die Unterstützung von Red Hats Kubernetes-Plattform OpenShift. Da sich Kubernetes zum De-facto-Standard der Containerorchestrierung entwickelt hat, konzentriert sich dieser Beitrag vor allem auf diese Technik und die Integration in WS2019. Microsoft stellt Kubernetes auch als Managed Service auf Azure zur Verfügung, worauf wir am Ende dieses Artikels eingehen.

Das Windows Subsystem for Linux (WSL) unterstützt die Installation einer Linux-Distribution unter Windows.

Containerbetrieb mit Kubernetes

Bei Kubernetes handelt es sich um ein Orchestrierungs-Framework, das aus mehreren Softwarekomponenten besteht, die man auf virtuellen oder physischen Servern installiert. Eine gängige Plattform für Kubernetes ist Ubuntu Linux. Kubernetes eignet sich zum Beispiel gut für die Bereitstellung von Micro-Services-Anwendungen. Die Steuerung aller Aktionen erfolgt über ein Master-System oder mehrere Master-Systeme. Die Container-Work-loads laufen auf den Nodes eines Clusters, die man auch als Minions bezeichnet. Kubernetes verwendet für die Bereitstellung von Containern sogenannte Pods. Ein Pod kann mehrere Container enthalten, die immer alle auf demselben Host laufen. Das Pod-Konzept bietet hohe Flexibilität bei der Bereitstellung von Anwendungen und kann die Abhängigkeiten zwischen Containern gut abbilden.

Das wichtigste Werkzeug, um einen Kubernetes-Cluster zu steuern, ist das Kommandozeilen-Tool kubectl. Damit kann der Administrator unter anderem Services und Pods konfigurieren, Netzwerkeinstellungen anpassen, Skalierungsautomatismen erstellen oder über Affinity- und Anti-Affinity-Regeln vorgeben, welche Workloads auf welchen Nodes laufen sollen. Die automatische Ausführung von Aufgaben lässt sich über Scheduler steuern. Updates der Anwendungen und des Kuber-netes-Clusters sind unterbrechungsfrei möglich.

Zu den wichtigsten Neuerungen von WS2019 für die Integration mit Kubernetes zählen die Netzwerkfunktionen. Neue CNI-Plug-ins (Container Networking Interface) ermöglichen den Betrieb von gemischten Kubernetes-Clustern mit Windows- und Linux-basierten Worker-Nodes. WS2019 unterstützt die von Kubernetes genutzten Netzwerkfunktionen inklusive des ursprünglich von CoreOS entwickelten Flannel-CNIs für das IP-Routing zwischen Containern und externen Systemen. Kubernetes kann Container-Pods automatisiert erstellen und überwacht die darauf laufenden Services. Wenn der Administrator eine Pod-Replikation konfiguriert, startet Kubernetes automatisch einen neuen Pod, sobald ein Service nicht mehr funktioniert.

Durch die Integration von Windows mit Kubernetes können in gemischten Umgebungen die auf Containern laufenden Windows- und Linux-Services direkt miteinander kommunizieren. Auf Windows-Nodes lassen sich einige Kubernetes-Prozesse wie flanneld.exe, kubelet.exe oder kube-proxy.exe auch als Windows-Service konfigurieren. Für die Sicherheit von Containerumgebungen kooperiert Microsoft mit dem Spezialisten Tigera. Dessen Lösung Calico wird unter WS2019 nutzbar sein. Calico stellt Netzwerkrichtlinien bereit, um Container zu isolieren und den Datenverkehr zu kontrollieren. Das Calico CNI für Windows soll demnächst dynamisches Routing mit BGP (Border Gateway Protocol) und ein IP-Address-Management (IPAM) erhalten.

Mit WS2019 lassen sich Windows- und Linux-Container-Hosts über denselben Kubernetes-Cluster verwalten.

Kubernetes und WS2019 im Test

Für den LANline-Test richteten wir zwei neue VMs unter Ubuntu 18.04 ein und installierten auf beiden Servern die Kubernetes- und Docker-Basiskomponenten. Dann konfigurierten wir eine VM als Kubernetes-Master und das zweite Linux-System als Worker-Node. Die Windows-Integration testeten wir mit einer WS2019-VM, die wir als weiteren Worker-Node zum Kubernetes-Cluster hinzufügten. Um einen Master-Node zu erstellen, lädt man im ersten Schritt die benötigten Dateien aus dem Internet und installiert sie auf dem Linux-System. Vor dem Start des Kubernetes-Setups ist die Swap-Funktion von Linux zu deaktivieren. Im zweiten Schritt initialisiert man den Master mit dem Befehl sudo kubeadm init.

Die Setup-Konsole zeigt zum Abschluss die Befehle an, mit denen der Cluster gestartet wird, wie sich das von Kubernetes benötigte Netzwerk einrichten lässt und mit welchem Kommando und welchen Zertifikatsinformationen neue Worker-Nodes hinzugefügt werden. Das Netzwerk lässt sich im VXLAN- (Virtual Extensible LAN) oder im Host-Gateway-Modus betreiben. Alternativ ist auch eine Netzkonfiguration mit ToR-Switches (Top of the Rack) möglich. Wir richteten ein Flannel-Pod-Netzwerk im Host-Gateway-Modus ein. Nachdem der Master betriebsbereit war, konnten wir die Linux-Worker-VM zum Kubernetes-Cluster hinzufügen.

Windows-Node im Kubernetes-Cluster

Im nächsten Schritt bereiteten wir die WS2019-VM für den Kubernetes-Cluster vor. Zunächst installierten wir auf dem Server das Windows-Container-Feature und aktivierten dann per PowerShell (PS) die Docker-Funktionen. Das PS-Cmdlet Install-Module lädt zunächst die aktuellen Docker-Dateien aus dem Internet. Dann wird die Container-Software mit dem Cmdlet Install-Package installiert. Zum Abschluss testeten wir die korrekte Funktionalität von Docker mit dem Befehl docker container run hello-world:nanoserver. Damit holte sich die WS2019-VM aus dem Internet automatisch das aktuelle WS2019-Nano-Server-Image, startete einen Container und zeigte im PS-Fenster „Hello from Docker!“ an. Um einen Windows-Container-Host in einen Kubernetes-Cluster aufzunehmen, muss der Administrator auf dem Master-Server die Konfigurationsdatei für die Netzwerkkommunikation kube-flannel.yml überprüfen und gegebenenfalls anpassen. Kommt Flannel im VXLAN-Modus zum Einsatz, ist der VNI-Parameter (VXLAN Network Identifier) auf den Wert 4096 und den Port 4789 zu setzen. Beim Host-Gateway-Modus ist nur die Zeile mit dem Parametertyp von vxlan auf host-gw zu ändern.

Auf dem Windows-Node ist ein sogenanntes Pause-Image des Nano-Servers nötig, mit dem Kubernetes die Infrastruktur-Pods vorbereitet. Wir luden das aktuelle Image von Microsoft herunter, gaben ihm den Namenszusatz :latest und starteten es dann. Im nächsten Schritt erstellten wir in der Windows-VM ein Verzeichnis für Kubernetes, um hier die benötigten Binaries, Skripte und Konfigurationsdateien zu speichern. Nun kopierten wir die Config-Datei mit den Zertifikatsinformationen vom Master in diesen Ordner und luden die Kubernetes-Programmdateien kubectl, kubelet und kube-proxy aus dem Internet.

Microsofts Azure Kubernetes Services ermöglichen einen schnellen Einstieg in die Containerorchestrierung.

Um Windows-Nodes zu einem Cluster hinzuzufügen, stellt Microsoft ein PS-Start-Skript zur Verfügung, das alle erforderlichen Dateien und Installationskripte automatisch aus dem Internet herunterlädt und zum Cluster hinzufügt. Nachdem wir diesen Prozess gestartet hatten, erschien in der PS-Konsole eine Fehlermeldung, das Netzwerk lasse sich nicht erfolgreich einrichten. Das Skript gab zusätzlich den Hinweis, dass der Pod-CIDR (Classless Inter-Domain Routing) nicht zugewiesen werden konnte. Die Fehlersuche ergab, dass in der Konfigurationsdatei kube-controller-manager.yaml zwei CIDR-Kommandozeilen für den Cluster und die Worker-Nodes fehlten. Nachdem wir diese Befehle ergänzt hatten, ließ sich die WS2019-VM erfolgreich zum Cluster hinzufügen. Um die korrekte Funktionsweise des Windows-Nodes zu testen, konfigurierten wir auf dem Kubernetes-Master ein Deployment für einen Container-Web-Server-Service, das von Kubernetes auf dem Windows-Node erfolgreich eingerichtet wurde. Nach wenigen Minuten liefen auf der Windows-VM in einem neuen Pod zwei Container mit dem Windows-Web-Server-Service.

Verwaltung von Kubernetes

Wie erwähnt hat Microsoft bei WS2019 den Linux-Support ausgebaut, unter anderem um Linux-Systeme von Windows aus verwalten zu können. Sobald das WSL-Feature installiert ist, lassen sich Standard-Linux-Tools wie OpenSSH, Curl oder Tar direkt mit dem Windows-Command-Prompt oder der PS-Kommandozeile nutzen. Zudem kann der Administrator auf seinem Windows-System eine spezielle Linux-WSL-Distribution installieren. Für den LANline-Test wählten wir Ubuntu 18.04. Alternativ stehen auch SuSE, Debian und Kali Linux zur Verfügung. Nachdem wir das Paket entpackt hatten, führten wir den Ubuntu-Installer aus. Nun konnten wir auf dem Windows-Server eine Ubuntu-Konsole starten, mit der sich der komplette Linux-Befehlssatz nutzen lässt. Installiert der Administrator auf der Linux-Konsole kubectl, kann er von seinem Windows-Rechner aus auch Kubernetes-Cluster verwalten.

Eine sehr einfache Möglichkeit, mit Kubernetes erste Erfahrungen zu sammeln, bieten die von Microsoft angebotenen Azure Kubernetes Services (AKS). Microsoft stellt einen Kubernetes-Cluster bereit, der im Hintergrund läuft und für die Orchestrierung von Containern bereitsteht. Der Anwender zahlt bei AKS nur für die Worker-Nodes, auf denen die Container-Pods laufen. Microsoft kümmert sich um die Kubernetes-Backend-Infrastruktur und aktualisiert regelmäßig die Master- und Worker-Nodes. Auf Azure ist auch ein Azure Container Service (ACS) verfügbar, der sich mit Kubernetes, Docker Swarm oder Mesosphere DC/OS nutzen lässt. Bei dieser Variante muss der Anwender die Konfiguration großteils selbst durchführen. Für den LANline-Test richteten wir einen neuen Azure Kubernetes Service mit einem Master- und einem Worker-Node ein. Dazu nutzen wir ein vorhandenes Azure-Konto, das bereits über das für AKS benötigte Service-Prin­icipal-Profil verfügte. Zu beachten ist, dass sich die Rechenressourcen der Worker-VMs nicht mehr nachträglich ändern lassen. Es ist aber jederzeit möglich, Nodes hinzuzufügen oder zu entfernen. Die Konfiguration des neuen Kubernetes-Clusters war in wenigen Minuten abgeschlossen. Bei den meisten Settings konnten wir die Voreinstellungen übernehmen.

Fazit

Durch die Integration von WS2019 mit der Kubernetes-Orchestrierungsplattform lassen sich Windows- und Linux-Container-Hosts in demselben Kubernetes-Cluster betreiben. Der in WS2019 weiter ausgebaute Support für Linux soll Windows als Plattform für die bislang stark von Linux dominierte Containerwelt stärken. Die Gesamtlösung setzt sich aus Softwarelösungen verschiedener Anbieter und Open-Source-Komponenten zusammen. Deshalb sind für einen reibungslosen Betrieb fachkundige Administratoren erforderlich, die sich um die fortlaufend nötigen Aktualisierungen kümmern. Die Kubernetes-Plattform eignet sich deshalb am ehesten für Unternehmen, die einen Dev­Ops-Ansatz mit schnellen Entwicklungszyklen der Anwendungen verfolgen. Den einfachsten Einstieg in die Kubernetes-Welt bieten Microsofts Azure Kubernetes Services.

Christoph Lange.