Orchestrieren von Microservices und Anwendungen mit mehreren Containern für hohe Skalierbarkeit und Hochverfügbarkeit

Tipp

Diese Inhalte sind ein Auszug aus dem eBook „.NET Microservices Architecture for Containerized .NET Applications“, verfügbar unter .NET Docs oder als kostenlos herunterladbare PDF-Datei, die offline gelesen werden kann.

.NET Microservices Architecture for Containerized .NET Applications eBook cover thumbnail.

Falls Ihre Anwendung auf Microservices beruht oder über mehrere Container verteilt ist, ist die Nutzung von Orchestratoren für Anwendungen auf Produktionsniveau von entscheidender Bedeutung. Wie bereits in einem vorherigen Artikel erwähnt, ist jeder Microservice Besitzer seines Modells und seiner Daten, damit er von der Entwicklung und Bereitstellung unabhängig ist. Auch wenn Sie eine herkömmliche Anwendung aus mehreren Diensten besitzen (z.B. eine SOA-Anwendung), besteht eine einzelne Geschäftsanwendung aus mehreren Containern oder Diensten, die als verteiltes System bereitgestellt werden müssen. Derartige Systeme lassen sich nur schwer horizontal hochskalieren und verwalten. Wenn Sie also eine skalierbare Anwendung mit mehreren Containern auf Produktionsniveau bereitstellen möchten, ist die Nutzung eines Orchestrators unumgänglich.

Abbildung 4-23 veranschaulicht die Bereitstellung einer aus mehreren Microservices (Containern) bestehenden Anwendung in einem Cluster.

Diagram showing Composed Docker applications in a cluster.

Abbildung 4-23. Ein Cluster mit Containern

Sie verwenden einen Container für jede Dienstinstanz. Docker-Container sind „Bereitstellungseinheiten“, und ein Container ist eine Instanz eines Docker-Images. Ein Host verwaltet mehrere Container. Dieser Ansatz mag logisch erscheinen. Nicht offensichtlich ist aber, wie der Lastenausgleich, das Routing und die Orchestrierung dieser zusammengesetzten Anwendungen erfolgen soll.

Mit der einfachen Docker-Engine können Instanzen mit nur einem Image auf einem einzelnen Docker-Host leicht verwaltet werden. Die einfache Docker-Engine ist allerdings unzureichend, wenn mehrere Container, die auf mehreren Hosts bereitgestellt werden, für komplexere verteilte Anwendungen verwaltet werden sollen. In den meisten Fällen wird eine Verwaltungsplattform benötigt, die Container automatisch startet, Container mit mehreren Instanzen pro Image aufskaliert, diese bei Bedarf anhält oder beendet und idealerweise auch steuert, wie Container auf Ressourcen wie Netzwerke oder Datenspeicher zugreifen.

Um anstelle von einzelnen Containern oder einfachen zusammengesetzten Anwendungen größere Unternehmensanwendungen mit Microservices verwalten zu können, sind Orchestrierung und Clusteringplattformen notwendig.

Wenn Sie große, auf Microservices basierende Unternehmensanwendungen erstellen möchten, sollten Sie sich hinsichtlich der Architektur und Entwicklung mit den folgenden Plattformen und Produkten vertraut machen, die für komplexere Szenarios geeignet sind:

Cluster und Orchestratoren. Wenn es erforderlich ist, Anwendungen für mehrere Docker-Hosts oder große, auf Microservices basierende Anwendungen horizontal hochzuskalieren, müssen sich sämtliche Hosts als einzelner Cluster verwalten lassen, was durch die Abstraktion der Komplexität der zugrunde liegenden Plattform erreicht wird. Dafür sorgen die Containercluster und Orchestratoren. Kubernetes ist ein Beispiel für einen Orchestrator und in Azure über den Azure Kubernetes Service verfügbar.

Schedulers. Durch Planung können Administratoren Container so in einem Cluster starten, dass sie auch eine Benutzeroberfläche bereitstellen. Ein Clusterplaner ist für mehrere Aufgaben zuständig: Neben der effizienten Verwaltung von Ressourcen müssen auch die vom Benutzer vorgegebenen Einschränkungen festgelegt und der Lastenausgleich wirksam für Container für unterschiedliche Knoten oder Hosts vorgenommen werden. Zusätzlich muss der Cluster auch bei Fehlern stabil sein und gleichzeitig Hochverfügbarkeit gewährleisten.

Das Clusterkonzept ist eng mit dem Konzept eines Planers verbunden. Produkte von unterschiedlichen Anbietern stellen daher oft beide Funktionen zur Verfügung. Die folgende Liste enthält die wichtigsten Plattformen und Softwareprodukte für Cluster und Planer. Diese Orchestratoren werden häufig in öffentlichen Clouds wie Azure zur Verfügung gestellt.

Softwareplattformen für Containerclustering, Orchestrierung und Planung

Plattform Beschreibung
Kubernetes
An image of the Kubernetes logo.
Kubernetes ist ein Open Source-Produkt, das unterschiedliche Funktionen bereitstellt, von der Bereitstellung einer Clusterinfrastruktur über die Containerplanung bis hin zur Orchestrierung. Mit dieser Plattform können Sie die Bereitstellung, die Skalierung und die Vorgänge von Anwendungscontainern für Hostcluster automatisieren.

Kubernetes stellt eine auf Container ausgerichtete Infrastruktur bereit, die Anwendungscontainer so in logischen Einheiten gruppiert, dass diese leicht verwaltet und ermittelt werden können.

Kubernetes ist unter Linux ausgereifter als unter Windows.
Azure Kubernetes Service (AKS)
An image of the Azure Kubernetes Service logo.
AKS ist ein verwalteter Dienst für die Kubernetes-Containerorchestrierung in Azure, der Verwaltung, Bereitstellung und Vorgänge für Kubernetes-Cluster vereinfacht.
Azure Container Apps
An image of the Azure Container Apps Service logo.
Azure Container Apps ist ein verwalteter serverloser Containerdienst zum Erstellen und Bereitstellen moderner Apps im großen Stil.

Verwenden von containerbasierten Orchestratoren in Microsoft Azure

Mehrere Cloudanbieter wie Microsoft Azure, Amazon EC2 Container Service und Google Container Engine unterstützen Docker-Container, Docker-Cluster und Orchestrierung. Microsoft Azure stellt Unterstützung für Docker-Cluster und -Orchestratoren über Azure Kubernetes Service (AKS) bereit.

Verwenden von Azure Kubernetes Service

Ein Kubernetes-Cluster fasst mehrere Docker-Hosts in einem Pool zusammen und macht sie als einen einzelnen virtuellen Docker-Host verfügbar, sodass Sie mehrere Container im Cluster bereitstellen und auf eine beliebige Anzahl von Containerinstanzen horizontal skalieren können. Der Cluster übernimmt komplexe Verwaltungsaufgaben und gewährleistet dabei z.B. Skalierbarkeit und Integrität.

AKS vereinfacht die Erstellung, Konfiguration und Verwaltung eines Clusters mit virtuellen Computern in Azure, die zur Ausführung von Containeranwendungen vorkonfiguriert werden. Mit einer optimierten Konfiguration für Open Source-Planungs- und -Orchestrierungstools unterstützt AKS Sie dabei, Ihr eigenes Know-how anzuwenden oder auf das Fachwissen einer wachsenden Community zuzugreifen, damit Sie containerbasierte Anwendungen in Microsoft Azure bereitstellen und verwalten können.

Azure Kubernetes Service optimiert die Azure-spezifische Konfiguration bekannter Open Source-Clusteringtools und -technologien von Docker. Dadurch erhalten Sie eine offene Lösung, die die Portabilität der Container und der Anwendungskonfiguration garantiert. Sie müssen nur die Größe, die Anzahl von Hosts und die Orchestratortools auswählen. Alles Weitere erledigt AKS.

Diagram showing a Kubernetes cluster structure.

Abbildung 4-24. Vereinfachte Struktur und Topologie von Kubernetes-Clustern

In Abbildung 4-24 sehen Sie die Struktur eines Kubernetes-Clusters, in dem ein Masterknoten (virtueller Computer) den größten Teil der Koordinierung des Clusters steuert. Sie können Container auf den verbleibenden Knoten bereitstellen, die aus Sicht der Anwendung als ein einziger Pool verwaltet werden und Ihnen die Skalierung auf Tausende oder sogar Zehntausende von Containern ermöglichen.

Entwicklungsumgebung für Kubernetes

In der Entwicklungsumgebung kündigte Docker im Juli 2018 an, dass Kubernetes auch auf einem einzelnen Entwicklungscomputer (Windows 10 oder macOS) ausgeführt werden kann, indem Sie Docker Desktop installieren. Sie können die Bereitstellung später in die Cloud (AKS) ausweiten, um weitere Integrationstests auszuführen, wie in Abbildung 4-25 gezeigt.

Diagram showing Kubernetes on a dev machine then deployed to AKS

Abbildung 4-25. Ausführen von Kubernetes auf einem Entwicklungscomputer und in der Cloud

Erste Schritte mit Azure Kubernetes Service (AKS)

Um mit der Nutzung von AKS zu beginnen, stellen Sie über das Azure-Portal oder mithilfe der CLI einen AKS-Cluster bereit. Weitere Informationen zum Bereitstellen eines Kubernetes-Clusters in Azure finden Sie unter Bereitstellen eines Azure Kubernetes Service-Clusters (AKS).

Für die durch AKS standardmäßig installierte Software fallen keine Gebühren an. Alle Standardoptionen werden mit Open Source-Software implementiert. AKS ist für viele virtuelle Computer in Azure verfügbar. Sie zahlen nur für die von Ihnen ausgewählten Compute-Instanzen und den Ressourcenverbrauch durch die zugrunde liegende Infrastruktur, z. B. Netzwerk- und Speicherressourcen. Für AKS selbst fallen keine zusätzlichen Gebühren an.

Die Standardoption für die Bereitstellung von Kubernetes in der Produktion ist die Verwendung von Helm-Charts, die im nächsten Abschnitt vorgestellt werden.

Bereitstellen mit Helm-Charts in Kubernetes-Clustern

Wenn Sie eine Anwendung in einem Kubernetes-Cluster bereitstellen, können Sie das Original-CLI-Tool „kubectl.exe“ mit Bereitstellungsdateien verwenden, die auf dem nativen Format (YAML-Dateien) basieren, wie bereits im vorherigen Abschnitt erwähnt. Für komplexere Kubernetes-Anwendungen, z.B. die Bereitstellung komplexer microservicebasierter Anwendungen, empfiehlt sich die Verwendung von Helm.

Mit Helm-Charts können Sie auch hochkomplexe Kubernetes-Anwendungen definieren, versionieren, installieren, freigeben oder Upgrades oder Rollbacks durchführen.

Darüber hinaus wird die Verwendung von Helm empfohlen, weil andere Kubernetes-Umgebungen in Azure (z. B. Azure Dev Spaces) ebenfalls auf Helm-Charts basieren.

Helm wird von der Cloud Native Computing Foundation (CNCF) in Zusammenarbeit mit Microsoft, Google, Bitnami und der Helm-Community verwaltet.

Weitere Informationen zur Implementierung in Helm-Charts und Kubernetes finden Sie im Beitrag Using Helm Charts to deploy eShopOnContainers to AKS (Verwenden von Helm-Charts zum Bereitstellen von eShopOnContainers in AKS).

Zusätzliche Ressourcen