K8S如何强制删除namespace
最近在k8s上通过Prometheus Operator部署了一套prometheus监控系统,现在想删除,但是其命名空间monitoring却一直无法删除处于Terminaling状态
经过查阅资料问题应该是monitoring这个namespace下应该还有其他资源没有删除干净。
下面是删除monitoring 这个namespace的方法:
先运行
kubectl get namespace monitoring -o json > tmp.json
拿到当前namespace描述,然后打开tmp.json,删除其中的spec字段。
将spec里的内容删除干净,保存退出:
然后新开一个窗口运行kubectl proxy跑一个API代理在本地的8081端口
# kubectl proxy --port=8081
最后执行命令:
# curl -k -H "Content-Type: application/json" -X PUT --data-binary @tmp.json http://127.0.0.1:8081/api/v1/namespaces/monitoring/finalize
然后再看一下命名空间,发现monitoring已经被删除了。
经常操作 Kubernetes 集群的同学肯定对 finalizers
字段不陌生,每当删除 namespace 或 pod 等一些 Kubernetes 资源时,有时资源状态会卡在 Terminating
,很长时间无法删除,甚至有时增加 --force
flag 之后还是无法正常删除。这时就需要 edit
该资源,将 finalizers
字段设置为 [],之后 Kubernetes 资源就正常删除了。