首页 > 解决方案 > 为什么删除 Kubernetes 命名空间需要这么长时间?

问题描述

我正在尝试编写一些集成测试来设置部署和入口,然后针对入口发出 Web 请求(有效地 curl 命令)以测试入口的配置。还创建了后端和服务,以确保入口正确路由和代理到后端。

然而,拆除设置,运行一组新的测试是很慢的。这里的“拆卸”是指我只是删除所有这些部署所在的命名空间。这可能需要相当长的时间。这是为什么?快速拆除这种设置的最佳方法是什么?

标签: kubernetes

解决方案


Kubernetes 主要通过控制器工作,控制器无休止地循环寻找要做的小块工作(例如在某个地方安排一个 pod,取消安排一个 pod,删除一个入口路由等);这使其高度可靠,但有时会以您的操作相对较高的延迟为代价。命名空间删除需要关闭集群中的所有资源,这需要很多小步骤,因此可能需要一段时间才能完成。

有一个--force选项kubectl delete,但它带有一些听起来很吓人的警告:

--force=false: If true, immediately remove resources from API and
  bypass graceful deletion. Note that immediate deletion of some
  resources may result in inconsistency or data loss and requires
  confirmation.

所以,这可能是不建议做的常规事情(也许更熟悉它的行为的人可以添加到这一点)。

另一种选择是让删除异步进行,而不是阻止您的 CI 作业。该--wait=false标志(默认设置为 true)将确保请求成功输入,但不会阻止 kubectl 在实际发生删除时退出。您的命名空间将进入Terminating状态并最终被删除(除非有什么阻止它下降)。

kubectl delete namespace my-test-namespace-1 --wait=false

这确实意味着您的下一次 CI 运行可能会发现命名空间仍然存在。为避免冲突,您可以对命名空间的名称使用随机后缀或递增计数器。


推荐阅读