Kubernetes命名空间处于终止状态

Ale*_*nov 5 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
Run Code Online (Sandbox Code Playgroud)

我已经尝试将名称空间导出为JSON,删除终结器并使用已编辑的JSON文件重新创建。还尝试kubectl编辑ns自定义指标并删除“-kubernetes”终结器。一切都无济于事。

是否有人对我如何可以销毁这些“卡住”的命名空间有其他建议?

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

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

$ kubectl delete ns custom-metrics --grace-period=0 --force
Run Code Online (Sandbox Code Playgroud)

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

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

sar*_*ole 30

我做了一些类似于 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
Run Code Online (Sandbox Code Playgroud)

瞧!命名空间被删除

  • 这是实际的修复,您节省了我的时间,谢谢。 (2认同)
  • 看起来这也是 EKS 的“官方”答案:https://aws.amazon.com/premiumsupport/knowledge-center/eks-termminate-namespaces/ (2认同)

Ric*_*ico 5

看起来这是一个已知问题,人们尝试混合不同的东西时结果不一:

  • 弹跳 kube-controller-manager
  • 弹跳所有的 kubelets
  • 弹跳整个集群
  • kubectl delete ns <name> --grace-period=0 --force
  • 到处修补终结器“null”。

一些更多的背景,但在这里也是在 pod 级别。

  • 显然,我也尝试过,但无济于事:`kubectl delete ns custom-metrics --grace-period=0 --force` 警告:立即删除不会等待正在运行的资源已终止的确认。资源可能会无限期地继续在集群上运行。服务器错误(冲突):无法在命名空间“custom-metrics”上完成操作:系统正在确保从此命名空间中删除所有内容。完成后,系统会自动清除此命名空间。它仍然以相同的终止状态永远留在原地 (2认同)

Iva*_*cki 5

对我来说,删除从来--grace-period=0 --force没有起作用。Rico 的答案很好,但也许您可以在不重新启动集群的情况下完成此操作。

\n\n

就我而言,在“删除”命名空间后总会重新创建一些对象。

\n\n

要查看命名空间中哪些 Kubernetes 资源\xe2\x80\x99t:

\n\n

kubectl api-resources --namespaced=true
\nkubectl api-resources --namespaced=false

\n\n

我正在做的是遍历它并找到所有使用该特定命名空间的 k8s 对象,然后手动删除它们。

\n\n

编辑: \n用于查找应删除的对象的另一个有用命令:

\n\n
kubectl api-resources --verbs=list --namespaced -o name \\\n  | xargs -n 1 kubectl get --show-kind --ignore-not-found -l <label>=<value> -n <namespace>\n
Run Code Online (Sandbox Code Playgroud)\n


rah*_*thi 5

对我有用的唯一解决方案是:

  1. kubectl get namespace annoying-namespace-to-delete -o json > tmp.json

  2. edit tmp.json and remove"kubernetes""spec": { "finalizers":[]}

  3. curl -k -H "Content-Type: application/json" -X PUT --data-binary @tmp.json https://kubernetes-cluster-ip/api/v1/namespaces/annoying-namespace-to-delete/finalize

这应该删除您的命名空间,