删除 namespace 时,卡在 Terminating,很长时间无法删除,甚至增加 --force grace-period=0 之后还是无法正常删除。通过将该 namespace 导出为 json,进行相应的修改,然后调用原生接口就可以进行正常删除了。
查看 Namespace
可以看到 longhorn-system 命名空间处于 Terminating 正在删除状态:
[root@node1 ~]# kubectl get ns
NAME STATUS AGE
longhorn-system Terminating 10m
将 Namespace 导出为 JSON 格式
[root@node1 ~]# kubectl get ns longhorn-system -o json > tmp.json
对导出的 JSON 文件进行编辑
编辑前:
{
......
"spec": {
"finalizers": [
"kubernetes"
]
},
"status": {
"conditions": [
......
]
"phase": "Terminating"
}
}
编辑后如下:
{
......
"spec": {
},
"status": {
"phase": "Terminating"
}
}
注:如果结果中 "spec": {} 中为空,则需要看下 metadata 部分是否有 finalizers 字段,如有则需要将 "finalizers": 字段值清空, “spec”:{} 字段值也要清空。
开启 Proxy
[root@node1 ~]# kubectl proxy --port=8090
Starting to serve on 127.0.0.1:8090
调用 API 删除 Namespace
[root@node1 ~]# curl -k -H "Content-Type: application/json" -X PUT --data-binary @tmp.json 127.0.0.1:8090/api/v1/namespaces/longhorn-system/finalize