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 kubernetes kubectl . 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 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).
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 título 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 (computado em Alocar).
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.
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ó.
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
Saiba mais sobre as práticas recomendadas do AKS (Serviço de Kubernetes do Azure)
Monitorar o desempenho do cluster do Kubernetes com insights de 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.