Dieser Artikel befasst sich mit der Open-Source-Version von Magento, einer in PHP geschriebenen E-Commerce-Plattform. In diesem Artikel geht es nicht um Adobe Commerce. In diesem Beispielszenario wird die Bereitstellung von Magento in Azure Kubernetes Service (AKS) gezeigt, und es werden allgemeine bewährte Methoden für das Hosting von Magento in Azure beschrieben.
Aufbau
Laden Sie eine Visio-Datei dieser Architektur herunter.
Workflow
- Bei Azure Kubernetes Service (AKS) wird der Kubernetes-Cluster für Varnish, Magento, Redis und Elasticsearch in unterschiedlichen Pods bereitgestellt.
- AKS erstellt ein virtuelles Netzwerk für die Bereitstellung der Agent-Knoten. Erstellen Sie das virtuelle Netzwerk im Voraus, um die Subnetzkonfiguration, die private Verbindung und die Ausgangseinschränkung einzurichten.
- Varnish wird vor den HTTP-Servern als Cache für vollständige Seiten installiert.
- Azure Database for MySQL speichert Transaktionsdaten wie Bestellungen und Kataloge. Empfohlen wird Version 8.0.
- In Azure Files Premium, Azure NetApp Files oder einem entsprechenden NAS (Network Attached Storage)-System werden Mediendateien wie Produktbilder gespeichert. Magento benötigt ein mit Kubernetes kompatibles Dateisystem, das ein Volume im Modus ReadWriteMany einbinden kann, z. B. Azure Files Premium oder Azure NetApp Files. Speicheroptionen für Anwendungen in Azure Kubernetes Service (AKS). Es wird dringend empfohlen, den IOPS-Durchsatz (Ein-/Ausgabevorgänge pro Sekunde) zu testen und die für Sie geeigneten Optionen auszuwählen.
- Ein Content Delivery Network (CDN) stellt statische Inhalte wie CSS, JavaScript und Bilder bereit. Die Bereitstellung von Inhalten über ein CDN minimiert die Netzwerklatenz zwischen Benutzern und dem Rechenzentrum. Ein CDN kann das NAS deutlich entlasten, indem statische Inhalte zwischengespeichert und bereitgestellt werden.
- Redis speichert Sitzungsdaten. Aus Leistungsgründen wird das Hosten von Redis in Containern empfohlen.
- AKS verwendet eine Microsoft Entra ID-Identität, um andere Azure-Ressourcen wie Azure-Load Balancer, Benutzerauthentifizierung, rollenbasierte Zugriffssteuerung und verwaltete Identitäten zu erstellen und zu verwalten.
- In Azure Container Registry werden die privaten Docker-Images gespeichert, die im AKS-Cluster bereitgestellt werden. Sie können auch andere Containerregistrierungen nutzen, z. B. Docker Hub. Die standardmäßige Magento-Installation schreibt einige Geheimnisse in das Image.
- Azure Monitor erfasst und speichert Metriken und Protokolle, einschließlich Plattformmetriken für Azure-Dienste und Anwendungstelemetrie. Azure Monitor wird in AKS integriert, um Metriken von Controllern, Knoten und Containern sowie Container- und Knotenprotokolle zu erfassen.
Komponenten
- Azure Kubernetes Service (AKS): Skalieren von Containern für einen Managed Kubernetes-Dienst
- Azure Virtual Network: Virtuelle Netzwerke in der Cloud
- Azure Database for MySQL: MySQL in der Cloud ist kostengünstig und lässt sich leicht einrichten, betreiben und skalieren.
- Azure Files: Dateifreigaben in der Cloud. Diese Lösung verwendet den Premium-Tarif.
- Azure NetApp Files: Von NetApp unterstützte Azure-Dateifreigaben für Unternehmen
- Azure Content Delivery Network: Ein schnelles, zuverlässiges und globales Content Delivery Network
- Microsoft Entra ID: Multicloudidentitäts- und -zugriffsverwaltung.
- Azure Container Registry: Dies ist eine Registrierung für Docker- und OCI-Images (Open Container Initiative), die alle OCI-Artefakte unterstützt.
- Azure Monitor: End-to-End-Einblick für Ihre Anwendungen, Ihre Infrastruktur und Ihr Netzwerk
Szenariodetails
Weitere Informationen zu Magento finden Sie in der Übersicht über die lokale Installation.
Mögliche Anwendungsfälle
Diese Lösung ist für den Einzelhandel optimiert.
Ü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.
Sicherheit
Im Folgenden finden Sie einige Überlegungen zur Sicherheit in diesem Szenario:
Konfigurieren Sie eine private Verbindung für MySQL, damit der Datenverkehr zwischen Clients und MySQL nicht mit dem öffentlichen Internet in Kontakt kommt. Weitere Informationen finden Sie unter Was ist Azure Private Link?.
Sie können Azure Application Gateway Ingress hinzufügen, um einen SSL-Abschluss (Secure Sockets Layer) zu unterstützen.
Sie können Azure Web Application Firewall auch zusammen mit Application Gateway aktivieren, um den Datenverkehr zu schützen, der in die Webanwendung, die in Ihrem AKS-Cluster gehostet wird, gelangt.
Rollenbasierte Zugriffssteuerung (Role-Based Access Control, RBAC)
Kubernetes und Azure verfügen jeweils über Mechanismen für die rollenbasierte Zugriffssteuerung (RBAC) .
Mit Azure RBAC wird der Zugriff auf Azure-Ressourcen gesteuert, z. B. die Möglichkeit zum Erstellen neuer Ressourcen. Die Azure RBAC kann Benutzern, Gruppen und Dienstprinzipalen Berechtigungen zuweisen, bei denen es sich um von Anwendungen verwendete Sicherheitsidentitäten handelt.
Mit der rollenbasierten Zugriffssteuerung von Kubernetes werden die Berechtigungen für die Kubernetes-API gesteuert. Das Erstellen und Auflisten von Pods sind z. B. Aktionen, für die Benutzer mit der RBAC in Kubernetes autorisiert werden können.
In AKS sind die RBAC-Mechanismen von Azure und Kubernetes integriert. Wenn Sie Benutzern AKS-Berechtigungen zuweisen möchten, erstellen Sie Rollenund Rollenbindungen:
Eine Rolle ist ein Satz mit Berechtigungen, die innerhalb eines Namespace gelten. Berechtigungen werden in Form von Verben (z. B. abrufen, aktualisieren, erstellen, löschen) für Ressourcen (z. B. Pods, Bereitstellungen) definiert.
Mit einer Rollenbindung werden Benutzer oder Gruppen Rollen zugewiesen.
Ein ClusterRole-Objekt definiert eine Rolle, die für den gesamten Cluster in allen Namespaces gilt. Erstellen Sie eine Clusterrollenbindung (ClusterRoleBinding), um Benutzer oder Gruppen einer Clusterrolle (ClusterRole) zuzuweisen.
Alternativ können Sie Azure RBAC für die Kubernetes-Autorisierung verwenden, die eine einheitliche Verwaltungs- und Zugriffssteuerung für Azure-Ressourcen, AKS- und Kubernetes-Ressourcen ermöglicht.
Beim Erstellen des AKS-Clusters können Sie diesen so konfigurieren, dass Microsoft Entra ID für die Benutzerauthentifizierung verwendet wird.
Ausführliche Informationen zum Einrichten der Microsoft Entra-Integration finden Sie unter Von AKS verwaltete Microsoft Entra-Integration.
Weitere Informationen zum Steuern des Zugriffs auf Clusterressourcen mithilfe der rollenbasierten Zugriffssteuerung in Kubernetes und von Microsoft Entra-Identitäten finden Sie im Artikel zum Verwenden der rollenbasierten Zugriffssteuerung in Kubernetes mit Microsoft Entra ID.
Skalierbarkeit
Es gibt mehrere Möglichkeiten, die Skalierbarkeit für dieses Szenario zu optimieren:
Medien- und statische Dateien
Verwenden Sie angemessene Bereitstellung von Azure Files, Azure NetApp Files oder anderen NAS-Systemen (Network Attached Storage). In Magento können Tausende von Mediendateien, z. B. Produktbilder, gespeichert werden. Stellen Sie sicher, dass Sie NAS-Produkte mit ausreichend Ein-/Ausgabevorgängen pro Sekunde (IOPS) bereitstellen, um die Nachfrage bedienen zu können.
Minimieren Sie die Größe von statischem Inhalt wie HTML, CSS und JavaScript. Eine Minimierung reduziert die Bandbreitenkosten und erhöht die Benutzerfreundlichkeit.
Datenbankverbindung
Aktivieren Sie eine dauerhafte Verbindung mit der MySQL-Datenbank, sodass Magento immer wieder die vorhandene Verbindung verwendet, anstatt für jede Anforderung eine neue herzustellen. Fügen Sie die folgende Zeile im Abschnitt
db
der Magento-Datei env.php hinzu, um die dauerhafte Verbindung zu aktivieren:'persistent' => '1'
Wenn MySQL die CPU zu sehr beansprucht, verringern Sie die Auslastung, indem Sie product count in der Navigationsstruktur in Magento configuration deaktivieren:
magento config:set -vvv catalog/layered_navigation/display_product_count 0
Caching
Konfigurieren Sie OPcache zum Zwischenspeichern und Optimieren von PHP-Code.
Stellen Sie sicher, dass die folgenden Direktiven in php.ini festgelegt und nicht auskommentiert sind:
opcache.enable=1
opcache.save_comments=1
opcache.validate_timestamps=0
Nehmen Sie einen Lastenausgleich für den Varnish-Cache vor, indem Sie mehrere Instanzen auf Pods ausführen, sodass eine Skalierung möglich ist.
Protokollierung
Beschränken Sie die Zugriffsprotokollierung, um Leistungsprobleme zu vermeiden und eine Offenlegung vertraulicher Daten wie der Client-IP-Adressen zu verhindern.
Verwenden Sie den folgenden Varnish-Befehl, um die Protokollierung auf die Fehlerstufe zu beschränken:
varnishd -s malloc,1G -a :80 -f /etc/varnish/magento.vcl && varnishlog -q "RespStatus >= 400 or BerespStatus >= 400"
Wenn Sie einen Apache-Webserver für eingehenden Datenverkehr verwenden, beschränken Sie die Apache-Protokollierung auf die Fehlerstufe, indem Sie die folgende Zeile zum Magento-Eintrag
VirtualHost
in der Apache-Serverkonfiguration hinzufügen:CustomLog /dev/null common
Deaktivieren Sie die PHP-FPM-Zugriffsprotokolle, indem Sie die Einstellung
access.log
in allen PHP-FPM-Konfigurationen auskommentieren.
Verfügbarkeit
Berücksichtigen Sie die folgenden Möglichkeiten, um die Verfügbarkeit bei diesem Szenario zu optimieren:
Integritätstests
Mit Kubernetes werden zwei Arten von Integritätstest definiert:
- Der Bereitschaftstest teilt Kubernetes mit, ob der Pod für das Akzeptieren von Anforderungen bereit ist.
- Der Livetest teilt Kubernetes mit, ob ein Pod entfernt und eine neue Instanz gestartet werden soll.
Passen Sie die Kubernetes-Integritätstests an, und verwenden Sie sie, um festzustellen, ob sich ein Pod in gutem Zustand befindet.
Verfügbarkeitszonen
Verfügbarkeitszonen sind physisch getrennte Standorte innerhalb von Azure-Regionen, die dazu beitragen, Anwendungen und Daten vor Ausfällen von Rechenzentren zu schützen. Jede Zone enthält mindestens ein Rechenzentrum. Anwendungen in Zonen bleiben auch dann verfügbar, wenn ein Rechenzentrum physisch ausfällt.
AKS-Cluster können über mehrere Verfügbarkeitszonen hinweg bereitgestellt werden, um eine höhere Verfügbarkeit zu gewährleisten und vor Hardwarefehlern oder geplanten Wartungsereignissen zu schützen. Wenn Sie Pools von Clusterknoten so definieren, dass sie mehrere Zonen umfassen, können die Knoten selbst beim Ausfall einer ganzen Zone fortgesetzt werden. Weitere Informationen zum Bereitstellen von AKS in Verfügbarkeitszonen finden Sie unter Erstellen eines AKS-Clusters, der Verfügbarkeitszonen verwendet.
Ressourceneinschränkungen
Ressourcenkonflikte können sich auf die Verfügbarkeit des Diensts auswirken. Definieren Sie Ressourceneinschränkungen für Container, damit ein einzelner Container die Arbeitsspeicher- und CPU-Ressourcen des Clusters nicht überlasten kann. Sie können die AKS-Diagnose verwenden, um Probleme im Cluster zu ermitteln.
Über das Ressourcenlimit können Sie die zulässige Gesamtanzahl von Ressourcen in einem Container einschränken, damit nicht ein Container die anderen beeinträchtigt.
DevOps
Im Folgenden finden Sie einige Überlegungen zum Betrieb in diesem Szenario:
In diesem Szenario macht MySQL keinen öffentlichen Endpunkt verfügbar. Wenn der Buildserver Konfigurationseinstellungen für die Back-End-MySQL-Datenbank speichert, stellen Sie sicher, dass Sie diesen Server im gleichen Subnetz des virtuellen Netzwerks bereitstellen, mit dem MySQL über den Dienstendpunkt eine Verbindung herstellt.
Verwenden Sie Azure Container Registry oder eine andere Containerregistrierung wie Docker Hub, um die privaten Docker-Images zu speichern, die im Cluster bereitgestellt werden. AKS kann die Authentifizierung per Azure Container Registry mit seiner eigenen Microsoft Entra-Identität durchführen.
Monitoring
Azure Monitor bietet Schlüsselmetriken für alle Azure-Dienste, einschließlich Containermetriken aus AKS. Erstellen Sie ein Dashboard, um alle Metriken an einem Ort anzuzeigen.
Neben der Verwendung von Azure Monitor für Container können Sie jetzt den verwalteten Dienst für Prometheus verwenden, um Metriken in großen Mengen über eine Prometheus-kompatible Überwachungslösung zu sammeln und zu analysieren.
Sie können auch Azure Managed Grafana (oder selbstverwaltete Grafana) verwenden, um Prometheus-Metriken zu visualisieren. Wenn Sie Azure Managed Grafana verwenden, kann Grafana durch das Verbinden Ihres Azure Monitor-Arbeitsbereichs mit dem Azure Managed Grafana-Arbeitsbereich die Azure Monitor-Arbeitsbereichsdaten in einem Grafana-Dashboard verwenden. Anschließend haben Sie Zugriff auf mehrere vordefinierte Dashboards, die Prometheus-Metriken verwenden, und Sie können auch benutzerdefinierte Dashboards erstellen.
Leistungstests
Verwenden Sie das Magento Performance Toolkit für Leistungstests. Das Toolkit verwendet Apache JMeter, um Kundenverhalten wie Anmelden, Durchsuchen von Produkten und Auschecken zu simulieren.
Sie sollten die Verwendung von Azure Load Testing erwägen, ein vollständig verwalteter Auslastungstestdienst, mit dem Sie eine hohe Auslastung generieren können. Mit Azure Load Testing können Sie schnell einen Auslastungstest für Ihre Webanwendung erstellen, indem Sie eine URL verwenden. Alternativ können Sie für komplexere Auslastungstestszenarien einen Auslastungstest erstellen, indem Sie ein vorhandenes Apache JMeter-Testskript wiederverwenden.
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“.
Greifen Sie bei der Kapazitätsplanung auf Leistungstests zurück.
Verwenden Sie den Azure-Preisrechner, um die voraussichtlichen Kosten zu ermitteln.
Weitere Erläuterungen zu Kostenaspekten finden Sie im Microsoft Azure Well-Architected Framework unter Grundsätze der Kostenoptimierung.