Como consertar o espaço para nome de Kubernetes preso no estado de encerramento

Como consertar o espaço para nome de Kubernetes preso no estado de encerramento

Ultimamente, vários relatórios têm sido sobre Kubernetes Namespaces ficando presos em um estado de término. Este artigo fornece uma explicação de alto nível do que pode causar isso e como resolvê-lo. Você encontrará todas as informações necessárias sobre como você pode corrigir o problema. Vamos explicar por que isso ocorre em primeiro lugar. Vamos começar com o que o espaço de nome de Kubernetes prendeu a questão terminante.

Qual é a questão do espaço para nome de Kubernetes sendo preso ao encerrar problemas?

Para entender qual é o espaço de nome de Kubernetes. Kubernetes Namespace é um conjunto de recursos que são usados ​​pelo daemon Kubernetes para gerenciar e controlar os aplicativos implantados. Um espaço para nome é geralmente criado quando a primeira implantação de um novo aplicativo no Kubernetes é iniciada. O espaço para nome permanece no estado de "criação" pelos primeiros segundos após a implantação. Depois disso, torna -se o estado "terminando", e o daemon começa a atribuir os recursos ao aplicativo. Pensa -se que o espaço para nome esteja preparado para uso pelo programa quando for encerrado. No entanto, em alguns casos, o espaço para nome pode ficar preso nesse estado indefinidamente e se recusar a se tornar ativo, mesmo depois que várias tentativas são feitas para recriá-lo. Existem algumas ações que você pode fazer para corrigi -lo quando isso ocorrer. Examinaremos algumas das razões mais típicas para esse problema e possivelmente consertá -lo.

Por que o espaço nomes fica preso no estado terminante?

Existem algumas razões comuns pelas quais um espaço para nome pode ficar preso em um estado de término:

Razão 1: erro comum do operador

O erro mais comum é o erro do operador em que um operador exclui ou interrompe acidentalmente o serviço que mantém o namespace vivo.

Razão 2: Configuração inadequada

Outro motivo comum é que o cluster subjacente precisa ser configurado corretamente. Se o cluster estiver configurado com vários mestres e um mestre for repentinamente removido do cluster, pode levar ao estado de rescisão de todos os outros clusters da rede de cluster, pois não têm uma conexão mestre viável.

Razão 3: Problemas de conectividade de rede

Às vezes, uma questão subjacente, como problemas de conectividade de rede, pode fazer com que as vagens que estão em execução dentro do espaço para nome de nome terminam abruptamente, fazendo. É crucial rastrear as métricas de um cluster e inspecioná -las com frequência para garantir que não haja problemas subjacentes que causem o tempo de inatividade para seus aplicativos.

Razão 4: Finalizadores

Finalmente, os namespaces têm um finalizador que é definido abaixo da especificação. Um finalizador é uma chave de metadados que instrui Kubernetes a adiar a destruição de um recurso, a menos que uma condição específica seja atendida. Então, quando um comando para excluir um espaço para nome é executado, Kubernetes verifica a seção de metadados para um finalizador. Se o recurso definido pelo Finalizador não puder ser destruído, o espaço para nome não poderá ser encerrado, resultando no espaço de nome estar em um estado de término por dias, meses ou até anos.

Como podemos corrigir este problema?

Aqui estão algumas maneiras simples de seguir para corrigir o problema facilmente:

Estar atualizado

Primeiro, verifique se o seu sistema está atualizado atualizando seus nós K8S com a versão mais recente de lançamento. Algumas versões mais antigas têm uma falha que pode interferir no funcionamento do serviço Kubelet e causar essa falha.

Reinicie o processo mestre de Kubernetes

Se a questão persistir, apesar de dar a etapa que mencionamos anteriormente, você pode tentar reiniciar o processo mestre de Kubernetes. Este processo encerra qualquer processo de trabalhador que possa estar preso. Isso os leva a sair graciosamente sem causar problemas para outros pods.

Recriando as vagens presas

Se o espaço para nome permanecer preso nesse status depois de reiniciar o processo mestre, o próximo passo é recriar as vagens presas. Isso requer copiá -los para um espaço para nome diferente e excluir as vagens quebradas no espaço de nome original. Depois de fazer isso, você deve garantir que todas as vagens excluídas ainda estejam funcionando corretamente no espaço de nome de destino. Se algum deles não estiver funcionando corretamente, você deve restaurá -los. Isso ajuda a resolver o problema com o espaço para nome em Kubernetes. Depois de fazer isso, você pode verificar se todos os seus contêineres estão funcionando corretamente e que as vagens quebradas não estão mais rodando em qualquer lugar do cluster.

Tendo espaço de disco suficiente disponível para armazenamento no cluster

Se isso não funcionar tão bem, verifique se há espaço em disco adequado que está aberto para armazenamento no cluster executando o seguinte comando em um dos nós que estão hospedando o cluster:

kalsoom@virtualbox> sudo df-kh | grep/var/lib/kubelet

Como o nome indica, este comando fornece uma lista de discos que são montados em seu sistema, juntamente com a quantidade de espaço que é usada por cada dispositivo. Isso pode ser usado para identificar os dispositivos que estão enfrentando problemas com a alocação de espaço e liberar espaço adicional nesses dispositivos conforme necessário.

Executando uma atualização APT-Get e uma reinicialização completa do sistema

Se isso não ajudar a resolver o problema, tente executar uma atualização APT-Get seguida de uma reinicialização completa do sistema. Isso força o gerenciador de pacotes a verificar automaticamente novas atualizações e instalá -las. Depois que seu sistema for reiniciado, execute o mesmo comando que você executou para identificar qualquer dispositivo que fique sem espaço de armazenamento. Depois de identificar o problema, livre o máximo de espaço possível no dispositivo para liberar algum espaço para o serviço Kubelet alocar no espaço para nome. Você também pode tentar usar as diferentes soluções de armazenamento para o seu cluster se o hardware subjacente estiver com pouca potência.

Força excluindo o espaço para nome

Você também pode forçar a excluir o espaço para nome fazendo o seguinte:

kalsoom@virtualbox> namespace = your_namespace_to_delete
Kubectl Proxy &
KUBECTL Get Namespace $ namespace -o json | jq '.spec = "Finalizadores": [] '> temp.JSON
Curl -k -h "Tipo de conteúdo: Application/JSON" -x Put -Data -Binary @temp.JSON 127.0.0.1: 8001/api/v1/namespaces/$ namespace/finalize

Os componentes da seção Finalizadores, neste caso. Você também pode completar isso manualmente. Por padrão, o proxy Kubectl cria o ouvinte em 127.0.0.1: 8001. Você poderá utilizar isso se estiver ciente do nome do host e do endereço IP do seu mestre de cluster.

Removendo o finalizador

Você também pode remover a especificação do Finalizador para excluir completamente o espaço para nome. Para fazer isso, você precisa remover o finalizador para excluir completamente o espaço para nome, fazendo o seguinte:


1. Primeiro, despeje a especificação de namespace no formato JSON. O código é dado da seguinte forma:

Kalsoom@VirtualBox> Kubectl Get ns -o json> .JSON

2. Em seguida, edite o espaço para nome.JSON ao remover os "Finalizadores" na especificação:

"Spec": "Finalizadores":,
para:
"Spec": ,

3. Depois disso, corrige o espaço para nome fazendo o seguinte:

Kalsoom@VirtualBox> Kubectl Substituir - -raw "/api/v1/namespaces // finalize" -f .JSON

Conclusão

Explicamos brevemente a questão do espaço para nome ficar preso em um estado de término. Também apontamos muitas razões pelas quais isso pode acontecer e as etapas necessárias que podemos tomar para corrigir esse problema. Fornecemos todas as informações críticas sobre o referido tópico em detalhes.