J'ai eu un espace de noms "bloqué" que j'ai supprimé et qui s'affiche dans cet éternel statut "terminating".
Réponses
Trop de publicités?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 @-
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
-
kubectl get namespace annoying-namespace-to-delete -o json > tmp.json
-
puis modifier
tmp.json
et supprimez "kubernetes" -
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
**
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í
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 exemplenamespace='trust'
Un script complet : https://gist.github.com/jossef/a563f8651ec52ad03a243dec539b333d
0 votes
Votre espace de nom était-il vide ?