kubernetes - 为什么删除 Kubernetes 命名空间需要这么长时间?
问题描述
我正在尝试编写一些集成测试来设置部署和入口,然后针对入口发出 Web 请求(有效地 curl 命令)以测试入口的配置。还创建了后端和服务,以确保入口正确路由和代理到后端。
然而,拆除设置,运行一组新的测试是很慢的。这里的“拆卸”是指我只是删除所有这些部署所在的命名空间。这可能需要相当长的时间。这是为什么?快速拆除这种设置的最佳方法是什么?
解决方案
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 运行可能会发现命名空间仍然存在。为避免冲突,您可以对命名空间的名称使用随机后缀或递增计数器。
推荐阅读
- html - 无论周围的项目如何,如何固定元素的位置?
- corda - Corda:本地机器上新添加的 Corda 节点,其他节点无法访问
- python - 如何将 Tx_raw 转换为 Tx_ID/HASH
- python - 如何使用scrapy抓取具有多个页面的网站
- vb.net - 如何使用 vb.net 从 GitHub Enterprise 下载 all_user.csv 报告并避免 404 错误?我可以使用 Curl 做到这一点
- asp.net - Devart Oracle 存储过程性能问题
- python - 此代码应返回产品标题,但我得到的不是标题,而是“无”作为回报
- angular - 如何在 tsconfig.json 文件中为外部库配置路径属性
- tomcat - 类在战争中找不到但可用
- microsoft-graph-api - Microsoft graph API webhook 更改通知 - 更改后的时间