[K8S] Namespace blijft hangen op Terminating

Dan is dit wellicht de oplossing:

$ kubectl cluster-info
Kubernetes master is running at https://localhost:6443
KubeDNS is running at https://localhost:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

Nu is het noodzakelijk om op de master de kube-proxy op te starten

$ kubectl proxy &

Vervolgens is het handig om de namespace in een variable te exporteren:

$ export namespace=namespace-to-delete

Hiermee gaan we de namespace-configuratie in een json bestand plaatsen met:

$ kubectl get ns $namespace -o json > tmp.json

Edit nu het json-bestand en verwijder de ‘kubernetes‘ finalizer:

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

wordt dan:

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

Voer tenslotte het volgende commando uit met het aangepaste json bestand.

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

Hierna is de namespace verwijderd van het cluster!

(verwijder eventueel de proxy daemon op de master)

Rancher Cluster?

Bij een Kubernetes Cluster dat onder Rancher is aangemaakt is er de kans dat ‘kubectl proxy’ niet werkt. Hier kan het volgende een mogelijke oplossing zijn:

$ kubectl get apiservice

...
v1beta1.batch                          Local                                                            True                      4d15h
v1beta1.certificates.k8s.io            Local                                                            True                      4d15h
v1beta1.coordination.k8s.io            Local                                                            True                      4d15h
v1beta1.custom.metrics.k8s.io          cattle-monitoring-system/rancher-monitoring-prometheus-adapter   False (ServiceNotFound)   130m
v1beta1.discovery.k8s.io               Local                                                            True                      4d15h
v1beta1.events.k8s.io                  Local                                                            True                      4d15h
 ...

Hier kan de apiservice met status ‘False‘ handmatig verwijderd worden en dan kan de bewuste namespace toch verdwijnen.

$ kubectl delete apiservice v1beta1.custom.metrics.k8s.io
apiservice.apiregistration.k8s.io "v1beta1.custom.metrics.k8s.io" deleted

$ kubectl get ns