web-dev-qa-db-fra.com

Espace de noms "collé" en tant que Terminating, comment je l'ai supprimé

J'ai eu un espace de noms "collé" que j'ai effacé, affichant dans cet état "final" éternel.

2
ximbal

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

2

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.

1
ximbal

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:8001par 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.

0
nobar