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
- A ferramenta de linha de comando kubectl do Kubernetes. Para instalar o kubectl usando a CLI do Azure, execute o comando az aks install-cli .
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).
No portal do Azure, pesquise e selecione Serviços do Kubernetes.
Na lista de serviços do Kubernetes, selecione o nome do cluster.
No painel de navegação do cluster, localize o cabeçalho Monitoramento e selecione Insights.
Defina o valor de Intervalo de tempo apropriado.
Selecione a guia Nós .
Na lista Métrica, selecione Conjunto de trabalho de memória (calculado a partir de alocável).
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.
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ó.
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
Saiba mais sobre as práticas recomendadas do AKS (Serviço de Kubernetes do Azure)
Monitorar o desempenho do cluster do Kubernetes com os Insights do contêiner
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.