Kubernetes und Azure Kubernetes Service – eine Einführung

zeischke_markus_profil
Autor Markus Zeischke
  • Beitrag vom 28.02.2019
  • Views: 16.698

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. 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.

Weitere Vorteile ergeben sich bei der Bereitstellung und dem Betrieb von Anwendungen, die auf Microservices basieren. Angefangen bei der Möglichkeit jeden Microservice einzeln bereitstellen zu können, ohne dass dabei der Rest der Anwendung beeinträchtigt wird, bis hin zur leichteren Lokalisierung von Fehlern. Außerdem können einzelne Dienste unabhängig voneinander skaliert werden, was zu einer Einsparung von Ressourcen und somit der Kosten führt.

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.

Kubernetes und Azure Kubernetes Service

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.

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.

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.

Azure Developer Camp: Container und Kubernetes auf Microsoft Azure

Unter dem Titel Microsoft Developer Camp“ bekommen Entwickler, DevOps-Spezialisten und Leiter von Entwicklungsteams in zwei praxisorientierten Workshops in München am 18. März 2019 und am 28. Mai 2019 ein erstes Grundwissen rund um die Erstellung, Bereitstellung und kontinuierliche Verbesserung von Container-basierten Applikationen mithilfe von Kubernetes auf Microsoft Azure. Während der Workshops werden sowohl theoretische Grundlagen vermittelt als auch die praktische Umsetzung geübt. Mit dem Workshop erhalten Teilnehmer unter anderem:

  • ein grundlegendes Verständnis von Docker-Containern und dem Kubernetes Object Model.
  • praktisches Wissen zur Integration von Kubernetes auf Microsoft Azure.
  • Praxiserfahrungen bei der Erstellung von Multi-Container-Applikationen in einem Kubernetes Cluster.
  • das Know-how für die Konfiguration einer automatisierten CI/CD Pipeline und eines Release-Workflow für Kubernetes mittels Azure DevOps.
  • Fachwissen, wie man Logging und Monitoring in Apps integriert.

Ebenfalls wertvolle Information rund um den Einsatz von Kubernetes bietet die Webinar-Aufzeichnung „Einstieg in Kubernetes“. Dort wird u. a. erläutert, was die Verwendung von Kubernetes bringt, wie mit Kubernetes gearbeitet wird, was gängige und wichtige Begriffe und Objekttypen in Kubernetes sind, und wie man vergleichsweise einfach an eine Kubernetes-Installation kommt.

Zur Sprache kommen dabei beispielsweise die Herausforderungen in der Softwareentwicklung und im Betrieb, die Funktionen eines Orchestrators und konkret von Kubernetes, der Zugriff auf Kubernetes via Kommandozeile, gängige Objekttypen sowie das Zusammenspiel von Kubernetes und Azure.

Technische Anleitungen & Trainings zu Azure Kubernetes Service

Weiterführende Ressourcen zum Azure Kubernetes Service


Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert