Como corrigir o erro de Kubernetes Oomkilled

Como corrigir o erro de Kubernetes Oomkilled
Em qualquer ambiente de desenvolvimento de software, os usuários experimentarão diferentes tipos de erros. O mesmo vale ao discutir sobre o desenvolvimento de contêineres. Kubernetes está se tornando a plataforma mais usada para orquestração de contêineres. Como resultado, em ambientes Kubernetes, é mais provável que ocorram falhas. Portanto, devemos estar cientes dos problemas frequentes dos K8s para que possamos abordá -los assim que surgirem. Neste artigo, discutiremos particularmente o erro Oomkilled, porque ele ocorre frequentemente ao trabalhar com Kubernetes. Vamos primeiro falar sobre o que é o erro Oomkilled e por que isso acontece.

O que é erro Oomkilled?

Oomkilled, para simplificar, é um erro de Kubernetes que ocorre quando um pod ou contêiner usa mais memória do que é atribuído a ele. A OOM significa fora da memória. Matou significa o fim do processo.

Aumentar a distribuição de memória é uma maneira fácil de resolver esta questão recorrente. Essa técnica simples, no entanto, só funciona se a memória for infinitamente abundante e os recursos forem ilimitados. Vamos descobrir mais sobre o erro Oomkilled, suas principais causas, como corrigi -lo e como equilibrar as alocações de memória nas seções a seguir.

Tipos de erro Oomkilled

Em Kubernetes, os erros Oomkilled vêm em duas variações diferentes. Um é Oomkilled: Limit Overcommit e o segundo é Oomkilled: Limite de contêiner alcançado.

Vamos aprender mais sobre esses erros em mais profundidade.

Oomkilled: Limite Overcomit Erro

Quando o agregado do limite do pod excede a memória disponível do nó, pode ocorrer um erro. Portanto, se um nó tiver 6 GB de memória disponível, por exemplo, você poderá obter seis pods onde cada um exige 1 GB de memória. No entanto, você corre o risco de ficar sem memória se mesmo um desses pods for configurado com um limite de, digamos, 1.1 gigabytes. Tudo o que é preciso para Kubernetes começar a assassinar as vagens é que uma cápsula experimente um pico no trânsito ou um vazamento de memória não identificado.

Oomkilled: Limite de contêiner alcançado

Kubernetes encerra um aplicativo com um erro “Limite de contorno contínuo de contorno realizado” e o código de saída 137 se tiver um vazamento de memória ou tentar consumir mais memória do que o limite alocado.

Este é de longe o erro de memória mais elementar que pode acontecer dentro de uma vagem. Quando o limite do contêiner é atingido normalmente, ele afeta apenas um pod, diferentemente do erro de compensação limite, o que tem um impacto na capacidade total de RAM do nó do nó.

Causas comuns de erro Oomkilled

Você pode encontrar as causas típicas deste erro na lista a seguir. Observe que existem inúmeras razões adicionais pelas quais os erros ocorridos ocorrem e que muitos deles são difíceis de identificar e resolver:

  • Quando o limite de memória do contêiner é atingido, o aplicativo experimenta uma carga que é maior que o normal.
  • O aplicativo tem um vazamento de memória como resultado do limite de memória do contêiner sendo alcançado.
  • O nó é compensado demais, o que significa que a quantidade total de memória consumida pelos pods excede a memória do nó.

Como identificar o erro Oomkilled

O status do pod pode ser verificado para ver se ocorre um erro ocorrido. Então, para saber mais sobre o problema, use a descrição ou obtenha comando. A saída do comando get pods, como visto a seguir, lista qualquer travessia que envolva uma falha Oomkiled.

Execute o comando "Kubectl Get Pods" para encontrar o erro. O status do pod é mostrado como terminando. Veja o seguinte comando e captura de tela:

> kubectl Obtenha pods

O nome da vagem, seu status, quantas vezes ele começou e a idade do pod são obtidas pelo comando "Get Pods". Aqui, você pode ver que, se uma vagem quebrar por causa de um problema ocorrido, Kubernetes torna o erro muito óbvio no status de pod.

Como resolver o erro Oomkilled?

Vamos agora examinar uma solução para o erro Oomkilled.

Primeiro de tudo, reunimos os dados e salvamos o conteúdo do arquivo para uso posterior. Para fazer isso, primeiro executamos o comando "Kubectl descreve o pod". O comando executado está anexado da seguinte forma:

> Kubectl Descreva o pod pod-one/tmp/solving_oomkilled_error.TXT

Agora você deve examinar os eventos do pod para o código de saída 137. Procure a seguinte mensagem (consulte a captura de tela a seguir) na seção de eventos do arquivo de texto do arquivo.

Devido a restrições de memória, o contêiner é encerrado com o código de saída 137.

Existem duas razões mais significativas para o erro Oomkilled. A primeira razão é quando a vagem é encerrada devido ao limite de contêiner e a segunda razão é quando a vagem é encerrada devido à compensação excessiva no nó. Você precisa examinar os eventos da história recente do pod para tentar determinar o que causou o problema.

A seção anterior ajuda a identificar o erro Oomkilled. Depois de terminar com isso, as seguintes considerações são necessárias para se aplicar.

Se o pod for encerrado quando o limite do contêiner for atingido, esses pontos devem ser lembrados:

  • Analise se o seu aplicativo precisa de mais memória. Por exemplo, se o aplicativo for um site que obtém mais tráfego, pode exigir mais memória do que o primeiro planejado. Nesse caso, aumentar o limite de memória do contêiner na especificação do POD resolve o problema.
  • Um vazamento de memória pode ocorrer no programa se o uso da memória aumentar inesperadamente. Você pode corrigir facilmente o vazamento de memória e depurar o aplicativo. Nesta situação, aumentar o limite de memória não é uma solução recomendada porque o aplicativo consome muitos recursos nos nós.

Se o motivo do término do pod for sobrecomposição nó, você poderá seguir estas diretrizes:

  • Compromissão excessiva em um nó também pode ocorrer quando as vagens têm permissão para organizar em um nó.
  • É importante descobrir o motivo pelo qual Kubernetes encerra a vagem com o erro Oomkilled. Faça atualizações com as solicitações de memória e os valores limitados para evitar que o nó seja compensado demais.

Conclusão

Para resumir, as falhas de pod são causadas por um erro muito simples. Ter um plano de alocação de recursos apropriado para as instalações de Kubernetes é a melhor maneira de lidar com esse problema. Ao analisar cuidadosamente a utilização de recursos do aplicativo e a disponibilidade dos recursos no cluster K8S, os usuários podem definir as limitações de recursos que não influenciam a funcionalidade do programa ou nó.