每当删除 namespace 或 pod 等一些 Kubernetes 资源时,有时资源状态会卡在 Terminating,很长时间无法删除,甚至有时增加 --force grace-period=0 之后还是无法正常删除。这时就需要 edit 该资源,或者将该资源导出为 json(通过调用原生接口进行删除), 将 finalizers 字段设置为 [],之后 Kubernetes 资源就正常删除了。
查看 ns 状态
# kubectl get ns
NAME STATUS AGE
default Active 48d
kube-node-lease Active 48d
kube-public Active 48d
kube-system Active 48d
monitoring Terminating 61m
可以看到 monitoring 这个 namespace 一直处于Terminating
状态,一般情况下强删是删不掉的,强删的方法如下:
kubectl delete ns monitoring --force --grace-period=0
如果删不掉,就参考下面的方法
获取 namespace 的 json 文件
kubectl get ns monitoring -o json > /tmp/monitoring.json
查看monitoring.json
的内容
{
"apiVersion": "v1",
"kind": "Namespace",
"metadata": {
"annotations": {
"kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"v1\",\"kind\":\"Namespace\",\"metadata\":{\"annotations\":{},\"name\":\"monitoring\"}}\n"
},
"creationTimesta