问题起因:删除k8s名称空间的时候(此时名称空间下还有很多pod)一直删不掉,被我强行ctrl +c了,
问题表象:然后就出现下面这悲催的一幕了,两个名称空间一直处于Terminating了
[root@master02 ~]# kubectl get ns -o wide
NAME STATUS AGE
calico-apiserver Active 3d2h
calico-system Active 3d3h
default Active 3d3h
ingress-nginx Terminating 52m
kube-node-lease Active 3d3h
kube-public Active 3d3h
kube-system Active 3d3h
metallb-system Terminating 152m
tigera-operator Active 3d3h
wordpress Active 2d1h
因为分析不出来原因,就去百度了,尝试了强制删除 kubectl delete namespace [namespace] --force --grace-period=0 和通过接口删除不怎么好使,后面就找到了下面的方案
问题解决:运行以下命令,替换一下删不掉的名称空间即可,如我的:metallb-system ingress-nginx
[root@k8s-master1 ~]# kubectl get namespace metallb-system -o json \
> | tr -d "\n" | sed "s/\"finalizers\": \[[^]]\+\]/\"finalizers\": []/" \
> | kubectl replace --raw /api/v1/namespaces/metallb-system/finalize -f -
[root@master02 ~]# kubectl get ns
NAME STATUS AGE
calico-apiserver Active 3d3h
calico-system Active 3d3h
default Active 3d4h
kube-node-lease Active 3d4h
kube-public Active 3d4h
kube-system Active 3d4h
tigera-operator Active 3d3h
wordpress Active 2d2h
自此两个名称空间删除完毕,因为时间紧,只是短暂记下来,以后有机会在探索那条命令啥意思。
总得来说,删除名称空间,一定要把名称空间下资源删干净,在删名称空间,也别随便终止了,自己测试环境瞎搞没关系,就怕上产环境大家也这么玩,最后送大家一句话,且删且珍惜!