k8s删除Terminating状态的namespace

发布时间:2020-11-08 20:05:02阅读:(199)

在k8s中,namespace只有两种状态,ActiveTerminating,后者一般比较少见,只有当命名空间被删除,而命名空间下还存在运行的资源时,才会出现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

标签:k8s

发表评论

评论列表(有0条评论199人围观)
暂无评论