Compartilhar via


Solucionar problemas de pods e namespaces presos no estado Terminating

Este artigo discute estratégias de solução de problemas para um cenário no AKS (Serviço de Kubernetes do Microsoft Azure) no qual pods e namespaces permanecem presos no Terminating estado.

Pré-requisitos

Lista de verificação de solução de problemas

Etapa 1: Determinar qual pod excluir

Verifique o nome do pod que você precisa remover e o namespace ao qual o pod pertence. Para determinar quais pods estão em execução no cluster do AKS e os namespaces nos quais os pods estão operando, execute o seguinte comando kubectl get :

kubectl get pod --all-namespaces

Etapa 2: excluir o pod

Usando as informações da Etapa 1, execute o seguinte comando kubectl delete para excluir o pod:

kubectl delete <pod-name> --namespace <namespace-name>

Observação

Você pode omitir o --namespace <namespace-name> parâmetro se o pod especificado pertencer ao namespace "padrão".

Se você receber a seguinte mensagem de erro, certifique-se de que o nome do pod e o nome do namespace estejam corretos:

Erro do servidor (NotFound): pods "<POD NAME"> não encontrados

Se os nomes do pod e do namespace estiverem corretos, mas o pod não tiver sido excluído, você poderá excluir o pod à força. Para fazer isso, execute o seguinte kubectl delete comando:

kubectl delete pod <pod-name> --namespace <namespace-name> --grace-period=0 --force --wait=false

Etapa 3: Determinar qual namespace excluir

Verifique o nome do namespace que você precisa remover. Para determinar quais namespaces estão em execução no cluster do AKS, execute o seguinte kubectl get comando:

kubectl get namespace

Etapa 4: Localizar recursos no namespace

Se um namespace estiver preso no Terminating estado, localize todos os recursos definidos dentro do namespace. Para fazer isso, execute o seguinte kubectl get comando:

kubectl get all --namespace <namespace-name>

Etapa 5: Excluir recursos dentro do namespace

Depois de descobrir quais recursos estão definidos no namespace, exclua esses recursos. Para cada recurso a ser excluído, execute o seguinte kubectl delete comando:

kubectl delete <resource> <resource name> --namespace <namespace-name> --grace-period=0 --force --wait=false

Por exemplo, se você quiser excluir o nginxtest pod dentro do nginx namespace, execute o seguinte comando:

kubectl delete pod nginxtest --namespace nginx --grace-period=0 --force --wait=false

Etapa 6: Excluir o namespace

Depois de excluir todos os recursos dentro do namespace, exclua o próprio namespace. Para fazer isso, execute o seguinte kubectl delete comando:

kubectl delete namespace <namespace-name>  --grace-period=0 --force --wait=false

Aviso

O kubectl delete comando pode não ser bem-sucedido inicialmente se você usar finalizadores para evitar a exclusão acidental. Os finalizadores são chaves em recursos que sinalizam operações de pré-exclusão. Os finalizadores controlam a coleta de lixo em recursos e são projetados para alertar os controladores sobre quais operações de limpeza devem ser feitas antes de remover um recurso.

No entanto, os finalizadores não identificam necessariamente o código que deve ser executado. Na verdade, os finalizadores se assemelham a anotações da seguinte maneira:

  • Eles são basicamente listas de chaves.
  • Eles podem ser manipulados.

Se você tentar excluir um recurso que tenha um finalizador, o recurso permanecerá em finalização até que o controlador remova as chaves do finalizador ou os finalizadores sejam removidos usando kubectl. Depois que a lista de finalizadores for esvaziada, o Kubernetes poderá recuperar o recurso e colocá-lo em uma fila para ser excluído do registro.

Se nenhum recurso permanecer no namespace, mas o namespace ainda estiver preso no Terminating estado, execute o seguinte comando kubectl patch para esvaziar o campo finalizador:

kubectl patch namespace <namespace-name> --patch '{"metadata": {"finalizers": null}}'

Essa ação permite que você exclua o namespace com êxito ao executar o kubectl delete comando novamente.

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.