Piattaforma di e-commerce Magento nel servizio Azure Kubernetes

Microsoft Entra ID
Registro Azure Container
Database di Azure per MySQL
File di Azure
Servizio Azure Kubernetes
Monitoraggio di Azure

Questo articolo riguarda la versione open source di Eseguire il commercio elettronico, una piattaforma di e-commerce scritta in PHP. Questo articolo non riguarda Adobe Commerce. Questo scenario di esempio mostra La distribuzione di Verso Servizio Azure Kubernetes (AKS) e descrive le procedure consigliate comuni per l'hosting di Eseguire l'hosting in Azure.

Architettura

Diagramma che mostra l'implementazione di Distribuita in servizio Azure Kubernetes con altri componenti di Azure.

Scaricare un file di Visio di questa architettura.

Workflow

  • Il servizio Azure Kubernetes distribuisce il cluster Kubernetes cluster di Varnish, Magento, Redis ed Elasticsearch in pod diversi.
  • Il servizio Azure Kubernetes crea una rete virtuale per distribuire i nodi dell'agente. Creare in anticipo la rete virtuale per definire la configurazione della subnet, collegamento privato e le restrizioni in uscita.
  • Varnish viene installato davanti ai server HTTP in modo da fungere da cache a pagina intera.
  • Il Database di Azure per MySQL archivia i dati delle transazioni, ad esempio ordini e cataloghi. È consigliabile usare la versione 8.0.
  • File di Azure Premium, Azure NetApp Files o un sistema NAS (Network Attached Storage) equivalente archivia file multimediali come le immagini del prodotto. Il file system compatibile con Kubernetes richiede un volume in modalità ReadWriteMany, ad esempio File di Azure Premium o Azure NetApp Files. Archiviazione opzioni per le applicazioni in servizio Azure Kubernetes (servizio Azure Kubernetes). È consigliabile testare la velocità effettiva di input/output al secondo (IOPS) e scegliere le opzioni che funzionano per l'utente.
  • Una rete CDN gestisce il contenuto statico, ad esempio CSS, JavaScript e immagini. La gestione del contenuto tramite una rete CDN consente di ridurre al minimo la latenza di rete tra utente e data center. Una rete CDN può rimuovere un carico significativo da un dispositivo NAS mediante la memorizzazione nella cache e la gestione del contenuto statico.
  • Redis archivia i dati della sessione. È consigliabile eseguire l'hosting di Redis nei contenitori per motivi di prestazioni.
  • Il servizio Azure Kubernetes usa un'identità ID Microsoft Entra per creare e gestire altre risorse di Azure, ad esempio i servizi di bilanciamento del carico di Azure, l'autenticazione utente, il controllo degli accessi in base al ruolo e l'identità gestita.
  • Registro Azure Container archivia le immagini Docker private che vengono distribuite nel cluster del servizio Azure Kubernetes. È possibile usare altri registri di contenitori, ad esempio Docker Hub. L'installazione predefinita di Automaticamente scrive alcuni segreti nell'immagine.
  • Monitoraggio di Azure raccoglie e archivia le metriche e i log, include le metriche della piattaforma dei servizi di Azure e i dati di telemetria delle applicazioni. Monitoraggio di Azure è integrato con il servizio Azure Kubernetes per raccogliere le metriche relative a controller, nodo e contenitore e i log del nodo master.

Componenti

  • servizio Azure Kubernetes (servizio Azure Kubernetes): ridimensionare i contenitori in un servizio Kubernetes gestito.
  • Azure Rete virtuale: reti virtuali nel cloud.
  • Database di Azure per MySQL: MySQL nel cloud conveniente e facile da configurare, gestire e ridimensionare.
  • File di Azure: condivisioni file nel cloud. Questa soluzione usa il livello Premium.
  • Azure NetApp Files: condivisioni file di Azure di livello aziendale, basate su NetApp.
  • Azure rete per la distribuzione di contenuti: una rete di distribuzione di contenuti veloce, affidabile e globale.
  • Microsoft Entra ID: gestione delle identità e degli accessi multicloud.
  • Registro Azure Container: un registro di immagini Docker e Open Container Initiative (OCI), con supporto per tutti gli artefatti OCI.
  • Monitoraggio di Azure: osservabilità end-to-end per le applicazioni, l'infrastruttura e la rete

Dettagli dello scenario

Per altre informazioni su Eseguire l'installazione locale, vedere Panoramica dell'installazione locale.

Potenziali casi d'uso

Questa soluzione è ottimizzata per il settore della vendita al dettaglio.

Considerazioni

Queste considerazioni implementano i pilastri di Azure Well-Architected Framework, che è un set di set di principi guida che possono essere usati per migliorare la qualità di un carico di lavoro. Per altre informazioni, vedere Framework ben progettato di Microsoft Azure.

Sicurezza

Di seguito sono riportate alcune considerazioni sulla sicurezza per questo scenario:

Controllo degli accessi in base al ruolo

Kubernetes e Azure includono meccanismi per il controllo degli accessi in base al ruolo.

  • Controllo degli accessi in base al ruolo di Azure gestisce l'accesso alle risorse di Azure, inclusa la possibilità di creare risorse. Controllo degli accessi in base al ruolo di Azure può assegnare autorizzazioni a utenti, gruppi o entità servizio, ovvero identità di sicurezza usate dalle applicazioni.

  • I controlli degli accessi in base al ruolo di Kubernetes consentoni di controllare le autorizzazioni per l'API di Kubernetes. La creazione di pod e di elenchi di pod sono azioni che il Controllo degli accessi in base al ruolo di Kubernetes può autorizzare per gli utenti.

Il servizio Azure Kubernetes integra i meccanismi di controllo degli accessi in base al ruolo di Azure e di Kubernetes. Per assegnare autorizzazioni del servizio Azure Kubernetes agli utenti, creare ruoli e associazioni di ruolo:

  • Un ruolo è un set di autorizzazioni che si applica all'interno di uno spazio dei nomi. Le autorizzazioni vengono definite con verbi come "get", "update", "create" o "delete", su risorse quali i pod o le distribuzioni.

  • L'associazione di ruolo assegna utenti o gruppi ai ruoli.

  • Un oggetto ClusterRole definisce un ruolo applicabile all'intero cluster del servizio Azure Kubernetes, in tutti gli spazi dei nomi. Per assegnare utenti o gruppi a un ClusterRole, creare un ClusterRoleBinding.

  • In alternativa, è possibile usare il controllo degli accessi in base al ruolo di Azure per l'autorizzazione kubernetes, che consente la gestione unificata e il controllo di accesso tra risorse, servizio Azure Kubernetes e risorse Kubernetes.

Quando si crea il cluster del servizio Azure Kubernetes, è possibile configurarlo per l'uso dell'ID Entra di Microsoft per l'autenticazione utente.

Scalabilità

È possibile ottimizzare la scalabilità per questo scenario in diversi modi:

File multimediali e statici

  • Effettuare il provisioning adeguato File di Azure, Azure NetApp Files o un altro sistema nas (Network Attached Storage). Magento può archiviare migliaia di file multimediali, ad esempio immagini dei prodotti. Assicurarsi di effettuare il provisioning di prodotti NAS con operazioni di input/output sufficienti al secondo per gestire la domanda.

  • Ridurre al minimo le dimensioni del contenuto statico, ad esempio HTML, CSS e JavaScript. La minificazione può ridurre i costi della larghezza di banda e offrire un'esperienza più reattiva per gli utenti.

Connessione del database

  • Attivare la connessione permanente al database MySQL, in modo che Magento continui a riutilizzare la connessione esistente invece di crearne una nuova per ogni richiesta. Per attivare la connessione permanente, aggiungere la riga seguente alla sezione db del file env.php di Magento:

    'persistent' => '1'

  • Se MySQL utilizza troppa CPU, ridurre l'utilizzo disattivando il conteggio di prodotti dall'esplorazione su più livelli nella configurazione di Magento:

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

Memorizzazione nella cache

  • Configurare OPcache per la memorizzazione nella cache e l'ottimizzazione del codice PHP.

    Assicurarsi che le direttive seguenti siano configurate e non siano commentate in php.ini:

    opcache.enable=1

    opcache.save_comments=1

    opcache.validate_timestamps=0

  • Bilanciare il carico della cache di Varnish eseguendo più istanze nei pod in modo da consentirne il ridimensionamento.

Registrazione

Limitare la registrazione degli accessi per evitare problemi delle prestazioni e impedire l'esposizione di dati sensibili, ad esempio gli indirizzi IP del client.

  • Usare il comando di Varnish seguente per limitare la registrazione a livello di errore:

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

  • Se si usa un server Web Apache per l'ingresso, limitare la registrazione di Apache a livello di errore aggiungendo la riga seguente alla voce VirtualHost di Magento nella configurazione del server Apache:

    CustomLog /dev/null common

  • Disattivare i log di accesso di PHP-FPM escludendo tramite commenti l'impostazione access.log in tutte le configurazioni di PHP-FPM.

Disponibilità

Considerare questi approcci per ottimizzare la disponibilità per questo scenario:

Probe di integrità

Kubernetes definisce due tipi di probe di integrità:

  • Il probe di idoneità indica a Kubernetes se il pod è pronto per accettare richieste.
  • Il probe di attività indica a Kubernetes. se un pod deve essere rimosso e se viene avviata una nuova istanza.

Personalizzare i probe di integrità di Kubernetes e usarli per segnalare se un pod è integro.

Zone di disponibilità

Le zone di disponibilità sono posizioni fisiche univoche nelle aree di Azure che contribuiscono alla protezione di applicazioni e dati da errori dei data center. Ogni zona è costituita da uno o più data center. Le applicazioni nelle zone possono rimanere disponibili anche in caso di errore fisico in un singolo data center.

I cluster del servizio Azure Kubernetes possono essere distribuiti in più zone di disponibilità per fornire un livello di disponibilità superiore e proteggere da errori hardware o eventi di manutenzione pianificata. La definizione di pool di nodi del cluster in modo che si estendano su più zone consente ai nodi di rimanere operativi anche in caso di inattività di una singola zona. Per altre informazioni sulla distribuzione del servizio Azure Kubernetes nelle zone di disponibilità, vedere Creare un cluster del servizio Azure Kubernetes che usa le zone di disponibilità.

Vincoli delle risorse

  • La contesa di risorse può influire sulla disponibilità del servizio. Definire vincoli per le risorse dei contenitori in modo che nessun contenitore possa sovraccaricare la memoria del cluster e le risorse della CPU. È possibile usare la diagnostica del servizio Azure Kubernetes per identificare eventuali problemi nel cluster.

  • Usare il limite di risorse per limitare le risorse totali consentite per un contenitore, in modo che un contenitore specifico non possa sottrarre risorse agli altri.

DevOps

Di seguito sono riportate alcune considerazioni operative per questo scenario:

  • In questo scenario MySQL non espone un endpoint pubblico. Se il server di compilazione archivia le impostazioni di configurazione nel database MySQL back-end, assicurarsi di distribuire tale server nella stessa subnet di rete virtuale a cui si connette MySQL tramite l'endpoint di servizio.

  • Usare Registro Azure Container o un altro registro contenitori come Docker Hub per archiviare le immagini Docker private che vengono distribuite nel cluster. Il servizio Azure Kubernetes può eseguire l'autenticazione con Registro Azure Container usando la relativa identità Microsoft Entra.

Monitoraggio

Monitoraggio di Azure fornisce metriche essenziali per tutti i servizi di Azure, incluse le metriche dei contenitori dal servizio Azure Kubernetes. Creare un dashboard per visualizzare tutte le metriche in un'unica posizione.

Screenshot di un dashboard di monitoraggio di Monitoraggio di Azure.

Oltre a usare Monitoraggio di Azure per i contenitori, è ora possibile usare il servizio gestito per Prometheus per raccogliere e analizzare le metriche su larga scala tramite una soluzione di monitoraggio compatibile con Prometheus.

È anche possibile usare Grafana gestito di Azure (o Grafana autogestito) per visualizzare le metriche di Prometheus. Quando si usa Grafana gestito di Azure, la connessione dell'area di lavoro di Monitoraggio di Azure all'area di lavoro Grafana gestita di Azure consente a Grafana di usare i dati dell'area di lavoro di Monitoraggio di Azure in un dashboard di Grafana. È quindi possibile accedere a più dashboard predefiniti che usano le metriche Prometheus ed è anche possibile creare dashboard personalizzati.

Screenshot di un dashboard di Grafana.

Test delle prestazioni

Usare Magento Performance Toolkit per i test delle prestazioni. Il toolkit usa Apache JMeter per simulare i comportamenti dei clienti, tra cui accesso, esplorazione dei prodotti e completamento dell'ordine.

È anche consigliabile usare Test di carico di Azure, un servizio di test di carico completamente gestito che consente di generare un carico su larga scala. Con Test di carico di Azure è possibile creare rapidamente un test di carico per l'applicazione Web usando un URL. In alternativa, per scenari di test di carico più avanzati, è possibile creare un test di carico riutilizzando uno script di test JMeter esistente.

Ottimizzazione dei costi

L'ottimizzazione dei costi riguarda l'analisi dei modi per ridurre le spese non necessarie e migliorare l'efficienza operativa. Per altre informazioni, vedere Panoramica del pilastro di ottimizzazione dei costi.

Passaggi successivi