Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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
A ferramenta kubectl do Kubernetes.
Observação: para instalar o kubectl usando a CLI do Azure, execute o comando az aks install-cli .
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.