Esta página mostra como resolver problemas com um namespace que está travado no
estado Terminating
.
Os namespaces usam os finalizadores
do Kubernetes para evitar a exclusão se um ou mais recursos em um namespace ainda existirem.
Quando você exclui um namespace usando o comando kubectl delete
, ele
entra no estado Terminating
.
O namespace fica no estado Terminating
até o Kubernetes excluir os recursos dependentes
e limpar todos os finalizadores. O controlador de ciclo de vida do namespace começa listando todos
os recursos no namespace que o GKE precisa excluir.
Se o GKE não puder excluir um recurso dependente
ou se o controlador de ciclo de vida
do namespace não puder verificar se ele está vazio, ele
vai permanecer no estado Terminating
até que você resolva o problema.
Para resolver um namespace travado no estado Terminating
, identifique
e remova os componentes não íntegros que estão impedindo a exclusão. Tente estas soluções
em ordem:
- Encontre e remova serviços de API indisponíveis.
- Encontre e remova recursos restantes.
- Force a exclusão do namespace.
Encontrar e remover serviços de API indisponíveis
Liste os serviços de API indisponíveis:
kubectl get apiservice | grep False
Solucione os serviços que não respondem:
kubectl describe apiservice API_SERVICE
Troque
API_SERVICE
pelo nome do serviço que não está respondendo.Veja se o status do namespace ainda é
Terminating
:kubectl get ns | grep Terminating
Encontrar e remover recursos restantes
Liste todos os recursos restantes no namespace em encerramento:
kubectl api-resources --verbs=list --namespaced -o name | xargs -n 1 kubectl get -n NAMESPACE
Troque
NAMESPACE
pelo nome do namespace que você quer excluir.Remova todos os recursos exibidos na saída.
Veja se o status do namespace ainda é
Terminating
:kubectl get ns | grep Terminating
Forçar a exclusão do namespace
Remova os finalizadores que impedem a exclusão do namespace para forçar o encerramento dele.
Salve o manifesto a seguir como um arquivo YAML:
kubectl get ns NAMESPACE -o yaml > ns-terminating.yml
Abra o manifesto em um editor de texto e remova todos os valores do campo
spec.finalizers
:vi ns-terminating.yml
Verifique se o campo finalizadores está vazio:
cat ns-terminating.yml
A resposta será parecida com esta:
apiVersion: v1 kind: Namespace metadata: annotations: name: NAMESPACE spec: finalizers: status: phase: Terminating
Inicie um proxy HTTP para acessar a API Kubernetes:
kubectl proxy
Substitua o manifesto do namespace usando
curl
:curl -H "Content-Type: application/yaml" -X PUT --data-binary @ns-terminating.yml http://127.0.0.1:8001/api/v1/namespaces/NAMESPACE/finalize
Veja se o status do namespace ainda é
Terminating
:kubectl get ns | grep Terminating
A seguir
Se precisar de mais ajuda, entre em contato com o Cloud Customer Care.