Container-Orchestrierung unter Windows und Azure Kubernetes und Windows Server Container in der Praxis

Autor / Redakteur: Thomas Joos / Ulrike Ostler |

Unternehmen, die auf Windows Server 2016 setzen und Kubernetes als Container-Verwaltung nutzen wollen, haben die Möglichkeit Windows Server Container zusammen der Open-Source-Orchestrierung zu nutzen.

Anbieter zum Thema

Eigentlich lässt sich Kubernetes ganz gut mit "Windows Server 2016" und "Microsoft Azure" nutzen, ist Autor Thomas Joos der Ansicht. Allerdings gibt es ein paar Vorraussetzungen zu beachten.
Eigentlich lässt sich Kubernetes ganz gut mit "Windows Server 2016" und "Microsoft Azure" nutzen, ist Autor Thomas Joos der Ansicht. Allerdings gibt es ein paar Vorraussetzungen zu beachten.
(Bild: gemeinfrei: 3dman_eu/ Pixabay / CC0 )

Die Verwaltung der Container mithilfe von Kubernetes findet generell auf einem Linux-Server statt. Das Orchestrierungswerkzeug ist aber ab Version 1.5 dazu in der Lage, in Windows Server 2016 Container zu erstellen.

Das heißt: Unternehmen, die ein heterogenes Rechenzentrum betreiben, können mit Kubernetes alle Container im Netzwerk orchestrieren. Dabei spielt es keine Rolle, ob die Container auf Linux-Servern positioniert sind, oder auf Windows Server 2016. Pods, Dienste und Container funktionieren problemlos mit Windows Server Containern. Mehr Infos dazu ist in einem Blog-Beitrag der Kubernetes-Entwickler zu lesen.

Kubernetes lässt sich auch in "Microsoft Azure" implementieren.
Kubernetes lässt sich auch in "Microsoft Azure" implementieren.
(Bild: Thomas Joos)

Wer keine lokalen Kubernetes-Cluster betreiben will, kann Kubernetes auch in „Microsoft Azure“ implementieren. Die Anleitung dazu ist in der Dokumentation von Microsoft Azure zu finden .

Aktuell gibt es noch einige Einschränkungen bei der Kommunikation von Pods zwischen verschiedenen Hosts, wenn auf Windows Server Container gesetzt wird. Auch die Unterstützung von DNS ist noch nicht vollständig implementiert. Außerdem macht der UDP-Datenverkehr in Containern Probleme.

Windows Server Container und Hyper-V-Container

Wenn die Container-Anwendung in einer Sprache geschrieben wurde, die neutral ist, also auf Windows und Linux funktioniert, kann Kubernetes Container in Windows Server 2016 genauso orchestrieren, wie in Linux. Dazu gehören zum Beispiel „Go“ und „.NET Core“. Durch die Integration von Windows Server 2016 ist Kubernetes zudem in der Lage, auch Container zu orchestrieren, die Windows-Komponenten nutzen. Dazu gehören „IIS“, „.NET“, Windows-Dienste, „ASP.NET“, .NET Core und ansonsten alle Anwendungen, die auch kompatibel mit Windows Server 2016 sind.

Kubernetes kann Linux und Windows miteinander verbinden, auch über Microsoft Azure.
Kubernetes kann Linux und Windows miteinander verbinden, auch über Microsoft Azure.
(Bild: Thomas Joos)

Windows Server 2016 bietet zwei verschiedene Container-Typen: Windows Server Container und „Hyper-V“-Container. Windows Server Container teilen sich den Kernel des Betriebssystems. Hyper-V-Container verwenden jeweils eine eigene Kopie des Kernels. Kubernetes unterstützt ab Version 1.5 beide Varianten.

Zusätzlich wird auf den Windows-Servern noch Docker ab Version 1.12.2-cs2 benötigt. Die Kubernetes-Entwickler zeigen an einem Beispiel, wie die Einrichtung durchgeführt werden muss.

Netzwerkkommunikation zwischen Pods

Für die Netzwerkkommunikation zwischen Pods auf einem Server mit Windows Server 2016 werden Technologien in Windows-Server verwendet. Es sind also keine Zusatzlösungen notwendig, um die Kommunikation zwischen Pods sicherzustellen. Auch zwischen verschiedenen Servern werden integrierte Technologien in Windows Server 2016 und Linux verwendet.

In Linux wird ein Bridge-Interface verwendet sowie eine private Netzwerkverbindung auf den Knoten. Für die Kommunikation zwischen Knoten werden Routen erstellt, die den Datenverkehr zur öffentlichen Netzwerkschnittstelle routen.

Windows Server 2016-Netzwerkeinstellungen für Kubernetes

Um Container mit Kubernetes zu verwalten und auf Windows-Servern bereitzustellen, sind einige Netzwerkanpassungen in Windows Server 2016 notwendig. Zunächst benötigt jeder Windows-Knoten mindestens zwei Netzwerkadapter. Dabei kann es sich auch um virtuelle Adapter handeln, wenn der Container-Host virtualisiert wird.

Kommt Hyper-V zum Einsatz kann hier mit externen Hyper-V-Virtual-Switches gearbeitet werden. Das Container-Netzwerk wird transparent konfiguriert.

Zur Netzwerkverbindung zwischen den Pods wird der Routing- und RAS-Dienst (RRAS) auf dem Windows-Server verwendet. Hier können Routern definiert werden, welche die Kommunikation zwischen Containern auf dem Host ermöglichen sowie Verbindungen ins Netzwerk. Dadurch wird auch die Pod-Kommunikation gesteuert.

Beim Einsatz von Kubernetes mit "Windows Server 2016" oder "Microsoft Azure" wird am besten auf das Virtualisierungs-Tool "Hyper-V" gesetzt. Mit virtuellen Servern und Netzwerken ist die Kommunikation einfacher umsetzbar.
Beim Einsatz von Kubernetes mit "Windows Server 2016" oder "Microsoft Azure" wird am besten auf das Virtualisierungs-Tool "Hyper-V" gesetzt. Mit virtuellen Servern und Netzwerken ist die Kommunikation einfacher umsetzbar.
(Bild: Thomas Joos)

Dazu ein Beispiel: Auf einem Windows-Server sind die beiden Netzwerkadapter „NIC1“ und „NIC2“ verfügbar. NIC1 ist mit dem Netzwerk verbunden und hat die IP-Adresse 10.0.0.5. NIC2 dient zur Kommunikation der virtuellen Server und Pods auf dem lokalen Knoten und hat die IP-Adresse 192.168.1.1. Als Windows-Container-Netzwerk wird ein transparentes Netzwerk erstellt, das das Subnetz 192.168.1.0/24 verwaltet.

Auf dem Server gibt es die beiden Container „Cont01“ und „Cont2“. Der Container Cont02 hat die IP-Adresse 192.168.1.2 und verwendet als Gateway die IP-Adresse 192.168.1.1, also die interne IP-Adresse von NIC2. Cont02 hat die IP-Adresse 192.168.1.3 und verwendet als Gateway ebenfalls 192.168.1.1. So können die Container miteinander über das interne Netzwerk kommunizieren und über 10.0.0.5 mit dem Rest des Netzwerks.

Das Einrichten von Kubernetes auf Windows Server 2016

Um Kubernetes mit Windows Server 2016 zu nutzen, muss auf dem Server zunächst „Docker“ eingerichtet werden. Die Anleitung dazu beschreibt Microsoft im MSDN. Für die Kommunikation auf einem Hyper-V-Server muss eine virtuelle Switch auf Basis von Hyper-V erstellt werden, welche die interne Kommunikation ermöglicht. Wichtig ist, dass auf dem Server RRAS installiert ist.

Die Verbindung zwischen Kubernetes und Windows Server 2016

Um den Linux-Teil von Kubernetes mit Windows Server 2016 zu verbinden, muss das CNI-Netzwerk-Plugin auf dem Server installiert sein. Außerdem sind weitere Voraussetzungen zu schaffen, die auf GitHub zu finden sind.

Um „Kubelet“, das Tool, mit dem Kubernetes gesteuert wird, auf einem Windows-Server zu betreiben, wird die Powershell benötigt. Danach kann „kubelet.exe“ ausgeführt werden. Die Befehle dazu sehen folgendermaßen aus:

$env:CONTAINER_NETWORK = "<docker network>"kubelet.exe --hostname-override=<ip address/hostname of the windows node> --pod-infra-container-image="apprenda/pause" --resolv-conf="" --api_servers=<api server location>

Danach muss auch der „Kube“-Proxy - Kube ist der Kubernetes-Cluster als Ganzes - auf dem Windows-Server gestartet werden. Die dazu notwendigen Befehle sind in der Kubernetes-Dokumentation zu finden.

(ID:45025724)