Solucionar problemas de saturação de memória em clusters do AKS

Este artigo discute métodos para solucionar problemas de saturação de memória. A saturação de memória ocorre se pelo menos um aplicativo ou processo precisar de mais memória do que um host de contêiner pode fornecer ou se o host esgotar sua memória disponível.

Pré-requisitos

Sintomas

A tabela a seguir descreve os sintomas comuns de saturação de memória.

Sintoma Descrição
Pods não programados Pods adicionais não poderão ser agendados se o nó estiver próximo ao limite de memória definido.
Despejo de pod Se um nó estiver ficando sem memória, o kubelet poderá despejar pods. Embora o plano de controle tente reagendar os pods despejados em outros nós que têm recursos, não há garantia de que outros nós tenham memória suficiente para executar esses pods.
Nó não pronto A saturação de memória pode causar kubelet e containerd ficar sem resposta, eventualmente causando problemas de preparação do nó.
Morte fora da memória (OOM) Um problema de OOM ocorre se o despejo do pod não puder evitar um problema de nó.

Lista de verificação de solução de problemas

Para reduzir a saturação de memória, use ferramentas de monitoramento eficazes e aplique práticas recomendadas.

Etapa 1: identificar nós que têm saturação de memória

Use um dos seguintes métodos para identificar nós que têm saturação de memória:

  • Em um navegador da Web, use o recurso Container Insights do AKS no portal do Azure.

  • Em um console, use a ferramenta de linha de comando kubernetes (kubectl).

O Container Insights é um recurso dentro do AKS que monitora o desempenho da carga de trabalho do contêiner. Para obter mais informações, consulte Habilitar insights de contêiner para o cluster do AKS (Serviço de Kubernetes do Azure).

  1. No portal do Azure, pesquise e selecione Serviços do Kubernetes.

  2. Na lista de serviços do Kubernetes, selecione o nome do cluster.

  3. No painel de navegação do cluster, localize o título Monitoramento e selecione Insights.

  4. Defina o valor de Intervalo de Tempo apropriado.

  5. Selecione a guia Nós .

  6. Na lista Métrica , selecione Conjunto de trabalho de memória (computado em Alocar).

  7. No seletor percentiles, defina o exemplo como Max e selecione o rótulo de coluna Max % duas vezes. Essa ação classifica os nós de tabela pelo percentual máximo de memória usado, do mais alto para o mais baixo.

    portal do Azure captura de tela da exibição Nós no Container Insights em um cluster do AKS (Serviço de Kubernetes do Azure).

  8. Como o primeiro nó tem o maior uso de memória, selecione esse nó para investigar o uso de memória dos pods que estão em execução no nó.

    portal do Azure captura de tela dos contêineres de um nó na exibição Nós no Container Insights em um cluster do AKS (Serviço de Kubernetes do Azure).

    Observação

    O percentual de uso de CPU ou memória para pods baseia-se na solicitação de CPU especificada para o contêiner. Ele não representa o percentual da CPU ou do uso de memória para o nó. Portanto, examine a CPU real ou o uso de memória em vez da porcentagem de uso de CPU ou memória para pods.

Agora que você identificou os pods que estão usando memória alta, você pode identificar os aplicativos que estão em execução no pod.

Etapa 2: examinar as práticas recomendadas para evitar a saturação de memória

Examine a tabela a seguir para saber como implementar práticas recomendadas para evitar a saturação de memória.

Prática recomendada Descrição
Usar solicitações e limites de memória O Kubernetes fornece opções para especificar o tamanho mínimo da memória (solicitação) e o tamanho máximo da memória (limite) para um contêiner. Ao configurar limites em pods, você pode evitar a pressão de memória no nó. Verifique se os limites de agregação para todos os pods que estão em execução não excedem a memória disponível do nó. Essa situação é chamada de excesso de compromisso. O agendador do Kubernetes aloca recursos com base em solicitações e limites definidos por meio do QoS ( Qualidade do Serviço ). Sem limites apropriados, o agendador pode agendar muitos pods em um único nó. Isso pode eventualmente derrubar o nó. Além disso, enquanto o kubelet está despejando pods, ele prioriza pods nos quais o uso de memória excede suas solicitações definidas. Recomendamos que você defina a solicitação de memória próxima ao uso real.
Habilitar o dimensionador automático do pod horizontal Ao escalar o cluster, você pode equilibrar as solicitações em muitos pods para evitar a saturação de memória. Essa técnica pode reduzir a pegada de memória no nó específico.
Usar marcas anti-afinidade Para cenários em que a memória é desvinculada pelo design, você pode usar seletores de nó e marcas de afinidade ou anti-afinidade, que podem isolar a carga de trabalho em nós específicos. Usando marcas anti-afinidade, você pode impedir que outras cargas de trabalho agendem pods nesses nós. Isso reduz o problema de saturação de memória.
Escolher VMs SKU mais altas Máquinas virtuais (VMs) que têm mais memória de acesso aleatório (RAM) são mais adequadas para lidar com o alto uso de memória. Para usar essa opção, você deve criar um pool de nós, isolar os nós (torná-los não programados) e drenar o pool de nós existente.
Isolar cargas de trabalho do sistema e do usuário Recomendamos que você execute seus aplicativos em um pool de nós de usuário. Essa configuração garante que você possa isolar os pods específicos do Kubernetes no pool de nós do sistema e manter o desempenho do cluster.

Mais informações

Aviso de isenção de responsabilidade para informações de terceiros

Os produtos de terceiros mencionados neste artigo são produzidos por empresas independentes da Microsoft. A Microsoft não oferece nenhuma garantia, implícita ou não, do desempenho ou da confiabilidade desses produtos.

Aviso de isenção de responsabilidade para contatos de terceiros

A Microsoft fornece informações de contato de terceiros para ajudá-lo a encontrar informações adicionais sobre esse tópico. Essas informações de contato podem ser alteradas sem aviso prévio. A Microsoft não garante a precisão das informações de contato de terceiros.

Entre em contato conosco para obter ajuda

Se você tiver dúvidas ou precisar de ajuda, crie uma solicitação de suporte ou peça ajuda à comunidade de suporte do Azure. Você também pode enviar comentários sobre o produto para a comunidade de comentários do Azure.