In diesem Artikel wird gezeigt, wie Sie eine Anwendung, die Projekte der Cloud Native Computing Foundation (CNCF) verwendet, nach der Bereitstellung von Azure Kubernetes Service (AKS) konzeptualisieren, entwickeln und bereitstellen. In der Architektur wird die CNCF-Projektapp auf GitHub beschrieben. Die Setupanweisungen im Repository enthalten Schritte zum Bereitstellen der Architektur.
Aufbau
Laden Sie eine Visio-Datei dieser Architektur herunter.
Die Workload ist eine einfache Webanwendung, mit der Mitarbeiter Spesenberichte übermitteln und anzeigen können. Wenn ein Mitarbeiter eine Spesenabrechnung übermittelt, erhält der Vorgesetzte des Mitarbeiters eine E-Mail.
Workflow
Anwendungsfluss
1. Der Mitarbeiter greifen über NGINX Ingress auf eine Web-App zu, um Ausgaben zu übermitteln.
2. Die Web-App ruft eine API-App auf, um den Vorgesetzten des Mitarbeiters abzurufen.
3. Die Web-App sendet eine Nachricht, die für die Erstellung der Spesenabrechnung generiert wird, an einen Knative-Broker.
4. Die Spesenabrechnung wird in MySQL gespeichert.
5. Knative löst die E-Mail-Dispatcher-Funktion mit der Spesennachricht als Nutzlast aus.
6. E-Mail-Dispatcher erstellt eine SendGrid-Nachricht.
7. SendGrid sendet eine E-Mail zur Überprüfung an den abgerufenen Manager.
DevOps-Flow
a. Entwickler schreiben oder aktualisieren den Code in Visual Studio Code.
b. Entwickler pushen den Code in GitHub lokalen Arbeitsbereich in Visual Studio Code.
c. GitHub Webhook löst Tekton-Pipelines aus, die den GitHub-Code klont.
d. Pipelines erstellen und übertragen die Container-Images in eine Harbor-Registrierung.
e. Tekton stellt die Web-App, API-App und E-Mail-Dispatcher-Anwendungen bereit.
f. Prometheus erfasst Anwendungsmetriken.
g. Techniker überwachen Metriken auf einem Grafana-Dashboard.
h. DevOps-Techniker überwachen das Grafana-Dashboard.
Infrastruktur
i. AKS-Cluster, der auf der Infrastruktur basiert, die in der AKS-Baseline dargestellt wird.
ii. Rook Ceph, verwendet für den Clusterspeicher.
iii. Linkerd-Dienstnetz.
iv. Jaeger für die allgemeine Anwendungsablaufverfolgung im Kubernetes-Cluster.
Clustervorgänge
Möglicherweise ist es vorteilhaft, Cluster und Cluster-Boottrapping mithilfe der GitOps-Verwaltung zu verwalten. Flux ist ein beliebter GitOps-Operator. Sie wird häufig mit GitHub Actions gekoppelt, um die Validierung aktualisierter Manifeste und Helm-Diagramme zu ermöglichen.
Komponenten
Azure
- Azure Kubernetes Service (AKS): Stellt die verwaltete Clusterinfrastruktur zur Verfügung.
Open-Source-Software
- Kubernetes. CNCF. Automatisiert die Bereitstellung, Skalierung und Verwaltung von Anwendungen in Containern.
- Flux. CNCF. GitOps-Anbieter für die Infrastrukturbereitstellung.
- Rook. CNCF. Bietet Speicherverwaltung für die Cluster.
- Harbor. CNCF. Containerregistrierung für die Images.
- Linkerd. CNCF. Dienstnetz, das in OpenFaaS, NGINX, Prometheus und Jaeger integriert werden kann.
- Prometheus. CNCF. Erfasst Anwendungsmetriken.
- Jaeger. CNCF. Jaeger für die allgemeine Anwendungsablaufverfolgung im Kubernetes-Cluster.
- Knative. CNCF. Wird verwendet, um serverlose und ereignisgesteuerte Anwendungen zu erstellen. Stellt die E-Mail-Dispatcher-Funktion bereit.
- MySQL. Datenbank, in der die Spesenabrechnungen gespeichert werden.
- NGINX. Kubernetes-Eingangsdatencontroller, mit dem Mitarbeiter auf die Web-App zugreifen, um Spesenabrechnungen zu übermitteln.
- Tekton. Continuous Delivery Foundation-Projekt, das für Continuous Integration/Continuous Deployment (CI/CD) verwendet wird. Stellt die Web-App, API-App und E-Mail-Dispatcher-Anwendungen bereit.
- Grafana: Dashboard für Anwendungsmetriken.
- SendGrid. Externer E-Mail-Dienst, der E-Mails an den Vorgesetzten zur Überprüfung der Spesenabrechnung sendet.
- GitHub. Coderepository. Tekton-Pipelines verwenden GitHub-Code.
- .NET Core. Wird für das Web-Front-End und die Web-API verwendet.
- Flux. Bietet GitOps-Verwaltung.
Alternativen
In diesem Projekt werden per CNCF gestaffelte und inkubierte Projekte verwendet. Es kann mehrere Alternativen für die verwendeten Dienste geben. Alternativen finden Sie auf der CNCF-Webseite. Hier sind einige Ressourcen, die einige davon beschreiben:
- Vergleich der Dienstnetzoptionen
- Funktions-as-a-Service-Alternativen (serverlos)
- Vitess: Sharding von MySQL in Kubernetes
- Überwachen Ihrer Microservices mit Zipkin und OpenTracing
- GitOps mit einer entwicklerorientierten Erfahrung
Sie können verschiedene Azure-Dienste als Alternativen betrachten. Zum Beispiel Web Application Routing, Azure Container Registry, Azure Container Storage, Azure Monitor, Azure Monitor Managed Service für Prometheus, Azure Managed Grafana.
Microsoft unterstützt auch OSS-Projekte (Open-Source-Software) als verwaltete Add-Ons/abgeleitete Projekte in AKS, einschließlich NGINX, Istio, Prometheus, Grafana und OpenEBS.
Szenariodetails
Sie können diese Architektur in jedem Kubernetes-Cluster bereitstellen, nicht nur in AKS. Es enthält ein Beispiel für die Flexibilität der AKS-Plattform. AKS vereinfacht das Bereitstellen eines Managed Kubernetes-Clusters in Azure.
Nachdem Sie diesen Artikel durcharbeiten, haben Sie ein gutes Verständnis dafür, wie Sie eine typische Anwendung bereitstellen, die größtenteils aus CNCF-Projekten besteht.
Mögliche Anwendungsfälle
Folgende Anwendungsfälle verfügen über ähnliche Entwurfsmuster:
- Erstellen einer CI/CD-Pipeline für containerbasierte Workloads
- Verwenden von GitOps für AKS
Überlegungen
Diese Überlegungen beruhen auf den Säulen des Azure Well-Architected Frameworks, d. h. einer Reihe von Grundsätzen, mit denen die Qualität von Workloads verbessert werden kann. Weitere Informationen finden Sie unter Microsoft Azure Well-Architected Framework.
- Für den Kubernetes-Cluster benötigen Sie mindestens einen Benutzerknotenpool mit drei Knoten und mindestens einer VM-SKU DS2_v2.
- Volumes, die verwaltete Azure-Datenträger verwenden, können nicht zonenübergreifend angefügt werden. Sie müssen sich in derselben Zone befinden.
- Die Rook-Installation kann 20 bis 25 Minuten dauern. Stellen Sie sicher, dass der Ceph-Cluster vollständig eingerichtet ist, bevor Sie mit dem nächsten Schritt fortfahren.
- Das Jaeger-Setup dauert ca. 5 Minuten.
- Es dauert etwa 12 Minuten, bis Linkerd im Dashboard angezeigt wird.
Kostenoptimierung
Bei der Kostenoptimierung geht es um die Suche nach Möglichkeiten, unnötige Ausgaben zu reduzieren und die Betriebseffizienz zu verbessern. Weitere Informationen finden Sie unter Übersicht über die Säule „Kostenoptimierung“.
Sie können den Azure-Preisrechner verwenden, um die voraussichtlichen Kosten zu ermitteln. Im Folgenden finden Sie einige Überlegungen zu den Preisen für die Ausführung dieses Projekts in Azure. Es fallen vernachlässigbare Bandbreitenkosten an.
Virtual Machine Scale Sets
Für VMs, die in Azure Virtual Machine Scale Sets für den AKS-Cluster verwendet werden, wird eine Gebühr berechnet. Weitere Informationen finden Sie unter Microsoft Azure Virtual Machine Scale Sets – Preise.
Storage
Speicherkosten gelten für jeden Datenträger, der für die Rook-Installation erforderlich ist. Für diesen AKS-Cluster mit drei Knoten verwendet die Rook-Konfiguration zwei Datenträger pro Knoten: einen Datenträger mit 1 GB und einen Datenträger mit 200 GB. Weitere Informationen finden Sie unter Speicherkosten – Preise.
Load Balancer
Für den Lastenausgleich, der diesem AKS-Cluster zugeordnet ist, wird eine Gebühr berechnet. Weitere Informationen finden Sie unter Load Balancer – Preise.
Virtuelles Netzwerk
Für das virtuelle Netzwerk, das vom AKS-Cluster verwendet wird, wird eine Gebühr berechnet. Weitere Informationen finden Sie unter Virtual Network – Preise.
Bereitstellen dieses Szenarios
Stellen Sie dieses Szenario über das GitHub-Repository Azure/cloud-native-app bereit. Befolgen Sie die Setupanweisungen in der angegebenen Reihenfolge, um die App für die CNCF-Projekte in Ihrer Umgebung bereitzustellen.
Dieses Repository ist ein Communityprojekt. Es akzeptiert und genehmigt Pull Requests (PRs) für Verbesserungen und Änderungen aus der Community.
Nächste Schritte
- Schnellstart: Bereitstellen eines AKS-Clusters mithilfe des Azure-Portals
- Einführung in Azure Kubernetes Service