Bearbeiten

Freigeben über


Magento-E-Commerce-Plattform in Azure Kubernetes Service

Microsoft Entra ID
Azure Container Registry
Azure Database for MySQL
Azure Files
Azure Kubernetes Service (AKS)
Azure Monitor

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

Diagramm einer Bereitstellung von Magento in Azure Kubernetes Service mit anderen Azure-Komponenten.

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

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.

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.

Screenshot eines Azure Monitor-Überwachungsdashboards

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.

Screenshot eines Grafana-Dashboards

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.

Nächste Schritte