Compartilhar via


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 agendáveis Pods adicionais não poderão ser agendados se o nó estiver próximo do limite de memória definido.
Despejo de pod Se um nó estiver ficando sem memória, o kubelet poderá remover pods. Embora o painel de controle tente reagendar os pods removidos 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 da memória pode causar kubelet e containerd parar de responder, eventualmente causando problemas de prontidão do nó.
Eliminação de memória insuficiente (OOM) Um problema de OOM ocorrerá se a remoção do pod não puder impedir 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 as 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 do Kubernetes (kubectl).

O Container Insights é um recurso 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 cabeçalho 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 (calculado a partir de alocável).

  7. No seletor de percentis, defina o exemplo como Max e selecione o rótulo da coluna Max % duas vezes. Essa ação classifica os nós da tabela pela porcentagem máxima de memória usada, da mais alta para a mais baixa.

    Captura de tela do portal do Azure 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 sendo executados no nó.

    Captura de tela do portal do Azure 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

    A porcentagem de uso de CPU ou memória para pods é baseada na solicitação de CPU especificada para o contêiner. Ele não representa a porcentagem do uso de CPU ou memória para o nó. Portanto, observe o uso real da CPU ou da memória em vez da porcentagem de uso da CPU ou da memória para pods.

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

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

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

Melhor prática Descrição
Usar solicitações e limites de memória O Kubernetes fornece opções para especificar o tamanho mínimo de memória (solicitação) e o tamanho máximo de memória (limite) para um contêiner. Ao configurar os limites nos pods, você pode evitar a pressão de memória de acordo com o uso real. Verifique se os limites agregados de todos os pods em execução não excedem a memória disponível do nó. Essa situação é chamada de overcommitting. O agendador do Kubernetes aloca recursos com base em solicitações e limites definidos por meio da Qualidade de Serviço (QoS). Sem os 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á removendo pods, ele prioriza os pods nos quais o uso da memória excede suas solicitações definidas. Recomendamos que você defina a solicitação de memória de acordo com o uso real.
Ativar o dimensionador automático de pod horizontal Ao escalar o cluster, você pode equilibrar as solicitações em muitos pods para evitar a saturação da memória. Essa técnica pode reduzir o volume de memória no nó específico.
Usar tags antiafinidade Para cenários em que a memória é ilimitada pelo design, você pode usar seletores de nó e marcas de afinidade ou antiafinidade, que podem isolar a carga de trabalho em nós específicos. Ao utilizar marcas antiafinidade, você pode impedir que outras cargas de trabalho agendem pods nesses nós. Isso reduz o problema de saturação da memória.
Escolher VMs de SKU mais altas As 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ê precisa criar um novo pool de nós, isolar os nós (torná-los não agendáveis) e esvaziar o pool de nós existente.
Isole as 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 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.