Résoudre les problèmes liés à un espace de noms bloqué à l'état "Arrêt en cours"


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 :

  1. Rechercher et supprimer des services d'API indisponibles
  2. Rechercher et supprimer des ressources restantes
  3. Forcer la suppression de l'espace de noms

Rechercher et supprimer des services d'API indisponibles

  1. Répertoriez les services d'API indisponibles:

    kubectl get apiservice | grep False
    
  2. 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.

  3. Vérifiez si l'état de l'espace de noms est toujours Terminating :

    kubectl get ns | grep Terminating
    

Rechercher et supprimer des ressources restantes

  1. 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.

  2. Supprimez toutes les ressources affichées dans le résultat.

  3. 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 :

  1. Enregistrez le fichier manifeste d'espace de noms en tant que fichier YAML :

    kubectl get ns NAMESPACE -o yaml > ns-terminating.yml
    
  2. Ouvrez le fichier manifeste dans un éditeur de texte et supprimez toutes les valeurs du champ spec.finalizers :

    vi ns-terminating.yml
    
  3. 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
    
  4. Démarrez un proxy HTTP pour accéder à l'API Kubernetes:

    kubectl proxy
    
  5. 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
    
  6. 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.