Kubernetes navigiert auch in der Azure Wolke

Kubernetes ist eine open-source Plattform für den Betrieb von containerisierten Applikationen, verteilt über mehrere Hostmaschinen. Die Plattform wurde ursprünglich von Google ins Leben gerufen und ist nun auch in der Microsoft Azure Cloud verfügbar, allerdings bis vor kurzem unter dem Label einer Preview. Seit dem 21.02.2017 ist Kubernetes als Teil des Azure Container Services ‚generally available’. In diesem Blogeintrag beleuchten wir, inwiefern Kubernetes in Microsoft Azure Cloud dem Previewstatus wirklich entwachsen ist und welche Einschränkungen bestehen bleiben.

Was ist Kubernetes?

Kubernetes (kurz k8s) kommt aus dem Griechischen und bedeutet so viel wie Steuermann oder Kapitän und diesem Namen macht es alle Ehre. K8s bietet einfaches Deployment, einfache Skalierung und ein nahtloses Update von Anwendungen, die z.B. als Docker-Container ausgeliefert werden. Kubernetes wird dabei in einem Cluster, bestehend aus Master- und Worker-Knoten betrieben. Die Anwendungen werden auf den Worker-Knoten betrieben, während die Master-Knoten die Ressourcenauslastung und die Applikationsstatus überwachen und bei Ausfall von Worker-Knoten Anwendungen auf verbleibende Knoten umverteilen. Eine anschauliche, nicht technische aber sehr empfehlenswerte Beschreibung von Kubernetes findet sich auch auf youtube:

Kubernetes im Azure Container Service

Den Aufbau eines Kubernetes Clusters in der Azure Cloud wird seit kurzem von Microsoft über den Azure Container Dienst erleichtert. Mit Hilfe des Azure Portals sind nur wenige Klicks nötig um einen Cluster zu erstellen. Allerdings verwirren manche Schritte auf dem Weg zur Containerinfrastruktur. So muss z.B. im Azure Container Dienst die Id eines Service Principal angegeben werden, in dessen Namen die nötigen Ressourcen für den Cluster angelegt werden. Leider ist nicht die Id gemeint, sondern der Service Principal Name - eine selbstdefinierte URL. Sollte der Nutzer trotzdem die Id verwenden bekommt er im Deploymentschritt eine nichts sagende Fehlermeldung mit der Überschrift ‚Preflight Validation Failed’.

Wenn alle Daten korrekt eingegeben wurden wird ein Kubernetes Cluster in einem eigenen virtuellen Netz mit dem Adressbereich 10.0.0.0/8 erstellt und kann sofort ohne Einschränkungen genutzt werden. Einziger Wehrmutstropfen hierbei ist die fehlende Option die Anzahl der Worker-Knoten nachträglich zu ändern. Der Adressbereich des Clusters lässt sich über das Portal ebenfalls nicht ändern. Für diesen Fall stellt Microsoft auf Github ein Kommandozeilentool namens acs-engine bereit.

Kommandozeilentool acs-engine für mehr Konfigurationsmöglichkeiten

Das Tool acs-engine erstellt basierend auf einem Template weitere Azure Resource Manager Templates um einen Kubernetes Cluster in Microsoft Azure aufzubauen. Sollte man nun den Cluster in einem vordefinierten virtuellen Netzwerk deployen wollen, können im Ausgangstemplate entsprechende Angaben gemacht werden. Leider sind weitere manuelle Anpassungen nötig um den Cluster erfolgreich zu betreiben, so referenziert die acs-engine teilweise das Default-Netzwerk mit dem bereits genannten Adressbereich und das führt in einem anderen Adressbereich zu Problemen. (Wir haben einen entsprechenden Pullrequest erstellt um die manuellen Anpassungen zu minimieren und weitere Konfigurationen für ein bestehendes Netzwerk zuzulassen). Die acs-engine hat aber noch weitere Kinderkrankheiten, so kommt es z.B. zu Verbindungsproblemen aus den Containerapplikationen heraus zu anderen Azure-Ressourcen, manchmal auch in der Kommunikation mit den Master-Knoten. Mit einem Workaround kann man dieses Problem aber teilweise umgehen.

In diesem Bereich ist der Previewstatus von Kubernetes in der Azure Cloud noch spürbar. Das Kommandozeilentool acs-engine befindet sich weiterhin in der Entwicklung und es lohnt sich die Aktivitäten auf Github zu beobachten bis man einen für sich funktionierenden Stand gefunden hat. Durch die hohe Aktivität stehen die Chancen gut, dass die Probleme in der nächsten Zeit gelöst werden. Für die Nutzer, die Kubernetes mit der Default-Konfiguration aus dem Azure Portal nutzen wollen, ist Kubernetes sehr gut nutzbar und durchaus für den Produktionsbetrieb geeignet.