Dmitry Nikolaev - stock.adobe.co

Windows-Server mit Kubernetes an Linux-Cluster anbinden

Container-Hosts mit Windows Server 2019 können an ein mit Kubernetes verwaltetes Linux-Cluster angebunden und zentral verwaltet werden. In diesem Artikel zeigen wir, wie das geht.

Wenn ein Kubernetes-Cluster mit Linux-Container-Hosts im Einsatz ist, lassen sich jederzeit weitere Knoten, auch Windows-Knoten hinzufügen. Der Vorteil dabei liegt auf der Hand: Wer im Netzwerk zwar auf Kubernetes und Linux setzt, aber für bestimmte Funktionen auch Windows Server 2019 zum Einsatz bringen will, kann die Windows-Server mit Docker Enterprise Edition an Kubernetes anbinden. Die Verwaltung erfolgt auch hier mit der Weboberfläche von Kubernetes oder mit Tools wie kubectl.

Für die Integration eines Windows-Servers an Kubernetes ist einiges an Wissen im Bereich Kubernetes und Linux notwendig, sowie zur Verwaltung von Windows.

Kubernetes-Cluster für Windows Server 2019 vorbereiten

Damit ein Server mit Windows Server 2019 in einen Kubernetes-Cluster aufgenommen werden kann, müssen Sie den Cluster für Windows vorbereiten. Die Netzwerkanbindung in einem Kubernetes-Cluster muss dafür kompatibel mit Windows sein. Hier wird häufig auf Flannel gesetzt. Die Integration in Linux starten Sie in diesem Fall mit:

wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

Microsoft beschreibt die Vorgehensweise auf der Seite Network Solutions.

Natürlich muss auch der Windows-Server für den Betrieb im Kubernetes-Cluster vorbereitet werden. Wichtig ist hier zunächst, dass Docker installiert und einsatzbereit ist. Das setzt den Betrieb eines Container-Hosts mit Windows Server 2019 voraus. Vor der Integration des Servers in das Kubernetes-Cluster benötigen Sie ein Image auf dem Container-Host, das mit Kubernetes die notwendigen Infrastruktur-Pods erstellt. Das Image markieren Sie am besten als latest. Die Vorgehensweise dazu ist:

docker pull mcr.microsoft.com/windows/nanoserver:1809

docker tag mcr.microsoft.com/windows/nanoserver:1809 microsoft/nanoserver:latest

Vor der Integration können Sie den Container starten, um zu überprüfen, ob er für Kubernetes einsatzbereit ist:

docker run microsoft/nanoserver:latest

Kubernetes in Windows integrieren

Vor der Integration eines Windows-Servers in Kubernetes wird auf dem Server zunächst Kubernetes installiert und eingerichtet. So können Sie zum Beispiel vor der Integration überprüfen, ob die Kubernetes-Tools auf dem Server mit dem Kubernetes-Cluster kommunizieren können.

Auf dem Server legen Sie ein Verzeichnis an, in das alle Tools kopiert werden. Microsoft empfiehlt das Verzeichnis k auf dem Laufwerk C. Verwenden Sie dieses Verzeichnis, können Sie vorgefertigte Skripte von Microsoft nutzen, um den Windows-Server an das Cluster anzubinden.

In das Verzeichnis laden Sie die aktuellsten Systemdateien von Kubernetes. Die Dateien werden direkt in das Verzeichnis C:\k extrahiert.

Sie sollten dann die Konfigurationsdatei des Kubernetes-Clusters auf den Windows-Server kopieren. Die Systemdateien von Kubernetes, zum Beispiel kubectl nutzen die fertige Konfigurationsdatei des Clusters, um eine Verbindung aufzubauen. In diesem Fall kann es notwendig sein, dass Sie die Option --kubeconfig=admin.conf anhängen, damit die Befehle auch eine Verbindung zum Cluster aufbauen können.

Abbildung 1: Mit Kubernetes-Tools von Windows aus auf einen Kubernetes-Cluster zugreifen.
Abbildung 1: Mit Kubernetes-Tools von Windows aus auf einen Kubernetes-Cluster zugreifen.

Windows in Kubernetes einbinden

Kann der Windows-Knoten sich über Kubernetes verbinden, können Sie den Server als neuen Cluster-Knoten an Kubernetes anbinden. Microsoft stellt dazu das Skript start.ps1 zur Verfügung, das Sie ebenfalls in das Kubernetes-Verzeichnis auf dem Windows-Server extrahieren. Das Skript wird anschließend mit der folgenden Syntax gestartet:

\start.ps1 -ManagementIP <Windows Node IP> -NetworkMode <network mode>  -ClusterCIDR <Cluster CIDR> -ServiceCIDR <Service CIDR> -KubeDnsServiceIP <Kube-dns Service IP> -LogDir <Log directory>

Die Daten sollten aus dem Kubernetes-Cluster bereits bekannt sein. Wenn das Skript nicht erfolgreich läuft, können Sie es erneut starten.

In den meisten Fällen scheitert die Integration an einer fehlerhaften Netzwerkanbindung. Die Kubernetes-Entwickler stellen eine Dokumentation zur Verfügung, die dabei hilft, Windows-Server an Kubernetes-Cluster anzubinden. Die Informationen sind auf der Seite Intro to Windows support in Kubernetes zusammengestellt

Docker Swarm nutzen

Alternativ oder parallel zu Kubernetes können Sie Container-Hosts auf Basis von Windows Server 2019 mit Docker Swarm zu einem Cluster zusammenfassen. In einer solchen Konfiguration können Sie Container zwischen Container-Hosts mit Windows Server 2019 verschieben.

Zum Erstellen von Docker Swarms verwenden Sie das Tool docker in Windows Server 2019. Um die Kommunikation zu gewährleisten, müssen Sie einige Firewall-Regeln anlegen. Die Ports 2377, 7946, 4789 müssen für UDP und TCP zwischen den Container-Hosts freigeschaltet werden. Um auf einem Windows-Server einen Docker Swarm zu erstellen, verwenden Sie folgende Befehle:

docker swarm join --token <WORKERJOINTOKEN> <MANAGERIPADDRESS>

Beispiel:

docker swarm join --token SWMTKN-1-35yiqpp8hm5bypthomo0u6ip7h5mlxprneuvzeqy5c6mm5rke5-8dsgejlbdnte9iiqd4kiehkx8 192.168.178.244:2377

docker swarm init --advertise-addr=<IP-Adresse des Hosts> --listen-addr <IP-Adresse des Hosts>:2377

Beispiel:

docker swarm init --advertise-addr=192.168.178.244 --listen-addr 192.168.178.244:2377

Abbildung 2: Docker Swarm kann parallel oder alternativ zu Kubernetes eingesetzt werden.
Abbildung 2: Docker Swarm kann parallel oder alternativ zu Kubernetes eingesetzt werden.

Fazit

Generell stellt die Integration von Windows Server 2019 oder Windows Server 1809 und höher in Kubernetes kein Problem dar. Allerdings stellen weder Microsoft noch die Kubernetes-Entwickler Assistenten oder grafische Oberflächen zur Verfügung.

Die Anbindung erfolgt mit gängigen Kubernetes-Tools und setzt einiges an Vorwissen über Kubernetes voraus. Auch die Netzwerkkonfiguration im Kubernetes-Cluster ist wichtig, da hier besonders häufig Probleme bei der Anbindung auftreten.

Erfahren Sie mehr über Containervirtualisierung