Kubernetes & Azure Kubernetes Service im Überblick

Portrait Bild von Markus Zeischke

Von Markus Zeischke, 23. Mai 2019

Zwei bewährte Ansätze bei Softwarearchitekturen mit Microservices sind entweder eine serverlose Architektur mit Functions-as-a-Service oder der Einsatz von Containern und einem passenden Orchestrator-Dienst. Genau an dieser Stelle kommen Kubernetes und der Azure Kubernetes Service (AKS) ins Spiel.

Laut aktuellen Studien werden bis zum Jahr 2022 90 Prozent aller derzeitigen Anwendungen über eine Microservice-Architektur verfügen und 35 Prozent aller Produktionsanwendungen native Cloud-Applikationen sein.

Auf dieser Seite

Die Vorteile und Herausforderungen von Microservices

Der kontinuierliche Wandel von monolithischen Anwendungen hin zum Einsatz von Microservices bringt verschiedene Vorteile mit sich. Durch das Architekturkonzept, dass viele unabhängige Prozesse, die über APIs miteinander kommunizieren, zusammen eine komplexe Anwendung ergeben, bekommen Entwicklungsteams mehr Freiheiten.

Zum einen können verschiedene Teams parallel an unterschiedlichen Microservices arbeiten, zum anderen können sie dabei auf die Technologien setzen, die für ihre Aufgabenstellung die beste Lösung bieten. Hinzu kommt, dass ein einzelner Microservice durch seinen geringeren Funktionsumfang weniger komplex ist und daher der Sourcecode einfacher zu verstehen und zu verwalten ist. Und das sind nur einige der vielen Vorteile.

Natürlich bringt eine Microservices-Architektur auch Herausforderungen mit sich, die man von monolithischen Anwendungen nicht kennt. Zwar ist jeder Dienst für sich einfacher, aber die Gesamtstruktur wird komplexer, da es viel mehr bewegliche Teile als bei einer Standardanwendung gibt. Auch werden bei verteilten Anwendungen die Abhängigkeiten viel größer, was beispielsweise neue Herangehensweisen bei der Entwicklung, den Tests, der Versionsverwaltung oder der Governance erfordert.

Was ist Kubernetes?

Was aber haben Microservices mit Kubernetes zu tun? Zwei bewährte Ansätze bei Softwarearchitekturen mit Microservices sind zum einen eine serverlose Architektur mit Functions-as-a-Service oder zum anderen der Einsatz von Containern und einem passenden Orchestrator-Dienst. Und genau an dieser Stelle kommt Kubernetes ins Spiel.

Was ist Kubernetes denn genau? Ein gern verwendetes Zitat lautet hier: „Kubernetes löst die Probleme, die wir ohne Container nicht hätten.“ Laut dem zuständigen Entwicklungsteam ist Kubernetes eine portable, erweiterbare Open-Source-Plattform für die Verwaltung von containerisierten Workloads und Services, die sowohl die deklarative Konfiguration als auch die Automatisierung erleichtert.

Mit Kubernetes können Container-basierte Anwendungen und die zugehörigen Netzwerk- und Storage-Komponenten verwaltet werden. Im Mittelpunkt stehen dabei die Anwendungs-Workloads und nicht die zu Grunde liegende Infrastruktur. Beispielsweise können auf Microservices basierende Anwendungen von den verschiedenen Verwaltungs- und Orchestrierungsfunktionen von Kubernetes profitieren.

Da Kubernetes eine offene Plattform bietet, können Entwickler auf ihre bevorzugten Programmiersprachen, Betriebssysteme, Bibliotheken oder Messaging-Bus-Technologien zurückgreifen. Außerdem können Tools für Continuous Integration und Continuous Delivery mit Kubernetes integriert werden, um neue Releases zu planen und bereitzustellen.

Kubernetes: Von 0 auf 100 in 50 Tagen

Der Kubernetes-Lernpfad richtet sich an alle, die mehr über Kubernetes erfahren wollen. In nur 50 Tagen lernen Sie die Grundlagen von Kubernetes und sammeln praktische Erfahrungen mit den verschiedenen Komponenten, Funktionen und Lösungen, einschließlich des Azure Kubernetes Services.

Zum Kubernetes-Lernpfad von Microsoft

Azure Kubernetes Service – Kubernetes auf Azure

Unterstützung für das Hosting, das Deployment und die Verwaltung von Kubernetes-Umgebungen bietet der Cloud-Dienst Azure Kubernetes Service (AKS). Mit AKS können Kubernetes Cluster auf Microsoft Azure bereitgestellt werden. Der Azure Service übernimmt die Verantwortung für verschiedene Aufgaben rund um den Betrieb der Kubernetes-Umgebung, wie beispielweise Systemüberwachung und Wartung. So kann AKS u. a. Ressourcen ganz nach Bedarf bereitstellen, aktualisieren oder skalieren, ohne Anwendungen offline schalten zu müssen.

Beispiele für einen erfolgreichen Einsatz von Kubernetes gibt es einige, eines der bekanntesten dürfte Pokemon Go sein, wo Kubernetes wertvolle Unterstützung bei der Skalierung bot. Die Haufe Group aus Freiburg nutzt Kubernetes unter anderem auf Microsoft Azure für die Orchestrierung von zwei Online-Diensten.

Azure Kubernetes Service im Detail

AKS-Cluster können über das Azure-Portal, die Azure CLI oder Template-basierte Deployment-Optionen wie Azure Resource Manager (ARM) oder Terraform erstellt werden. Bei der Bereitstellung eines AKS Clusters werden sowohl der Kubernetes Master als auch Knoten bereitgestellt und konfiguriert. Zusätzlich können weitere Funktionen wie Monitoring, erweiterte Netzwerke oder Integration mit Azure Active Directory eingestellt werden. AKS unterstützt das Docker-Image-Format. Zur Speicherung von Docker-Images kann AKS mit der Azure Container Registry (ACR) integriert werden.

Im Bereich Zugriff, Sicherheit und Überwachung ermöglicht AKS die Integration mit Azure Active Directory und die Nutzung der rollenbasierten Kubernetes-Zugriffskontrolle von Kubernetes (RBAC). Mit RBAC lassen sich der Zugriff auf Kubernetes-Ressourcen und -Namespaces sowie die Berechtigungen für diese steuern. Durch die Integration mit Azure Active Directory können vorhandenen Azure AD-Benutzer und -Gruppen der Zugriff auf AKS-Ressourcen gewährt werden.

Um nachvollziehen zu können, wie sich die Performance des AKS Clusters und der darüber bereitgestellten Anwendungen entwickelt, können über Azure Monitor Arbeitsspeicher- und Prozessordaten aus Containern, Knoten und Controllern protokolliert werden. Diese Überwachungsdaten werden im Azure Log Analytics-Arbeitsbereich gespeichert und stehen über das Azure-Portal, die Azure CLI und einen REST-Endpunkt zur Verfügung.

AKS-Knoten werden auf Azure VMs ausgeführt. Es kann eine Verbindung von Knoten und Pods mit einem Storage hergestellt werden, außerdem lassen sich Cluster-Komponenten aktualisieren und GPUs verwenden:

  • Wenn sich der Bedarf für Ressourcen ändert, kann die Anzahl der Cluster-Knoten oder Pods, die die Dienste ausführen, automatisch zentral hoch- oder runterskaliert werden. Dafür kann sowohl die horizontale automatische Skalierungsfunktion für Pods als auch die Cluster-Skalierungsfunktion verwendet werden.
  • Azure Kubernetes Service hat mehrere Kubernetes-Versionen im Angebot. Wenn eine neue Version verfügbar wird, lässt sich mithilfe des Azure-Portals oder der Azure CLI ein Cluster-Upgrade ausführen. Während des Upgrade-Vorgangs werden die Knoten sorgfältig isoliert und ausgeglichen, um laufende Anwendungen möglichst wenig zu beeinträchtigen.
  • AKS unterstützt die Erstellung GPU-fähiger Knotenpools. Azure hat hierfür VMs mit einzelner GPU oder mit mehreren GPUs im Angebot.

Ein AKS-Cluster kann in einem vorhandenen virtuellen Netzwerk bereitgestellt werden. Bei dieser Art der Konfiguration wird jedem Pod im Cluster eine IP-Adresse im virtuellen Netzwerk zugewiesen. So ist eine direkte Kommunikation mit anderen Pods im Cluster und anderen Knoten im virtuellen Netzwerk möglich. Pods können sich außerdem mit anderen Diensten in einem mittels Peering verbundenen virtuellen Netzwerk sowie mit lokalen Netzwerken über ExpressRoute- oder S2S-VPN-Verbindungen (Site-to-Site) verbinden.

Das Add-On für das HTTP-Anwendungsrouting ermöglicht einen einfachen Zugriff auf Anwendungen, die in einem AKS-Cluster bereitgestellt sind. Bei Aktivierung konfiguriert die Lösung einen Eingangscontroller im AKS-Cluster. Darüber hinaus erstellt die Lösung bei der Bereitstellung von Anwendungen auch öffentlich zugängliche DNS-Namen für Anwendungsendpunkte.

Für Kubernetes und AKS entwickeln

Kubernetes verfügt über ein umfangreiches Ökosystem an Entwicklungstools: Dazu zählen u. a. Helm, Draft und die Kubernetes-Erweiterung für Visual Studio Code. Darüber hinaus ermöglicht Azure Dev Spaces eine schnelle, iterative Kubernetes-Bereitstellung.

Mit minimalem Einrichtungsaufwand auf dem Entwicklungscomputer lassen sich Container direkt in Azure Kubernetes Service (AKS) iterativ ausführen und debuggen. Man kann auch als Team in einem freigegebenen Kubernetes-Cluster zusammenarbeiten und End-to-End-Tests mit anderen Komponenten ausführen, ohne Abhängigkeiten replizieren oder simulieren zu müssen. Azure Dev Spaces ermöglicht die Entwicklung unter Windows, Mac und Linux unter Verwendung vertrauter Tools wie Visual Studio, Visual Studio Code oder der Befehlszeile.

Mit Azure DevOps Projects gibt es eine Lösung, mit der man vorhandenen Code und Git-Repositorys einfach in Azure einbinden kann. Azure DevOps Projects automatisiert die Einrichtung einer gesamten CI- und CD-Pipeline (Continuous Integration und Continuous Delivery) für Azure. Man kann bereits vorhandenen Code nutzen oder eine der bereitgestellten Beispielanwendungen verwenden. Anschließend kann die Anwendung schnell für verschiedene Azure-Dienste bereitgestellt werden, neben Virtual Machines, App Service, Azure SQL-Datenbank oder Azure Service Fabric auch für Azure Kubernetes Service.

Build 2019: Das ist neu bei Kubernetes und AKS

Zum fünfjährigen Open Source-Jubiläum von Kubernetes hat Microsoft dem Azure-Ableger im Rahmen der Fachkonferenz Build eine Reihe von Neuerungen in den Bereichen Serverless Kubernetes, eventgesteuerte Autoskalierung, Azure Dev Spaces, Azure Pipelines sowie die Integration von Azure Policy spendiert.

Azure Kubernetes Service umfasst eine Funktion für serverlose Container: virtuelle Knoten. Mit virtuellen Knoten können Nutzer Anwendungen im Handumdrehen mit cloud-basierten, serverlosen Containern skalieren, die direkt in der Azure-Infrastruktur ausgeführt werden. Diese Container können nicht nur schnell gestartet werden, sie bieten zudem eine Infrastruktur für serverlose Container mit der Einfachheit von IaaS und ohne die Komplexität virtueller Maschinen. Bei virtuellen Knoten müssen Entwickler keine VM-Infrastruktur verwalten, patchen oder aktualisieren. Diese Funktion ist jetzt allgemein verfügbar. Sie basiert auf der Open-Source-Technologie Virtual Kubelet.

Die Skalierung bei Kubernetes hängt von der CPU- und Arbeitsspeicherauslastung von Containern ab. Ein Wunsch von Nutzer war ein einfacherer Prozess zum Bereitstellen von Ressourcen basierend auf Events, ähnlich wie dies auch schon bei FaaS-Diensten wie Azure Functions genutzt wird. Die auf Kubernetes basierende, ereignisgesteuerte automatische Skalierung (Kubernetes-based Event-Driven Autoscaling, KEDA), ein Open-Source-Projekt, das in Zusammenarbeit mit Red Hat entwickelt wurde, vereint die Vorteile beider Bereiche.

Man kann mit der KEDA Bereitstellung in einem Kubernetes-Cluster basierend auf Events automatisch skalieren. Zu diesen Events zählen u.a. Kafka-Streams, Cloud Events und Ereignisse anderer Event-Anbieter. KEDA kann in jeder Kubernetes-Umgebung verwendet werden – egal, ob lokal oder in der Cloud mit Azure Kubernetes Service oder Red Hat OpenShift.

Azure Dev Spaces wurde entwickelt, um Kunden zu helfen, eine Kubernetes-Entwicklungsumgebung mit den richtigen Abhängigkeiten einzurichten. Diese ermöglichen ein schnelles Onboarding von Entwicklern mit minimalem Setup-Aufwand für die Entwicklungsmaschinen. Außerdem wird können Teammitglieder damit verschiedene Teile einer Anwendung parallel in demselben Azure Kubernetes Service-Cluster iterieren und debuggen und ihren Code testen, ohne Abhängigkeiten zu replizieren oder zu simulieren.

Die neue Integration von Azure Pipelines mit AKS macht es einfacher, von einem Git-Repository zu einem Container zu wechseln, der in AKS oder in einer anderen Kubernetes-Umgebung On-Premises oder in der Cloud ausgeführt wird. Jede Änderung durchläuft automatisch Validierung, Tests und Canary-Releases bis zur Produktivumgebung auf Azure.

Welche Kosten fallen bei AKS an?

Azure Kubernetes Service ist ein kostenloser Containerdienst. Nutzer zahlen nur für die VMs und die entsprechenden Speicher- und Netzwerkressourcen. Für die Cluster-Verwaltung an sich fallen keine Kosten an. Auch bei den AKS-Knoten fallen nur Kosten für die Instanzen der VMs sowie für die entsprechenden, durch den Kubernetes-Cluster verbrauchten Speicher- und Netzwerkressourcen an.

Azure Kubernetes Service testen

Um bei der Fülle an Cloud-Diensten einen guten Überblick zu bekommen und die Angebote für die eigenen Anforderungen bestmöglich evaluieren zu können, können Interessierte das kostenfreie Azure-Konto zum Testen der verschiedenen Dienste nutzen. Dieses Konto umfasst ein Guthaben in Höhe von 170 Euro für 30 Tage sowie die kostenlose Nutzung ausgewählter Azure-Produkte für 12 Monate. Schließlich steht eine Reihe von Cloud-Diensten bis zu einem gewissen Rahmen immer kostenfrei zur Verfügung.

Nur als Anregung: Das kostenfreie Azure-Konto könnte man im Falle von Azure Kubernetes Service zum Beispiel dazu nutzen, um einen mit Kubernetes orchestrierten Microservice einfach mit Visual Studio Code zu definieren und zu erstellen. Man könnte auch einen Azure Kubernetes Service-Cluster mit mehreren Knoten bereitstellen und diesen dann mit Azure Monitor überwachen.