Cette page explique comment résoudre les problèmes liés à un espace de noms bloqué à l'état Terminating
.
Les espaces de noms utilisent des finaliseurs Kubernetes pour empêcher la suppression lorsqu'une ou plusieurs ressources d'un espace de noms existent toujours.
Lorsque vous supprimez un espace de noms à l'aide de la commande kubectl delete
, celui-ci passe à l'état Terminating
.
L'espace de noms reste à l'état Terminating
jusqu'à ce que Kubernetes supprime ses ressources dépendantes et efface tous les finaliseurs. Le contrôleur de cycle de vie des espaces de noms répertorie d'abord toutes les ressources de l'espace de noms à supprimer par GKE.
Si GKE ne peut pas supprimer une ressource dépendante ou si le contrôleur de cycle de vie de l'espace de noms ne peut pas vérifier que l'espace de noms est vide, l'espace de noms reste à l'état Terminating
jusqu'à ce que le problème soit résolu.
Pour résoudre un problème d'espace de noms bloqué à l'état Terminating
, identifiez et supprimez tous les composants non opérationnels qui bloquent la suppression. Essayez les solutions suivantes dans l'ordre indiqué:
- Rechercher et supprimer des services d'API indisponibles
- Rechercher et supprimer des ressources restantes
- Forcer la suppression de l'espace de noms
Rechercher et supprimer des services d'API indisponibles
Répertoriez les services d'API indisponibles:
kubectl get apiservice | grep False
Résolvez les problèmes liés aux services qui ne répondent pas:
kubectl describe apiservice API_SERVICE
Remplacez
API_SERVICE
par le nom du service qui ne répond pas.Vérifiez si l'état de l'espace de noms est toujours
Terminating
:kubectl get ns | grep Terminating
Rechercher et supprimer des ressources restantes
Répertoriez toutes les ressources restantes dans l'espace de noms en cours d'arrêt :
kubectl api-resources --verbs=list --namespaced -o name | xargs -n 1 kubectl get -n NAMESPACE
Remplacez
NAMESPACE
par le nom de l'espace de noms que vous souhaitez supprimer.Supprimez toutes les ressources affichées dans le résultat.
Vérifiez si l'état de l'espace de noms est toujours
Terminating
:kubectl get ns | grep Terminating
Forcer la suppression de l'espace de noms
Supprimez les finaliseurs bloquant la suppression de l'espace de noms afin de forcer l'arrêt de celui-ci:
Enregistrez le fichier manifeste d'espace de noms en tant que fichier YAML :
kubectl get ns NAMESPACE -o yaml > ns-terminating.yml
Ouvrez le fichier manifeste dans un éditeur de texte et supprimez toutes les valeurs du champ
spec.finalizers
:vi ns-terminating.yml
Vérifiez que le champ des finaliseurs est vide :
cat ns-terminating.yml
Le résultat doit ressembler à ce qui suit :
apiVersion: v1 kind: Namespace metadata: annotations: name: NAMESPACE spec: finalizers: status: phase: Terminating
Démarrez un proxy HTTP pour accéder à l'API Kubernetes:
kubectl proxy
Remplacez le fichier manifeste de l'espace de noms par
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
Vérifiez si l'état de l'espace de noms est toujours
Terminating
:kubectl get ns | grep Terminating
Étapes suivantes
Si vous ne trouvez pas de solution à votre problème dans la documentation, consultez la section Obtenir de l'aide pour obtenir une aide supplémentaire, y compris des conseils sur les sujets suivants:
- En ouvrant une demande d'assistance en contactant l'assistance client Cloud.
- Obtenir de l'aide de la communauté en posant des questions sur StackOverflow et en utilisant la balise
google-kubernetes-engine
pour rechercher des problèmes similaires. Vous pouvez également rejoindre le canal Slack#kubernetes-engine
pour obtenir plus d'aide de la communauté. - Signaler des bugs ou des demandes de fonctionnalités à l'aide de l'outil public de suivi des problèmes