我们有一个集群,看来似乎永远都不想完全删除名称空间,现在无法重新创建自定义指标名称空间以能够收集自定义指标以正确设置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)
瞧!命名空间被删除
看起来这是一个已知问题,人们尝试混合不同的东西时结果不一:
kubectl delete ns <name> --grace-period=0 --force一些更多的背景,但在这里也是在 pod 级别。
对我来说,删除从来--grace-period=0 --force没有起作用。Rico 的答案很好,但也许您可以在不重新启动集群的情况下完成此操作。
就我而言,在“删除”命名空间后总会重新创建一些对象。
\n\n要查看命名空间中哪些 Kubernetes 资源\xe2\x80\x99t:
\n\nkubectl api-resources --namespaced=true
\nkubectl api-resources --namespaced=false
我正在做的是遍历它并找到所有使用该特定命名空间的 k8s 对象,然后手动删除它们。
\n\n编辑: \n用于查找应删除的对象的另一个有用命令:
\n\nkubectl api-resources --verbs=list --namespaced -o name \\\n | xargs -n 1 kubectl get --show-kind --ignore-not-found -l <label>=<value> -n <namespace>\nRun Code Online (Sandbox Code Playgroud)\n
对我有用的唯一解决方案是:
kubectl get namespace annoying-namespace-to-delete -o json > tmp.json
edit tmp.json and remove"kubernetes" 从 "spec": { "finalizers":[]}
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
这应该删除您的命名空间,
| 归档时间: |
|
| 查看次数: |
6218 次 |
| 最近记录: |