k8s删除处于Terminating状态的ns
Posted 一点点积累
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了k8s删除处于Terminating状态的ns相关的知识,希望对你有一定的参考价值。
经常遇到删除ns资源时,长时间处于Terminating状态,
并且使用参数: --force grace-period=0 强制删除无效!
解决办法就是将资源内的
字段删除。- 类似这种情况
# kubectl get ns
NAME STATUS AGE
default Active 226d
ingress-nginx Active 22h
kube-node-lease Active 226d
kube-public Active 226d
kube-system Active 226d
monitoring Active 50d
test Terminating 40s
- 执行下边命令
# 定义变量
NAMESPACE=test
# proxy后台监听8001
kubectl proxy &
# jq将spec字段内改为空,主要是删除finalizers字段
kubectl get namespace $NAMESPACE -o json |jq .spec = >temp.json
curl -k -H "Content-Type: application/json" -X PUT --data-binary @temp.json 127.0.0.1:8001/api/v1/namespaces/$NAMESPACE/finalize
Finalizers:
Finalizers 字段属于 Kubernetes GC 垃圾收集器,是一种删除拦截机制,能够让控制器实现异步的删除前(Pre-delete)回调。其存在于任何一个资源对象的 Meta中,在 k8s 源码中声明为 []string
,该 Slice 的内容为需要执行的拦截器名称。
对带有 Finalizer 的对象的第一个删除请求会为其 metadata.deletionTimestamp:删除的time
设置一个值,当 metadata.deletionTimestamp
字段被设置时,负责监测该对象的各个控制器会通过轮询对该对象的更新请求来执行它们所要处理的所有 Finalizer。
每执行完一个就从 finalizers
中移除一个,直到 finalizers
为空,之后其宿主资源才会被真正的删除。
以上是关于k8s删除处于Terminating状态的ns的主要内容,如果未能解决你的问题,请参考以下文章