Plataforma de comércio eletrônico Magento no Serviço de Kubernetes do Azure

Microsoft Entra ID
Registro de Contêiner do Azure
Banco de Dados do Azure para MySQL
Arquivos do Azure
AKS (Serviço de Kubernetes do Azure)
Azure Monitor

Este artigo é sobre a versão de código aberto do Magento, uma plataforma de comércio eletrônico escrita em PHP. Este artigo não é sobre a Adobe Commerce. Este cenário de exemplo mostra o Magento implantado no AKS (Serviço de Kubernetes do Azure) e descreve as práticas recomendadas comuns para hospedar o Magento no Azure.

Arquitetura

Diagrama mostrando o Magento implantado no Serviço Kubernetes do Azure com outros componentes do Azure.

Baixe um Arquivo Visio dessa arquitetura.

Workflow

  • O AKS (Serviço de Kubernetes do Azure) implanta o cluster Kubernetes de Varnish, Magento, Redis e Elasticsearch em pods diferentes.
  • O AKS cria uma rede virtual para ter onde implantar os nós de agente. Crie a rede virtual com antecedência para configurar a configuração de sub-rede, o vínculo privado e a restrição de saída.
  • O Varnish é instalado na frente dos servidores HTTP para atuar como um cache de página inteira.
  • O BD do Azure para MySQL armazena dados de transação como pedidos e catálogos. A versão 8,0 é recomendada.
  • Os Arquivos do Azure Premium, Azure NetApp Files ou um sistema de armazenamento anexado à rede (NAS) equivalente armazena arquivos de mídia como imagens de produto. O Magento precisa de um sistema de arquivos compatível com Kubernetes que possa montar um volume no modo ReadWriteMany, como o Arquivos do Azure Premium ou Azure NetApp Files. Opções de armazenamento para aplicativos no Serviço de Kubernetes do Azure (AKS). É altamente recomendável que você teste a taxa de transferência de operações de entrada/saída por segundo (IOPS) e escolha as opções que funcionam para você.
  • Uma CDN (rede de distribuição de conteúdo) serve conteúdo estático como CSS, JavaScript e imagens. O fornecimento de conteúdo por meio de uma CDN minimiza a latência de rede entre os usuários e o datacenter. Uma CDN pode remover a carga significativa do NAS, armazenando em cache e servindo conteúdo estático.
  • O Redis armazena dados de sessão. A hospedagem de Redis em contêineres é recomendada por motivos de desempenho.
  • O AKS usa uma identidade do Microsoft Entra ID para criar e gerenciar outros recursos do Azure, como balanceadores de carga do Azure, autenticação de usuário, controle de acesso baseado em função e identidade gerenciada.
  • O Registro de Contêiner do Azure armazena as imagens privadas do Docker que são implantadas no cluster de AKS. É possível usar outros registros de contêiner, como o Docker Hub. A instalação padrão do Magento grava alguns segredos na imagem.
  • O Azure Monitor coleta e armazena métricas e logs, incluindo a métrica de plataforma de serviço do Azure e telemetria de aplicativo. O Azure Monitor integra-se ao AKS para coletar métricas de controlador, nó e contêiner, e logs de nó mestre e contêiner.

Componentes

Detalhes do cenário

Para obter mais informações sobre o Magento, confira a Visão geral da instalação local.

Possíveis casos de uso

Esta solução é otimizada para o setor de varejo.

Considerações

Essas considerações implementam os pilares do Azure Well-Architected Framework, que é um conjunto de princípios de orientação que podem ser usados para aprimorar a qualidade de uma carga de trabalho. Para obter mais informações, confira Microsoft Azure Well-Architected Framework.

Segurança

Aqui estão algumas considerações de segurança para este cenário:

RBAC (Controle de Acesso Baseado em Função)

O Kubernetes e o Azure têm mecanismos de RBAC (controle de acesso baseado em função).

  • O RBAC do Azure controla o acesso aos recursos do Azure, incluindo a capacidade de criar recursos. O RBAC do Azure pode atribuir permissões a usuários, grupos ou entidades de serviço, que são identidades de segurança usadas por aplicativos.

  • O RBAC do Kubernetes controla permissões para a API do Kubernetes. Por exemplo, a criação de pods e listagem de pods são ações que o RBAC do Kubernetes pode autorizar para os usuários.

O AKS integra os mecanismos do RBAC do Azure e do Kubernetes. Para atribuir permissões do AKS aos usuários, crie funções e associações de função:

  • Uma função é um conjunto de permissões que se aplicam dentro de um namespace. As permissões são definidas como verbos como obter, atualizar, criar ou excluir, em recursos como pods ou implantações.

  • A associação de função atribui usuários ou grupos a um a funções.

  • Um objeto de ClusterRole define uma função que se aplica a todo o cluster do AKS, em todos os namespaces. Para atribuir usuários ou grupos a um ClusterRole, crie um ClusterRoleBinding.

  • Como alternativa, você pode usar o RBAC do Azure para Autorização do Kubernetes, que permite o gerenciamento unificado e o controle de acesso entre recursos do Azure, do AKS e do Kubernetes.

Quando você cria o cluster do AKS, é possível configurá-lo para usar o Microsoft Entra ID na autenticação de usuários.

Escalabilidade

Há várias maneiras de otimizar a escalabilidade para este cenário:

Mídia e arquivos estáticos

  • Provisione adequadamente os Arquivos do Azure, o Azure NetApp Files ou outro sistema de armazenamento anexado à rede (NAS). O Magento pode armazenar milhares de arquivos de mídia, como imagens de produtos. Não se esqueça de provisionar os produtos de NAS com operações suficientes de entrada/saída por segundo (IOPS) para lidar com a demanda.

  • Minimize o tamanho do conteúdo estático, como HTML, CSS e JavaScript. A Minificação pode reduzir os custos de largura de banda e oferece uma experiência mais ágil para os seus usuários.

Conexão de banco de dados

  • Ative a conexão persistente ao banco de dados MySQL, portanto, o Magento continuará reutilizando a conexão existente em vez de criar uma nova para cada solicitação. Para ativar a conexão persistente, adicione a seguinte linha à db seção do arquivo Magento env.php:

    'persistent' => '1'

  • Se o MySQL consumir muita CPU, reduza a utilização desativando a contagem de produtos da navegação em camadas na configuração do Magento:

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

Cache

  • Configure o OPcache para cache de código PHP e otimização.

    Verifique se as seguintes diretivas estão definidas e desmarcadas no php.ini:

    opcache.enable=1

    opcache.save_comments=1

    opcache.validate_timestamps=0

  • Equilibre o balanceamento de carga do cache de Varnish executando várias instâncias em pods para que ele possa ser dimensionado.

Registrando em log

Limite o registro em log de acesso para evitar problemas de desempenho e evitar a exposição de dados confidenciais, como endereços IP do cliente.

  • Use o seguinte comando Varnish para limitar o registro em log ao nível de erro:

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

  • Se você usar o servidor Web Apache para entrada, limite o registro em log do Apache ao nível de erro adicionando a seguinte linha à entrada Magento VirtualHost na configuração do servidor Apache:

    CustomLog /dev/null common

  • Desative os logs de acesso do PHP-FPM comentando a access.log configuração em todas as configurações do PHP-FPM.

Disponibilidade

Considere estas maneiras de otimizar a disponibilidade para este cenário:

Investigações de integridade

O Kubernetes define dois tipos de investigação de integridade:

  • A investigação de preparação informa ao Kubernetes se o pod está pronto para aceitar solicitações.
  • A investigação de atividade informa ao Kubernetes se um pod precisa ser removido e uma nova instância precisa ser iniciada.

Personalize as investigações de integridade do Kubernetes e use-as para saber se um pod está em boas condições.

Zonas de Disponibilidades

As Zonas de Disponibilidade são locais físicos exclusivos em regiões do Azure que ajudam a proteger aplicativos e dados de falhas do datacenter. Cada zona é composta por um ou mais data centers. Os aplicativos em zonas podem permanecer disponíveis mesmo se houver uma falha física em um único datacenter.

Os clusters do AKS podem ser implantados em vários Zonas de Disponibilidade, para fornecer um nível mais alto de disponibilidade e proteger contra falhas de hardware ou eventos de manutenção planejada. Definir pools de nó de cluster para abranger várias zonas permite que os nós continuem operando mesmo se uma única zona ficar inativa. Para obter mais informações sobre como implantar o AKS em Zonas de Disponibilidade, consulte Criar um cluster de AKS que usa zonas de disponibilidade.

Restrições de recursos

  • A contenção de recursos pode afetar a disponibilidade do serviço. Defina as restrições de recurso de contêiner, de modo que nenhum contêiner individual possa sobrecarregar a memória do cluster e os recursos da CPU. Você pode usar o diagnóstico do AKS para identificar os problemas no cluster.

  • Use o limite de recursos para restringir o total de recursos permitidos para um contêiner, de modo que um contêiner específico não possa privar os outros.

DevOps

Aqui estão algumas considerações operacionais para este cenário:

  • Nesse cenário, o MySQL não expõe um ponto de extremidade público. Se o servidor de compilação armazena as definições de configuração para o banco de dados MySQL de back-end, certifique-se de implantar esse servidor na mesma sub-rede de rede virtual que o MySQL conecta via ponto de extremidade de serviço.

  • Use o Registro de Contêiner do Azure ou outro registro de contêiner como o Docker Hub para armazenar as imagens privadas do Docker implantadas no cluster. O AKS pode se autenticar no Registro de Contêiner do Azure por meio da identidade do Microsoft Entra.

Monitoramento

O Azure Monitor fornece métricas-chave para todos os serviços do Azure, incluindo métricas de contêiner de AKS. Crie um painel para mostrar todas as métricas em um único lugar.

Captura de tela de um painel de monitoramento do Azure Monitor.

Além de usar o Azure Monitor para contêineres, agora você pode usar o serviço gerenciado para Prometheus a fim de coletar e analisar métricas em escala por meio de uma solução de monitoramento compatível com o Prometheus.

Você também pode usar o Espaço Gerenciado do Azure para Grafana (ou o Grafana autogerenciado) para visualizar as métricas do Prometheus. Quando você usar o Espaço Gerenciado do Azure para Grafana, conectar seu workspace do Azure Monitor ao workspace do Espaço Gerenciado do Azure para Grafana permite que o Grafana use os dados do workspace do Azure Monitor em um painel do Grafana. Então, você terá acesso a vários painéis predefinidos que usam as métricas do Prometheus e a também pode criar painéis personalizados.

Captura de tela de um painel do Grafana.

Testes de desempenho

Use o Conjunto de ferramentas de desempenho do Magento para testes de desempenho. O conjunto de ferramentas usa o Apache JMeter para simular comportamentos do cliente, como entrar, procurar produtos e fazer check-out.

Você também deve considerar usar o Teste de Carga do Azure, um serviço de teste de carga totalmente gerenciado que permite gerar cargas em alta escala. Com o Teste de Carga do Azure, você pode criar com rapidez um teste de carga para seu aplicativo Web usando uma URL. Como alternativa, para cenários mais avançados de teste de carga, você pode criar um teste de carga reutilizando um script de teste do JMeter disponível.

Otimização de custo

A otimização de custos é a análise de maneiras de reduzir as despesas desnecessárias e melhorar a eficiência operacional. Para obter mais informações, confira Visão geral do pilar de otimização de custo.

Próximas etapas