Como consertar as cápsulas Kubernetes presas no status de terminal

Como consertar as cápsulas Kubernetes presas no status de terminal
A cápsula Kubernetes prendeu o erro de terminação quando uma vagem permanece no estado "terminando" por um período prolongado. Isso pode ser causado por vários problemas distintos e pode ser bastante irritante para os desenvolvedores. A capacidade de uma vagem de terminar pode ficar presa por vários motivos. A escassez de recursos e problemas relacionados ao pod são possíveis. Independentemente da questão, o POD Kubernetes prendeu a emissão de rescisão pode ser uma grande dor de cabeça para os desenvolvedores e pode causar atrasos extremos na implantação de aplicativos. Este artigo lida com as causas desta questão e sua solução passo a passo. Você pode aprender sobre o problema e como resolvê -lo em detalhes aqui.

O que causa esse problema?

Reconhecer a causa raiz desse problema é uma etapa crítica para corrigir este problema. Algumas razões pelas quais os pods podem ficar presos em um "estado de rescisão" inclui:

Razão # 1: Falta de recursos

As vagens de Kubernetes requerem quantidades adequadas de recursos para funcionar sem problemas. Se houver um número insuficiente de recursos, vários pods podem começar a competir entre si por recursos, o que, como resultado.

Razão # 2: Problemas com o próprio pod

Um problema com a configuração ou o código da vagem pode resultar em estar preso em um estado de término. Se houver finalizadores no pod, o problema da raiz pode ser que os finalizadores não sejam concluídos. Também pode ser o caso de o pod não estar respondendo ao sinal de terminação.

Razão # 3: Um nó subjacente pode ser quebrado

Sempre que as vagens de Kubernetes não saem da condição de terminação, o nó subjacente provavelmente está com defeito. Quando isso ocorre, os aplicativos também podem deixar de agendar, causando indisponibilidade. Isso pode se tornar um dreno financeiro para sua organização devido ao fato de que esse problema pode causar escala inútil. Pode ser um desafio para muitas equipes diagnosticar esse problema, porque as vagens de Kubernetes frequentemente terminam, dificultando dizer quais demoravam por muito tempo. Resolver esse problema é complexo porque a drenagem dos nó em Kubernetes deve ser configurada de uma maneira para trabalhar para o seu ambiente.

Se você vir no arquivo de configuração que todos os pods em um único nó estão no estado de "encerrar", então esse pode ser o problema.

Como consertar este problema?

As seguintes maneiras podem ajudá -lo a corrigir o problema facilmente.

Excluindo o pod

Primeiro, você precisará tentar excluir manualmente o pod, executando as seguintes etapas:

  1. Kubectl delete -wait = POD FALSE
  2. Kubectl delete -GRACE -PERIOD = 1 POD
  3. Kubectl delete -GRACE -PERIOD = 0 -FORCE POD

No entanto, há poucas chances de que a remoção manual da vagem do espaço para nome ajude a resolver o problema, mesmo se você dar o nome exato da vagem que deseja excluir.

Nesse caso, o problema pode ser que o pod não está terminando porque um certo processo não está reagindo a um sinal. Portanto, você precisará comandar o pod para ser removido com força usando o seguinte comando:

> kubectl delete pod [name_of_the_pod] --grace -period = 0 -force kubectl delete pod [name_of_the_pod] --gracePeriod = 0 ---force -n [name_of_the_namesace]

Certifique -se de adicionar o nome do seu pod no comando, se estiver em um espaço de nome dedicado.

Removendo os finalizadores

Se a remoção da cápsula com força não funcionar, a questão principal pode estar com o próprio pod. Um problema comum com o POD é a incapacidade dos finalizadores a serem concluídos, o que pode ser a principal questão que está fazendo com que a vagem seja presa em um estado terminante. Então, você precisará primeiro verificar os finalizadores do pod, obtendo a configuração do pod:

> Kubectl Get Pod -n [namespace] -p [name_of_the_pod] -o yaml> /tmp /config_file.TXT

Em seguida, pesquise nos metadados da seção Finalizadores. Se houver algum finalista, você precisará removê -los fazendo o seguinte:

> kubectl patch pod [name_of_the_pod] -p '"metadados": "finalizadores": null'

Reinicie o Kubelet

Se as soluções mencionadas não resolverem esse problema, tente reiniciar o kubelet. No entanto, pode ser necessário envolver um administrador se não tiver permissão. Se você tiver acesso, reinicie o processo Kubelet, sshing no nó.

Como evitar os pods sendo presos no futuro?

Estas são algumas etapas que você pode tomar para garantir que esse problema não ocorra em primeiro lugar:

  • Verifique completamente seus pods primeiro para ver se eles estão funcionando corretamente antes de implantá -los.
  • Certifique -se de ter recursos suficientes. A falta de recursos pode fazer com que os pods comecem a competir entre si por recursos, o que, como resultado, pode fazer com que um dos pods fique preso em um estado térmico.
  • Certifique -se de que seus pods não consumam muitos recursos.
  • Certifique -se de manter seu cluster Kubernetes atualizado para evitar problemas no futuro.
  • Verifique constantemente para ver se há algum problema com a configuração ou o código de seus pods.

Conclusão

As questões que podem surgir como resultado de um pod sendo preso no estado terminante fazem valer a pena tomar medidas extras para garantir, antes de implantar, que não há problemas com o próprio pod, por exemplo, pode haver um problema Com a configuração do pod, o que provavelmente fará com que a vagem fique presa no estado terminante. Você também deve ter muito cuidado para evitar coisas que possam resultar nessa questão, como falta de recursos ou o cluster de Kubernetes, não está atualizado. Se esse problema ainda ocorrer, apesar de tomar as medidas necessárias para evitá -lo, a primeira coisa que precisará ser feita será identificar a causa raiz desse problema e usar uma solução de acordo.