Redigera

Dela via


Magento e-handelsplattform i Azure Kubernetes Service

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

Den här artikeln handlar om den öppna källkodsversionen av Magento, en e-handelsplattform skriven i PHP. Den här artikeln handlar inte om Adobe Commerce. Det här exempelscenariot visar Magento som distribuerats till Azure Kubernetes Service (AKS) och beskriver vanliga metodtips för att hantera Magento i Azure.

Arkitektur

Diagram som visar Magento distribuerad i Azure Kubernetes Service med andra Azure-komponenter.

Ladda ned en Visio-fil med den här arkitekturen.

Arbetsflöde

  • Azure Kubernetes Service (AKS) distribuerar Kubernetes-klustret med Lack, Magento, Redis och Elasticsearch i olika poddar.
  • AKS skapar ett virtuellt nätverk för att distribuera agentnoderna. Skapa det virtuella nätverket i förväg för att konfigurera undernätskonfiguration, privat länk och begränsning av utgående trafik.
  • Lack installeras framför HTTP-servrarna för att fungera som en helsidescache.
  • Azure Database for MySQL lagrar transaktionsdata som beställningar och kataloger. Version 8.0 rekommenderas.
  • Azure Files Premium, Azure NetApp Files eller ett motsvarande NAS-system (Network Attached Storage) lagrar mediefiler som produktbilder. Magento behöver ett Kubernetes-kompatibelt filsystem som kan montera en volym i ReadWriteMany-läge , till exempel Azure Files Premium eller Azure NetApp Files. Lagringsalternativ för program i Azure Kubernetes Service (AKS). Vi rekommenderar starkt att du testar in- och utdataåtgärder per sekund (IOPS) och väljer de alternativ som fungerar åt dig.
  • Ett nätverk för innehållsleverans (CDN) hanterar statiskt innehåll som CSS, JavaScript och bilder. Att hantera innehåll via ett CDN minimerar nätverksfördröjningen mellan användare och datacentret. Ett CDN kan ta bort betydande belastning från NAS genom att cachelagra och hantera statiskt innehåll.
  • Redis lagrar sessionsdata. Att vara värd för Redis på containrar rekommenderas av prestandaskäl.
  • AKS använder en Microsoft Entra-ID-identitet för att skapa och hantera andra Azure-resurser som Azure-lastbalanserare, användarautentisering, rollbaserad åtkomstkontroll och hanterad identitet.
  • Azure Container Registry lagrar de privata Docker-avbildningar som distribueras till AKS-klustret. Du kan använda andra containerregister som Docker Hub. Standardinstallationen magento skriver några hemligheter till avbildningen.
  • Azure Monitor samlar in och lagrar mått och loggar, inklusive Azure-tjänstplattformsmått och programtelemetri. Azure Monitor integreras med AKS för att samla in kontrollant-, nod- och containermått samt container- och huvudnodloggar.

Komponenter

Information om scenario

Mer information om Magento finns i Översikt över lokal installation.

Potentiella användningsfall

Den här lösningen är optimerad för detaljhandeln.

Att tänka på

Dessa överväganden implementerar grundpelarna i Azure Well-Architected Framework, som är en uppsättning vägledande grundsatser som kan användas för att förbättra kvaliteten på en arbetsbelastning. Mer information finns i Microsoft Azure Well-Architected Framework.

Säkerhet

Här följer några säkerhetsöverväganden för det här scenariot:

Rollbaserad åtkomstkontroll (RBAC)

Både Kubernetes och Azure har mekanismer för rollbaserad åtkomstkontroll (RBAC).

  • Azure RBAC styr åtkomsten till Azure-resurser, inklusive möjligheten att skapa resurser. Azure RBAC kan tilldela behörigheter till användare, grupper eller tjänstens huvudnamn, som är säkerhetsidentiteter som används av program.

  • Kubernetes RBAC styr behörigheter till Kubernetes API. Att till exempel skapa poddar och visa poddar är åtgärder som Kubernetes RBAC kan auktorisera till användare.

AKS integrerar RBAC-mekanismerna i Azure och Kubernetes. Om du vill tilldela AKS-behörigheter till användare skapar du roller och rollbindningar:

  • En roll är en uppsättning behörigheter som gäller inom ett namnområde. Behörigheter definieras som verb som hämta, uppdatera, skapa eller ta bort på resurser som poddar eller distributioner.

  • Rollbindning tilldelar användare eller grupper till roller.

  • Ett ClusterRole-objekt definierar en roll som gäller för hela AKS-klustret i alla namnområden. Om du vill tilldela användare eller grupper till en ClusterRole skapar du en ClusterRoleBinding.

  • Du kan också använda Azure RBAC för Kubernetes-auktorisering, vilket möjliggör enhetlig hantering och åtkomstkontroll över Azure-resurser, AKS- och Kubernetes-resurser.

När du skapar AKS-klustret kan du konfigurera det så att det använder Microsoft Entra-ID för användarautentisering.

Skalbarhet

Det finns flera sätt att optimera skalbarheten för det här scenariot:

Media och statiska filer

  • Etablera Azure Files, Azure NetApp Files eller något annat NAS-system (network-attached storage). Magento kan lagra tusentals mediefiler, till exempel produktbilder. Se till att etablera NAS-produkter med tillräckliga indata-/utdataåtgärder per sekund (IOPS) för att hantera efterfrågan.

  • Minimera storleken på statiskt innehåll som HTML, CSS och JavaScript. Minification kan minska bandbreddskostnaderna och ge användarna en mer dynamisk upplevelse.

Databasanslutning

  • Aktivera beständig anslutning till MySQL-databasen, så Magento fortsätter att återanvända den befintliga anslutningen i stället för att skapa en ny för varje begäran. Om du vill aktivera beständig anslutning lägger du till följande rad i db avsnittet magento env.php-filen :

    'persistent' => '1'

  • Om MySQL förbrukar för mycket CPU minskar du användningen genom att inaktivera antalet produkter från lagernavigeringen i Magento-konfigurationen:

    magento config:set -vvv catalog/layered_navigation/display_product_count 0

Cachelagring

  • Konfigurera OPcache för CACHElagring och optimering av PHP-kod.

    Kontrollera att följande direktiv har angetts och inte har angetts i php.ini:

    opcache.enable=1

    opcache.save_comments=1

    opcache.validate_timestamps=0

  • Belastningsutjämning av lackcache genom att köra flera instanser på poddar så att den kan skalas.

Loggning

Begränsa åtkomstloggning för att undvika prestandaproblem och förhindra att känsliga data exponeras, till exempel klientens IP-adresser.

  • Använd följande lackkommando för att begränsa loggningen till felnivå:

    varnishd -s malloc,1G -a :80 -f /etc/varnish/magento.vcl && varnishlog -q "RespStatus >= 400 or BerespStatus >= 400"

  • Om du använder Apache-webbservern för ingress begränsar du Apache-loggning till felnivå genom att lägga till följande rad i Magento-posten VirtualHost i Apache Server-konfigurationen:

    CustomLog /dev/null common

  • Inaktivera PHP-FPM-åtkomstloggar genom att kommentera ut access.log inställningen i alla PHP-FPM-konfigurationer.

Tillgänglighet

Överväg följande sätt att optimera tillgängligheten för det här scenariot:

Hälsotillståndsavsökningar

Kubernetes definierar två typer av hälsoavsökningar:

  • Beredskapsavsökningen talar om för Kubernetes om podden är redo att ta emot begäranden.
  • Liveness-avsökningen talar om för Kubernetes om en podd ska tas bort och en ny instans startas.

Anpassa Kubernetes-hälsoavsökningarna och använd dem för att se om en podd är vid god hälsa.

Tillgänglighetszoner

Tillgänglighetszoner är unika fysiska platser i Azure-regioner som hjälper till att skydda program och data från datacenterfel. Varje zon består av ett eller flera datacenter. Program i zoner kan förbli tillgängliga även om det uppstår ett fysiskt fel i ett enda datacenter.

AKS-kluster kan distribueras över flera tillgänglighetszoner för att ge en högre tillgänglighetsnivå och skydda mot maskinvarufel eller planerade underhållshändelser. Genom att definiera klusternodpooler så att de sträcker sig över flera zoner kan noderna fortsätta att fungera även om en enda zon slutar fungera. Mer information om hur du distribuerar AKS till tillgänglighetszoner finns i Skapa ett AKS-kluster som använder tillgänglighetszoner.

Resursbegränsningar

  • Resurskonkurration kan påverka tjänstens tillgänglighet. Definiera begränsningar för containerresurser så att ingen enskild container kan överbelasta klusterminnet och CPU-resurserna. Du kan använda AKS-diagnostik för att identifiera eventuella problem i klustret.

  • Använd resursgränsen för att begränsa det totala antalet resurser som tillåts för en container, så att en viss container inte kan svälta andra.

DevOps

Här följer några operativa överväganden för det här scenariot:

  • I det här scenariot exponerar MySQL inte en offentlig slutpunkt. Om byggservern lagrar konfigurationsinställningar till serverdelens MySQL-databas ska du distribuera servern till samma virtuella nätverksundernät som MySQL ansluter till via tjänstslutpunkten.

  • Använd Azure Container Registry eller ett annat containerregister som Docker Hub för att lagra de privata Docker-avbildningar som distribueras till klustret. AKS kan autentisera med Azure Container Registry med hjälp av dess Microsoft Entra-identitet.

Övervakning

Azure Monitor tillhandahåller viktiga mått för alla Azure-tjänster, inklusive containermått från AKS. Skapa en instrumentpanel för att visa alla mått på ett och samma ställe.

Skärmbild av en instrumentpanel för Azure Monitor-övervakning.

Förutom att använda Azure Monitor för containrar kan du nu använda hanterad tjänst för Prometheus för att samla in och analysera mått i stor skala via en Prometheus-kompatibel övervakningslösning.

Du kan också använda Azure Managed Grafana (eller självhanterad Grafana) för att visualisera Prometheus-mått. När du använder Azure Managed Grafana kan Grafana använda Azure Monitor-arbetsytan på en Grafana-instrumentpanel genom att ansluta din Azure Monitor-arbetsyta till Azure Managed Grafana-arbetsytan. Sedan har du åtkomst till flera fördefinierade instrumentpaneler som använder Prometheus-mått och du kan också skapa anpassade instrumentpaneler.

Skärmbild av en Grafana-instrumentpanel.

Prestandatest

Använd Magento Performance Toolkit för prestandatestning. Verktygslådan använder Apache JMeter för att simulera kundbeteenden som att logga in, bläddra bland produkter och checka ut.

Du bör också överväga att använda Azure Load Testing, en fullständigt hanterad belastningstestningstjänst som gör att du kan generera högskalig belastning. Med Azure Load Testing kan du snabbt skapa ett belastningstest för ditt webbprogram med hjälp av en URL. För mer avancerade scenarier för belastningstestning kan du också skapa ett belastningstest genom att återanvända ett befintligt JMeter-testskript.

Kostnadsoptimering

Kostnadsoptimering handlar om att titta på sätt att minska onödiga utgifter och förbättra drifteffektiviteten. Mer information finns i Översikt över kostnadsoptimeringspelare.

Nästa steg