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 les composants non opérationnels qui bloquent la suppression. Essayez les solutions suivantes dans l'ordre :
- 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 pour 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
Étape suivante
Si vous avez besoin d'une aide supplémentaire, contactez Cloud Customer Care.