k8s删除Terminating状态的namespace
发布时间:2020-11-08 20:05:02阅读:(212)
在k8s中,namespace只有两种状态,Active和Terminating,后者一般比较少见,只有当命名空间被删除,而命名空间下还存在运行的资源时,才会出现terminating状态。当命名空间下资源回收后,命名空间会被自动删除。当也存在一些意外情况,导致已经没有相关资源了,而namespace依然在terminating状态下无法删除,这里介绍一种删除方法。
先执行以下命令,获取namespace信息
kubectl get namespace <terminating-namespace> -o yaml
得到以下信息:
apiVersion: v1
kind: Namespace
metadata:
creationTimestamp: "2020-11-06T15:30:39Z"
deletionTimestamp: "2020-11-08T17:21:15Z"
name: <terminating-namespace>
resourceVersion: "28817"
selfLink: /api/v1/namespaces/<terminating-namespace>
uid: 39d05ff3-c773-4c41-82e1-fef2fe440aad
spec:
finalizers:
- kubernetes
status:
phase: Terminating
导出json格式到tmp.json
kubectl get namespace <terminating-namespace> -o json > tmp.json
修改tmp.json,删除finalizers字段
{
"apiVersion":"v1",
"kind":"Namespace",
"metadata":{
"creationTimestamp":"2020-11-06T15:30:39Z",
"deletionTimestamp":"2020-11-08T17:21:15Z",
"name":"<terminating-namespace>",
"resourceVersion":"28817",
"selfLink":"/api/v1/namespaces/<terminating-namespace>",
"uid":"39d05ff3-c773-4c41-82e1-fef2fe440aad"
},
"spec":{
"finalizers":[]
},
"status":{
"phase":"Terminating"
}
}
使用http接口进行删除
curl -k -H "Content-Type:application/json" -X PUT --data-binary @tmp.json https://x.x.x.x:6443/api/v1/namespaces/<terminating-namespace>/finalize
如此即可删除terminating状态下的namespace了
以上操作还是比较麻烦,还有一种更简单的,原理和上面一致,只是把几步操作合并了
kubectl get namespace <terminating-namespace> -o json\
| tr -d "\n" | sed "s/\"finalizers\": \[[^]]\+\]/\"finalizers\": []/"\
| kubectl replace --raw /api/v1/namespaces/<terminating-namespace>/finalize -f - deletionTimestamp
文章版权及转载声明:
文章转载或复制请以超链接形式并注明出处陌上小筑
发表评论