强制删除 k8s terminating 状态命名空间

Table of Contents

当删除一个命名空间时,未完全删除时中断了删除操作,这时命名空间处于 terminating 状态。一种解决方式是,再次删除,命令后加上 --force 选项,如:

kubectl delete ns <terminating-namespace> --force

但往往还是不行,这时需要使用接口删除这个命名空间。

首先,将 terminating 状态的命名空间信息导出到 json 文件:

kubectl get ns <terminating-namespace> -o json > temp.json

这时当前目录下会有一个 tmp.json 的文件,编辑该文件,将 finalizers 的值置空(置为空数组)。

其次,打开 proxy:

kubectl proxy

打开一个新的命令行终端,在 temp.json 文件所在位置调下面的接口:

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

其中 <terminating-namespace> 改为需要删除的 terminating 状态的命名空间的名字。

最后验证下:

kubectl get ns

不会再有这个 terminating 状态的命名空间了。