处理K8S集群中无法删除namespace

1、起因

为了需要安装了clusterpolicy中的snyc-secret-policy服务资源,向新生成的namespace中自动挂载docker secret,当某个namespace需要删除的时候,导致了这个namespace空间删除不掉的情况,一直处于Terminating状态,使用kubectl delete ns <terminating-namespace> --force --grace-period=0重启kubelet也无法被删除。

2、解决方法

  1. 查看
1
kubectl get namespaces
  1. 导出
1
kubectl get namespace <terminating-namespace> -o json >tmp.json
  1. 删除tmp.json中的finalizers的值
1
2
3
4
5
6
7
8
{
......
"spec": {
"finalizers": [
]
},
......
}
  1. 开启proxy
1
kubectl proxy
  1. 打开新的窗口删除namespace
1
2
3
curl -k -H "Content-Type: application/json" -X PUT \
--data-binary @tmp.json \
http://127.0.0.1:8001/api/v1/namespaces/<terminating-namespace>/finalize
  1. 验证namespace是否被删除
1
kubectl get namespaces