J'ai eu un espace de noms "collé" que j'ai effacé, affichant dans cet état "final" éternel.
Pour nous, c'était le metrics-server
qui plantait.
Donc, pour vérifier si cela est pertinent pour votre cas, procédez comme suit: 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
Ensuite, c'est probablement le même problème
Crédits vont à @javierprovecho ici
Le seul moyen que j'ai trouvé pour supprimer un espace de noms "terminating
" consiste à supprimer l'entrée de la section "finalizers". J'ai essayé de --force
de le supprimer et de --grace-period=0
aucun d'entre eux n'a fonctionné. Cependant, cette méthode fonctionnait:
sur une ligne de commande, affiche les informations de l'espace de noms:
$ kubectl get namespace your-rogue-namespace -o yaml
Cela vous donnera une sortie yaml, cherchez une ligne qui ressemble à ceci:
deletionTimestamp: 2018-09-17T13:00:10Z
finalizers:
- Whatever content it might be here...
labels:
Ensuite, éditez simplement la configuration de l'espace de noms et supprimez les éléments à l'intérieur de ce conteneur de finaliseurs.
$ kubectl edit namespace your-rogue-namespace
Cela va ouvrir un éditeur (dans mon cas VI), parcouru la ligne que je voulais supprimer et supprimé, j'ai appuyé sur la touche D deux fois pour supprimer la ligne entière.
Enregistrez-le, quittez votre éditeur et comme par magie. L'espace de nommage non autorisé devrait avoir disparu.
Et pour le confirmer juste:
$ kubectl get namespace your-rogue-namespace -o yaml
Soyez averti qu'il pourrait rester des ressources orphelines par la suite.
En supposant que vous ayez déjà essayé de forcer la suppression de ressources telles que: Des pods sont bloqués à la fin du statut , et vous vous efforcez en vain de récupérer l'espace de nom ...
Vous pouvez forcer la suppression de l'espace de noms (peut-être en laissant des ressources en suspens):
(
NAMESPACE=your-rogue-namespace
kubectl proxy &
kubectl get namespace $NAMESPACE -o json |jq '.spec = {"finalizers":[]}' >temp.json
curl -k -H "Content-Type: application/json" -X PUT --data-binary @temp.json 127.0.0.1:8001/api/v1/namespaces/$NAMESPACE/finalize
)
Ceci est un raffinement de la réponse ici , qui repose sur le commentaire ici .
J'utilise l'utilitaire jq
pour supprimer par programme des éléments dans la section des finaliseurs. Vous pouvez le faire manuellement à la place.
kubectl proxy
crée l'écouteur à 127.0.0.1:8001
par défaut. Si vous connaissez le nom d'hôte/IP de votre maître de cluster, vous pourrez peut-être l'utiliser à la place.
Ce qui est amusant, c’est que cette approche semble fonctionner même si vous utilisez kubectl edit
, le même changement n’a aucun effet.