254 votes

Espace de nom "bloqué" comme Terminating, comment le supprimer ?

J'ai eu un espace de noms "bloqué" que j'ai supprimé et qui s'affiche dans cet éternel statut "terminating".

0 votes

Votre espace de nom était-il vide ?

54voto

dbustosp Points 1120

J'ai adoré cette réponse extraite de aquí Il ne s'agit que de 2 commandes.

Dans un terminal :

kubectl proxy

Dans un autre terminal :

kubectl get ns delete-me -o json | \
  jq '.spec.finalizers=[]' | \
  curl -X PUT http://localhost:8001/api/v1/namespaces/delete-me/finalize -H "Content-Type: application/json" --data @-

48voto

Harsh Manvar Points 666

Une astuce simple

Vous pouvez éditer l'espace de nom sur la console seulement kubectl edit <namespace name> supprimer/supprimer " Kubernetes " de l'intérieur de la finaliseur et appuyez sur la touche Entrée ou enregistrez/appliquez les modifications.

en une seule étape, vous pouvez aussi le faire.

Truc : 1

  1. kubectl get namespace annoying-namespace-to-delete -o json > tmp.json

  2. puis modifier tmp.json et supprimez "kubernetes"

  3. Ouvrez un autre terminal et exécutez kubectl proxy

curl -k -H "Content-Type : application/json" -X PUT --data-binary @tmp.json https://localhost:8001/api/v1/namespaces/ <NAMESPACE NAME TO DELETE> /finaliser

et il devrait supprimer votre espace de nom.

Truc : 2

Vérifiez le cluster-info de kubectl

1. kubectl cluster-info

Le maître Kubernetes fonctionne à https://localhost:6443

KubeDNS fonctionne à https://localhost:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

Pour déboguer et diagnostiquer plus en profondeur les problèmes de cluster, utilisez

2. kubectl cluster-info dump

Maintenant, démarrez le proxy en utilisant la commande :

3. kubectl proxy

kubectl proxy & Starting to serve on 127.0.0.1:8001

trouver un espace de nom

4. `kubectl get ns`

{votre nom d'espace de nom} Terminant 1d

le mettre dans le dossier

5. kubectl get namespace {Your namespace name} -o json > tmp.json

modifier le fichier tmp.json et supprimer les finaliseurs

}, "spec" : { "finaliseurs" : [ "kubernetes" ] },

après l'avoir modifié, il devrait ressembler à ceci

}, "spec" : { "finaliseurs" : [ ] },

nous y sommes presque, il suffit maintenant de lancer la commande

curl -k -H "Content-Type: application/json" -X PUT --data-binary @tmp.json http://127.0.0.1:8001/api/v1/namespaces/{Your namespace name}/finalize

et c'est parti

**

24voto

Pour nous, c'était le metrics-server qui s'écrasent.

Pour vérifier si cela s'applique à votre cas, effectuez l'opération suivante : kubectl api-resources

Si vous obtenez

error: unable to retrieve the complete list of server APIs: metrics.k8s.io/v1beta1: the server is currently unable to handle the request

Alors c'est probablement le même problème

Les crédits vont à @javierprovecho aquí

20voto

Jossef Harush Points 1656

J'ai écrit un Python3 script en une ligne basé sur les réponses communes ici. Ce script supprime les finalizers dans l'espace de nom problématique.

python3 -c "namespace='<my-namespace>';import atexit,subprocess,json,requests,sys;proxy_process = subprocess.Popen(['kubectl', 'proxy']);atexit.register(proxy_process.kill);p = subprocess.Popen(['kubectl', 'get', 'namespace', namespace, '-o', 'json'], stdout=subprocess.PIPE);p.wait();data = json.load(p.stdout);data['spec']['finalizers'] = [];requests.put('http://127.0.0.1:8001/api/v1/namespaces/{}/finalize'.format(namespace), json=data).raise_for_status()"

renommer namespace='<my-namespace>' avec votre espace de nom. Par exemple namespace='trust'

demo


Un script complet : https://gist.github.com/jossef/a563f8651ec52ad03a243dec539b333d

18voto

Saurav Malani Points 61

Exécuter kubectl get apiservice

Pour la commande ci-dessus, vous trouverez un apiservice avec Available Flag=Flase.

Donc, il suffit de supprimer cet apiservice en utilisant kubectl delete apiservice <apiservice name>

Après avoir fait cela, l'espace de nom avec le statut de terminaison disparaîtra.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X