【发布时间】:2019-09-15 02:58:19
【问题描述】:
如何强制删除卡在 Terminating 中的命名空间?
重建步骤:
- 应用此 YAML
apiVersion: v1
kind: Namespace
metadata:
name: delete-me
spec:
finalizers:
- foregroundDeletion
kubectl delete ns delete-me无法删除
delete-me。
我发现的唯一解决方法是销毁并重新创建整个集群。
我尝试过的事情:
这些都不起作用或修改命名空间。在其中任何一个之后,有问题的终结器仍然存在。
编辑 YAML 和 kubectl apply
申请:
apiVersion: v1
kind: Namespace
metadata:
name: delete-me
spec:
finalizers:
$ kubectl apply -f tmp.yaml
namespace/delete-me configured
命令完成且没有错误,但命名空间未更新。
下面的 YAML 有同样的结果:
apiVersion: v1
kind: Namespace
metadata:
name: delete-me
spec:
kubectl edit
kubectl edit ns delete-me,并删除终结器。同上完全删除列表。同上删除spec。同样用空列表替换 finalizers。
$ kubectl edit ns delete-me
namespace/delete-me edited
这不会显示错误消息,但不会更新命名空间。 kubectl editing 对象再次显示终结器仍然存在。
kubectl proxy &
kubectl proxy &curl -k -H "Content-Type: application/yaml" -X PUT --data-binary @tmp.yaml http://127.0.0.1:8001/api/v1/namespaces/delete-me/finalize
如上,成功退出但什么也不做。
强制删除
kubectl delete ns delete-me --force --grace-period=0
这实际上会导致错误:
warning: Immediate deletion does not wait for confirmation that the running resource has been terminated. The resource may continue to run on the cluster indefinitely.
Error from server (Conflict): Operation cannot be fulfilled on namespaces "delete-me": The system is ensuring all content is removed from this namespace. Upon completion, this namespace will automatically be purged by the system.
然而,它实际上并没有做任何事情。
等一下
在我为调试此问题而设置的测试集群中,我已经等待了一个多星期。即使命名空间最终可能决定被删除,我也需要在一周内将其删除。
确保命名空间为空
命名空间为空。
$ kubectl get -n delete-me all
No resources found.
etcdctl
$ etcdctl --endpoint=http://127.0.0.1:8001 rm /namespaces/delete-me
Error: 0: () [0]
我很确定这是一个错误,但我不知道如何解释它。它也不起作用。还尝试了--dir 和-r。
ctron/kill-kube-ns
有一个script for force deleting Namespaces。这也不起作用。
$ ./kill-kube-ns delete-me
Killed namespace: delete-me
$ kubectl get ns delete-me
NAME STATUS AGE
delete-me Terminating 1h
POSTing 编辑的资源到 /finalize
Returns a 405。我不确定这是否是 POST 到 /finalize 的规范方式。
链接
This appears to be a recurring problem and none of these resources helped.
【问题讨论】:
-
你做对了,但是里面有些东西需要很长时间才能删除。没有办法再强迫它了。只需检查剩下的
kubectl -n <ns> get all -o yaml可能会为您提供更多信息。 -
你试过从 etcd 中删除它吗?像 etcdctl rm /namespaces/delete-me ?
-
@MaxLobur 命名空间是空的,在某些情况下,我等待删除的时间已经超过一周。更新帖子。
标签: kubernetes kubernetes-namespace