Esta página mostra como resolver problemas com um espaço de nomes bloqueado no estado Terminating
.
Os namespaces usam finalizadores do Kubernetes para impedir a eliminação se ainda existirem um ou mais recursos num namespace.
Quando elimina um espaço de nomes através do comando kubectl delete
, o espaço de nomes
entra no estado Terminating
.
O espaço de nomes permanece no estado Terminating
até o Kubernetes eliminar os respetivos recursos dependentes e limpar todos os finalizadores. O controlador do ciclo de vida do espaço de nomes lista primeiro todos os recursos no espaço de nomes que o GKE precisa de eliminar.
Se o GKE não conseguir eliminar um recurso dependente,
ou se o controlador do ciclo de vida do espaço de nomes não conseguir validar que o espaço de nomes está vazio, o espaço de nomes
permanece no estado Terminating
até resolver o problema.
Para resolver um espaço de nomes bloqueado no estado Terminating
, identifique e remova todos os componentes não íntegros que estejam a bloquear a eliminação. Experimente estas soluções
por ordem:
- Encontre e remova serviços de API indisponíveis.
- Localize e remova os recursos restantes.
- Forçar a eliminação do espaço de nomes.
Encontre e remova serviços de API indisponíveis
Liste os serviços de API indisponíveis:
kubectl get apiservice | grep False
Resolva problemas de serviços que não respondem:
kubectl describe apiservice API_SERVICE
Substitua
API_SERVICE
pelo nome do serviço que não responde.Verifique se o estado do espaço de nomes ainda é
Terminating
:kubectl get ns | grep Terminating
Encontre e remova os recursos restantes
Liste todos os recursos restantes no espaço de nomes de terminação:
kubectl api-resources --verbs=list --namespaced -o name | xargs -n 1 kubectl get -n NAMESPACE
Substitua
NAMESPACE
pelo nome do espaço de nomes que quer eliminar.Remova todos os recursos apresentados na saída.
Verifique se o estado do espaço de nomes ainda é
Terminating
:kubectl get ns | grep Terminating
Forçar a eliminação do espaço de nomes
Remova os finalizadores que bloqueiam a eliminação do espaço de nomes para forçar a terminação do espaço de nomes:
Guarde o manifesto do espaço de nomes como um ficheiro YAML:
kubectl get ns NAMESPACE -o yaml > ns-terminating.yml
Abra o manifesto num editor de texto e remova todos os valores no campo
spec.finalizers
:vi ns-terminating.yml
Verifique se o campo finalizers está vazio:
cat ns-terminating.yml
O resultado deve ser semelhante ao seguinte:
apiVersion: v1 kind: Namespace metadata: annotations: name: NAMESPACE spec: finalizers: status: phase: Terminating
Inicie um proxy HTTP para aceder à API Kubernetes:
kubectl proxy
Substitua o manifesto do espaço de nomes através de
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
Verifique se o estado do espaço de nomes ainda é
Terminating
:kubectl get ns | grep Terminating
O que se segue?
Se não conseguir encontrar uma solução para o seu problema na documentação, consulte a secção Obtenha apoio técnico para receber mais ajuda, incluindo aconselhamento sobre os seguintes tópicos:
- Abrindo um registo de apoio ao cliente através do contacto com o Cloud Customer Care.
- Receber apoio técnico da comunidade fazendo perguntas no StackOverflow e usando a etiqueta
google-kubernetes-engine
para pesquisar problemas semelhantes. Também pode juntar-se ao#kubernetes-engine
canal do Slack para receber mais apoio técnico da comunidade. - Abrir erros ou pedidos de funcionalidades através do rastreador de problemas público.