首页 > 解决方案 > Kubernetes 命名空间停留在终止状态

问题描述

我们有一个集群,其中似乎永远不想完全删除命名空间,现在无法重新创建自定义指标命名空间来收集自定义指标以正确设置 HPA。我完全理解我可以使用所有自定义指标资源创建另一个命名空间,但有点担心集群的整体健康状况,因为命名空间陷入“终止”状态

$ kubectl get ns
NAME             STATUS        AGE
cert-manager     Active        14d
custom-metrics   Terminating   7d
default          Active        222d
nfs-share        Active        15d
ingress-nginx    Active        103d
kube-public      Active        222d
kube-system      Active        222d
lb               Terminating   4d
monitoring       Terminating   6d
production       Active        221d

我已经尝试将命名空间导出到 JSON,删除终结器并使用编辑过的 JSON 文件重新创建。还尝试 kubectl 编辑 ns custom-metrics 并删除“-kubernetes”终结器。一切都无济于事。

有人对我如何尝试销毁这些“卡住”的命名空间有任何其他建议吗?

curl to https://master-ip/api/v1/namespace/...../finalize对我来说似乎不适用于 Google Kubernetes Engine,我假设 GKE 集群上不允许这些操作

尝试类似的事情也不起作用:

$ kubectl delete ns custom-metrics --grace-period=0 --force

警告:立即删除不会等待确认正在运行的资源已终止。该资源可能会无限期地继续在集群上运行。来自服务器的错误(冲突):无法在命名空间“custom-metrics”上完成操作:系统正在确保从此命名空间中删除所有内容。完成后,系统会自动清除此命名空间。

并且此命名空间中根本没有列出任何资源: kubectl get all -n custom-metrics或循环遍历此命名空间中的所有 api-resources 显示根本不存在资源: kubectl api-resources --namespaced=true -o name | xargs -n 1 kubectl get -n custom-metrics

标签: kubernetes

解决方案


我做了类似于 rahul.tripathi 的事情,除了 curl 对我不起作用 - 我跟着https://medium.com/@craignewtondev/how-to-fix-kubernetes-namespace-deleting-stuck-in-terminating-state- 5ed75792647e执行以下操作:

NAMESPACE=
kubectl get namespace $NAMESPACE -o json > $NAMESPACE.json
sed -i -e 's/"kubernetes"//' $NAMESPACE.json
kubectl replace --raw "/api/v1/namespaces/$NAMESPACE/finalize" -f ./$NAMESPACE.json

瞧!命名空间被删除


推荐阅读