Kubernetes Namespace卡在Terminating状态的解决求助
解决Kubernetes Namespace卡在Terminating状态的问题
问题根源
从你提供的Namespace YAML状态可以明确核心故障:
Discovery failed for some groups, 1 failing: unable to retrieve the complete list of server APIs: metrics.k8s.io/v1beta1: an error on the server ("Internal Server Error: "/apis/metrics.k8s.io/v1beta1?timeout=32s": the server could not find the requested resource")
这是因为K8s集群的metrics.k8s.io/v1beta1 API无法正常访问,导致Namespace删除流程中的资源发现阶段失败,进而卡在Terminating状态。该API通常由metrics-server提供,大概率是metrics-server未正常运行,或已被卸载但残留了API注册信息。
解决方案步骤
第一步:修复metrics API访问问题
- 先检查kube-system命名空间下metrics-server的运行状态:
kubectl get pods -n kube-system | grep metrics-server
- 如果metrics-server Pod存在但未正常运行,直接重启Pod:
kubectl delete pod <metrics-server-pod名称> -n kube-system
- 如果metrics-server已卸载但APIService残留,清理对应的注册信息:
# 查找metrics相关的APIService kubectl get apiservices | grep metrics.k8s.io # 删除残留的APIService kubectl delete apiservice v1beta1.metrics.k8s.io
- 如果集群需要保留metrics API但未安装metrics-server,重新部署兼容当前K8s版本的实例(你的EKS集群版本是1.22,推荐使用metrics-server v0.6.x版本)。
第二步:强制删除卡在Terminating状态的Namespace
当metrics API问题修复后,若Namespace仍处于Terminating状态,执行以下操作强制清理:
方法一:使用kubectl patch命令
# 清理observability命名空间的finalizers kubectl patch namespace observability -p '{"spec":{"finalizers":[]}}' --type=merge # 对odigos-system命名空间执行同样操作 kubectl patch namespace odigos-system -p '{"spec":{"finalizers":[]}}' --type=merge
方法二:使用curl直接调用API(若patch命令失败)
- 获取集群API Server地址:
kubectl config view --minify -o jsonpath='{.clusters[0].cluster.server}'
- 获取认证Token:
kubectl get secret $(kubectl get serviceaccount default -o jsonpath='{.secrets[0].name}') -o jsonpath='{.data.token}' | base64 -d
- 发送PATCH请求清理finalizers:
# 替换<API_SERVER>和<TOKEN>为实际获取到的值 curl -X PATCH -H "Content-Type: application/strategic-merge-patch+json" \ -H "Authorization: Bearer <TOKEN>" \ <API_SERVER>/api/v1/namespaces/observability/finalize \ -d '{"spec":{"finalizers":[]}}' # 对odigos-system执行同样请求,替换命名空间名称即可
执行完以上操作后,等待1-2分钟,Namespace即可被彻底删除。
内容的提问来源于stack exchange,提问作者rp346
相关产品推荐
相关产品推荐

