Übungen für eine nachhaltige Softwareentwicklung in Azure Kubernetes Service (AKS)
Bei den Prinzipien für eine nachhaltige Softwareentwicklung handelt es sich um eine Reihe von Kompetenzen, die Ihnen dabei helfen, nachhaltige Anwendungen zu definieren, zu erstellen und auszuführen. Das Ziel besteht darin, die CO2-Bilanz jedes Aspekts Ihrer Anwendung zu verbessern. Der Leitfaden zu Azure Well-Architected Framework für Nachhaltigkeit orientiert sich an The Principles of Sustainable Software Engineering der Green Software Foundation und bietet einen Überblick über die Prinzipien der nachhaltigen Softwareentwicklung.
Eine nachhaltige Softwareentwicklung bedeutet eine Verlagerung der Prioritäten und des Schwerpunkts. Bei der Entwicklung und Ausführung eines Großteils der Software stehen zumeist hohe Geschwindigkeit und kurze Wartezeiten im Vordergrund. Bei der nachhaltigen Softwareentwicklung geht es dagegen darum, die CO2-Emissionen so weit wie möglich zu senken.
- Das Anwenden von Prinzipien für eine nachhaltige Softwareentwicklung kann zur Beschleunigung oder zur Verringerung von Wartezeiten beitragen – etwa durch die Verkürzung des zurückzulegenden Network Traversals.
- Das Senken der CO2-Emissionen führt ggf. zur Verlangsamung oder zu längeren Wartezeiten – etwa aufgrund der Zurückstellung von Workloads mit niedriger Priorität.
Der folgende Leitfaden konzentriert sich auf Dienste, die Sie in Azure mit Azure Kubernetes Service (AKS) erstellen oder betreiben. Dieser Artikel enthält Entwurfs- und Konfigurationschecklisten, empfohlene Entwurfspraktiken und Konfigurationsoptionen. Überprüfen Sie die Prioritäten, Anforderungen und Nachteile für Ihre Anwendung, bevor Sie Prinzipien für eine nachhaltige Softwareentwicklung auf Ihre Anwendung anwenden.
Voraussetzungen
- Das Verständnis der Nachhaltigkeitsrichtlinien von Well-Architected Framework können Ihnen helfen, eine qualitativ hochwertige, stabile und effiziente Cloudarchitektur zu erstellen. Es wird empfohlen, mehr über nachhaltige Workloads zu lesen und Ihre Workload mithilfe der Microsoft Azure Well-Architected Review-Bewertung zu überprüfen.
- Die eindeutig definierten Geschäftsanforderungen sind entscheidend für das Erstellen von Anwendungen, da sie möglicherweise direkte Auswirkungen auf Cluster- und Workloadarchitekturen und -konfigurationen haben. Überprüfen Sie beim Erstellen oder Aktualisieren vorhandener Anwendungen neben dem ganzheitlichen Lebenszyklus Ihrer Anwendung die Entwurfsbereiche für Nachhaltigkeit von Well-Architected Framework.
Grundlegendes zum Modell der gemeinsamen Verantwortung
Nachhaltigkeit ist eine gemeinsame Verantwortung von Cloudanbietern und Kunden oder Partnern, sie AKS-Cluster auf der Plattform entwickeln und einsetzen. Die Bereitstellung von AKS macht es nicht automatisch nachhaltig, auch wenn die Rechenzentren für Nachhaltigkeit optimiert sind. Durch nicht ordnungsgemäß optimierte Anwendungen wird möglicherweise mehr CO2 als erforderlich ausgestoßen.
Erfahren Sie mehr über das Modell der gemeinsamen Verantwortung für Nachhaltigkeit.
Entwurfsprinzipien
CO2-Effizienz: Reduzieren Sie den CO2 so weit wie möglich.
Eine CO2-effiziente Cloudanwendung ist eine optimierte Anwendung, und der Ausgangspunkt hierfür ist die Kostenoptimierung.
Energieeffizienz: Verwenden Sie die geringstmögliche Energiemenge.
Eine Möglichkeit, die Energieeffizienz zu steigern, besteht darin, die Anwendung auf so wenigen Servern wie möglich und mit der höchsten Auslastungsrate auszuführen. Dadurch wird auch die Hardwareeffizienz erhöht.
Hardwareeffizienz: Reduzieren Sie den CO2-Bedarf, so weit es geht.
Es gibt zwei Hauptansätze für die Hardwareeffizienz:
- Für Endbenutzergeräte wird die Lebensdauer der Hardware verlängert.
- Für Cloud Computing wird die Ressourcenauslastung erhöht.
CO2-Bewusstsein: Tun Sie mehr, wenn Sie sauberen Strom erhalten, und weniger, wenn Sie Strom aus „schmutzigen“ Energiequellen nutzen.
CO2-bewusst zu sein bedeutet, auf Veränderungen in der CO2-Intensität durch Erhöhen oder Senken der Nachfrage zu reagieren.
Entwurfsmuster und Methoden
Bevor Sie die detaillierten Empfehlungen in den einzelnen Entwurfsbereichen überprüfen, empfehlen wir Ihnen, die folgenden Entwurfsmuster für die Erstellung nachhaltiger Workloads in AKS sorgfältig zu berücksichtigen:
Anwendungsentwurf
In diesem Abschnitt erfahren Sie mehr darüber, wie Sie Ihre Anwendungen bezüglich eines nachhaltigeren Anwendungsentwurfs optimieren können.
Entwurf für die unabhängige Skalierung von logischen Komponenten
Eine Microservicearchitektur kann die erforderlichen Computeressourcen verringern, da sie die unabhängige Skalierung ihrer logischen Komponenten ermöglicht und gewährleistet, dass sie nach Bedarf skaliert werden.
- Ziehen Sie den Einsatz von Dapr Framework oder anderer CNCF-Projekte in Betracht, um Ihre Anwendungsfunktionalität in verschiedene Microservices aufzuteilen und so eine unabhängige Skalierung der logischen Komponenten zu ermöglichen.
Entwurf für die ereignisgesteuerte Skalierung
Wenn Sie ihre Workload auf der Grundlage relevanter Geschäftsmetriken wie HTTP-Anfragen, Warteschlangenlänge und Cloudereignisse skalieren, kann das dazu beitragen, die Ressourcenverwendung und die CO2-Emissionen zu reduzieren.
- Verwenden Sie Keda beim Erstellen von ereignisgesteuerten Anwendungen, um die Skalierung auf Null zu ermöglichen, wenn keine Nachfrage besteht.
Ziel für den zustandslosen Entwurf
Das Entfernen des Zustands aus Ihrem Entwurf reduziert die für den Betrieb der Workload erforderlichen Daten im Arbeitsspeicher oder auf den Datenträgern.
- Erwägen Sie den zustandslosen Entwurf, um unnötige Netzwerklasten, Datenverarbeitung und Computeressourcen zu reduzieren.
Anwendungsplattform
Erkunden Sie diesen Abschnitt, um zu erfahren, wie Sie fundiertere plattformbezogene Entscheidungen bezüglich Nachhaltigkeit treffen.
Aktivieren von automatischen Cluster- und Knotenupdates
Ein aktueller Cluster vermeidet unnötige Leistungsprobleme und stellt sicher, dass Sie von den neuesten Leistungsverbesserungen und Computeoptimierungen profitieren.
- Aktivieren Sie das automatische Clusterupgrade, und wenden Sie Sicherheitsupdates auf Knoten automatisch mithilfe von GitHub Actions an, um sicherzustellen, dass Ihr Cluster über die neuesten Verbesserungen verfügt.
Installieren von unterstützten Add-Ons und Erweiterungen
Add-Ons und Erweiterungen, die von der AKS-Supportrichtlinie abgedeckt werden, bieten weitere unterstützte Funktionen für Ihren Cluster und ermöglichen es Ihnen, über den gesamten Clusterlebenszyklus hinweg von den neuesten Leistungsverbesserungen und Energieoptimierungen zu profitieren.
- Installieren Sie KEDA als Add-On.
- Installieren Sie GitOps und Dapr als Erweiterungen.
Containerisieren Ihrer Workload, sofern möglich
Mithilfe von Containern können Sie unnötige Ressourcenzuweisungen reduzieren und die bereitgestellten Ressourcen besser nutzen, da sie das Bin-Packing ermöglichen und weniger Computeressourcen als virtuelle Computer erfordern.
- Verwenden Sie Entwurf, um die Anwendungscontainerisierung durch Generieren von Dockerfiles und Kubernetes-Manifesten zu vereinfachen.
Verwenden von energieeffizienter Hardware
Die cloudnativen Prozessoren von Ampere sind einzigartig, und wurden entwickelt, um die Hochleistungs- und Energieeffizienzanforderungen der Cloud zu erfüllen.
- Bewerten Sie, ob Knoten mit Ampere Altra ARM-basierten Prozessoren eine gute Option für Ihre Workloads sind.
Anpassen der Skalierbarkeitsanforderungen und Nutzen automatischer Skalierungs- und Burstingfunktionen
Ein überdimensionierter Cluster maximiert die Verwendung von Computeressourcen nicht und kann zu einer Verschwendung von Energie führen. Trennen Sie Ihre Anwendungen in verschiedene Knotenpools auf, um die Größenoptimierung und unabhängige Skalierung des Clusters entsprechend den Anwendungsanforderungen zu ermöglichen. Wenn die Kapazität Ihres AKS-Clusters erschöpft ist, wechseln Sie von AKS zu ACI, um zusätzliche Pods auf serverlose Knoten zu aufzuskalieren und sicherzustellen, dass Ihre Workload alle zugewiesenen Ressourcen effizient nutzt.
- Skalieren Sie Ihren Cluster so, dass er den Skalierbarkeitsanforderungen Ihrer Anwendung entspricht. Verwenden Sie die automatische Clusterskalierung mit virtuellen Knoten, um die Nutzung von Computeressourcen schnell zu skalieren und zu maximieren.
- Sie können auch Ressourcenkontingente auf Namespaceebene erzwingen, und Benutzerknotenpools auf 0 skalieren, wenn keine Nachfrage besteht.
Deaktivieren von Workloads und Knotenpools außerhalb der Geschäftszeiten
Bestimmte Workloads müssen möglicherweise nicht ständig ausgeführt und können abgeschaltet werden, um die Energieverschwendung und die CO2-Emissionen zu verringern. Sie können Ihre Knotenpools in Ihrem AKS-Cluster vollständig deaktivieren (beenden), sodass Sie auch Computekosten sparen können.
- Verwenden Sie Knotenpool beenden/starten, um Ihre Knotenpools außerhalb der Geschäftszeiten zu deaktivieren.
- Verwenden Sie den KEDA CRON-Scaler, um Ihre Workloads (Pods) zeitabhängig herunterzuskalieren.
Betriebsprozeduren
In diesem Abschnitt erfahren Sie, wie Sie Ihre Umgebung für die Messung und kontinuierliche Verbesserung der Kosten- und CO2-Effizienz Ihrer Workloads einrichten können.
Löschen nicht verwendeter Ressourcen
Sie sollten nicht verwendete Ressourcen, wie z. B. nicht referenzierte Images und Speicherressourcen, identifizieren und löschen, da sie sich direkt auf Hardware und Energieeffizienz auswirken. Sie sollten die Identifizierung und Löschung ungenutzter Ressourcen als Prozess und nicht als punktuelle Aktivität betrachten, um eine kontinuierliche Energieoptimierung zu gewährleisten.
- Verwenden Sie Azure Advisor, um unausgelastete Ressourcen zu identifizieren.
- Verwenden Sie ImageCleaner, um veraltete Images zu bereinigen und einen Risikobereich in Ihrem Cluster zu beseitigen.
Taggen Ihrer Ressourcen
Für die Erstellung von Berichten über Leistung und Ressourcenverwendung ist es wichtig, die richtigen Informationen und Erkenntnisse zum richtigen Zeitpunkt zu erhalten.
- Legen Sie Azure-Tags in Ihrem Cluster fest, um die Überwachung Ihrer Workloads zu ermöglichen.
Storage
In diesem Abschnitt erfahren Sie, wie Sie eine nachhaltigere Datenspeicherarchitektur entwerfen und vorhandene Bereitstellungen optimieren können.
Optimieren der Speichernutzung
Die Datenabruf- und Datenspeichervorgänge können erhebliche Auswirkungen auf die Energie- und Hardwareeffizienz haben. Das Entwerfen von Lösungen mit dem richtigen Datenzugriffsmuster kann den Energieverbrauch und damit verbundenen CO2-Fußabdruck reduzieren.
- Sie müssen die Anforderungen Ihrer Anwendung verstehen, um den geeigneten Speicher auszuwählen und mithilfe von Speicherklassen zu definieren und so die Unterauslastung von Speicher zu vermeiden.
- Ziehen Sie die dynamische Bereitstellung von Volumes zur automatischen Skalierung der Anzahl der Speicherressourcen in Betracht.
Netzwerk und Konnektivität
In diesem Abschnitt erfahren Sie, wie Sie die Netzeffizienz verbessern und optimieren können, um unnötige CO2-Emissionen zu reduzieren.
Auswählen einer Region die den Benutzern möglichst nah ist
Der Abstand zwischen Rechenzentrum und Nutzern hat einen erheblichen Einfluss auf den Energieverbrauch und die CO2-Emissionen. Durch die Verkürzung der Entfernung, die ein Netzwerkpaket reist, wird sowohl Ihre Energieeffizienz als auch die CO2-Effizienz verbessert.
- Überprüfen Sie Ihre Anwendungsanforderungen und Azure-Geografien, um eine Region auszuwählen, die dem Ziel der meisten Netzwerkpakete am nächsten liegt.
Reduzieren des Network Traversals zwischen Knoten
Die Platzierung von Knoten in einer einzigen Region oder einer einzigen Verfügbarkeitszone verringert die physische Entfernung zwischen den Instanzen. Für geschäftskritische Workloads müssen Sie jedoch sicherstellen, dass Ihr Cluster über mehrere Verfügbarkeitszonen verteilt ist, was zu einem größeren Network Traversal und einer Erhöhung Ihres CO2-Fußabdrucks führen kann.
- Erwägen Sie, Ihre Knoten in einer Näherungsplatzierungsgruppe bereitzustellen, um den Network Traversal zu verringern, indem Sie sicherstellen, dass Ihre Computeressourcen physisch nah beieinander liegen.
- Konfigurieren Sie für kritische Workloads Näherungsplatzierungsgruppen mit Verfügbarkeitszonen.
Bewerten mithilfe eines Dienstnetzes
Ein Dienstnetz stellt zusätzliche Container für die Kommunikation bereit, in der Regel in einem Sidecar-Muster, um mehr operative Funktionen bereitzustellen, was zu einer Erhöhung der CPU-Auslastung und des Netzwerkdatenverkehrs beiträgt. Dennoch können Sie Ihre Anwendung von diesen Funktionen entkoppeln, da sie von der Anwendungsschicht auf die Infrastrukturebene verlagert werden.
- Berücksichtigen Sie sorgfältig den durch die Kommunikationskomponenten des Dienstnetzes generierten Anstieg der CPU-Auslastung und des Netzwerkverkehrs, bevor Sie sich für den Einsatz einer solchen Komponente entscheiden.
Optimieren der Protokollsammlung
Das Senden und Speichern aller Protokolle aus allen möglichen Quellen (Workloads, Dienste, Diagnosen und Plattformaktivitäten) kann den Speicherbedarf und Netzwerkdatenverkehr steigern, was sich in höheren Kosten und CO2-Emissionen niederschlägt.
- Stellen Sie sicher, dass Sie nur die Protokolldaten sammeln und aufbewahren, die zur Unterstützung Ihrer Anforderungen erforderlich sind. Konfigurieren Sie Datensammlungsregeln für Ihre AKS-Workloads und implementieren Sie Entwurfsüberlegungen zur Optimierung Ihrer Log Analytics-Kosten.
Zwischenspeichern statischer Daten
Die Verwendung von Content Delivery Network (CDN) ist ein nachhaltiger Ansatz zur Optimierung des Netzwerkverkehrs, da es die Datenverschiebungen in einem Netzwerk reduziert. Die Wartezeiten werden minimiert, indem häufig gelesene statische Daten näher beim Benutzern gespeichert werden, was dazu beiträgt, den Netzwerkverkehr und die Serverlast zu reduzieren.
- Halten Sie sich an die bewährten Methoden für CDN.
- Ziehen Sie die Verwendung von Azure CDN in Erwägung, um die verbrauchte Bandbreite zu senken und Kosten niedrig zu halten.
Sicherheit
In diesem Abschnitt erfahren Sie mehr über die Empfehlungen, die zu einer nachhaltigen, angemessen dimensionierten Sicherheitsstrategie führen.
Bewerten, ob TLS-Abschluss verwendet werden soll
Über Transport Layer Security (TLS) wird sichergestellt, dass alle Daten privat und verschlüsselt zwischen dem Webserver und dem Webbrowser übertragen werden. Das Beenden und erneute Einrichten von TLS erhöht jedoch die CPU-Auslastung und kann in bestimmten Architekturen unnötig sein. Ein ausgewogenes Sicherheitsniveau kann eine nachhaltigere und energieeffizientere Workload bieten, während ein höheres Sicherheitsniveau die Computeressourcenanforderungen erhöhen kann.
- Überprüfen Sie die Informationen zum TLS-Abschluss bei Verwendung von Application Gateway oder Azure Front Door. Bestimmen Sie, ob Sie TLS an Ihrem Border Gateway beenden und ohne TLS zu Ihrem Workload-Lastenausgleich und zu Ihrer Workload fortfahren.
Verwenden von cloudnativen Netzwerksicherheitstools und -kontrollen
Azure Font Door und Application Gateway helfen bei der Verwaltung des Datenverkehrs von Webanwendungen, während Azure Web Application Firewall Schutz vor den Top 10 der OWASP-Angriffe sowie Lastabschaltung bei bösartigen Bots am Netzwerkedge bietet. Diese Funktionen tragen dazu bei, unnötige Datenübertragungen zu vermeiden und die Belastung der Cloudinfrastruktur zu reduzieren, indem geringere Bandbreiten und weniger Infrastrukturanforderungen anfallen.
- Mit dem Application Gateway Ingress Controller (AGIC) in AKS können Sie den Datenverkehr am Netzwerkedge filtern und auslagern, damit er nicht zu Ihrem Ursprung gelangt, um den Energieverbrauch und die CO2-Emissionen zu reduzieren.
Überprüfen auf Sicherheitsrisiken
Viele Angriffe auf Cloudinfrastrukturen zielen darauf ab, die bereitgestellten Ressourcen zum direkten Vorteil des Angreifers zu missbrauchen, was zu einem unnötigen Anstieg der Verwendung und der Kosten führt. Tools zur Überprüfung auf Sicherheitsrisiken tragen dazu bei, das Zeitfenster für Angreifer zu minimieren und eine mögliche böswillige Nutzung von Ressourcen einzudämmen.
- Befolgen Sie die Empfehlungen von Microsoft Defender for Cloud.
- Führen Sie automatisierte Scantools für Sicherheitslücken aus, z. B. Defender for Containers, um unnötige Ressourcennutzung zu vermeiden. Diese Tools helfen, Sicherheitsrisiken in Ihren Images zu identifizieren und das Zeitfenster für Angreifer zu minimieren.
Nächste Schritte
Azure Kubernetes Service