k8s强制删除namespace
k8s强制删除namespace
·
有时候删除k8s集群中的namespace,发现过了很长时间后ns的状态显示Terminating。原因是创建ns的时候集群会在ns的资源清单中加入finalizers字段。如下:
apiVersion: v1
kind: Namespace
metadata:
creationTimestamp: "2021-12-25T09:55:49Z"
labels:
kubernetes.io/metadata.name: default
name: default
resourceVersion: "5"
uid: eafdb6ed-9afa-4ae8-9bf1-a2440ff0c7fc
spec:
finalizers:
- kubernetes
status:
phase: Active
Finalizers 是带有命名空间的键,告诉 k8s 等到特定的条件被满足后, 再完 全删除被标记为删除的资源。 Finalizers 提醒控制器清理被删除的对象拥有的资源。当告诉 k8s 删除一个指定了 Finalizer 的对象时, Kubernetes API 通过填充 .metadata.deletionTimestamp 来标记要删除的对象, 并返回202状态码 (HTTP “已接受”) 使其进入只读状态。 此时控制平面或其他组件会采取 Finalizers 所定义的行动, 而目标对象仍然处于终止中(Terminating)的状态。 这些行动完成后,控制器会删除目标对象相关的 Finalizers。 当 finalizers 字段为空时,k8s 认为删除已完成。
因此,可以更新ns的yaml文件,将finalizers字段去掉。下面我们采用调用API接口的方法更新yaml文件。
首先将k8s的API服务器的代理打开
kubectl proxy
根据打印的信息获取代理端口。
kubectl get ns xxx -o json > tmp.json
打开tmp.json文件,删除finalizers字段,然后保存退出。
接着调用接口
curl -k -H "Content-Type: application/json" -X PUT --data-binary @tmp.json http://127.0.0.1:8001/api/v1/namespaces/xxx/finalize
调用成功会返回2XX。
更多推荐
已为社区贡献16条内容
所有评论(0)