【发布时间】:2021-09-08 17:12:30
【问题描述】:
我有一个应用程序,我想并行扩展,但希望在每个新 pod 创建之间有一个短暂的暂停。
我需要这个,因为在创建 pod 期间我更新了一个文件,如果在下一个 pod 尝试打开并更新它时文件没有关闭,它将失败。
所以我只需要在 pod 打开和关闭这个文件之间有 1 秒的缓冲时间。
现在,如果发生规模并添加了 1 个以上的新 pod,它们会同时命中文件。所以一个 pod 会工作,另一个会失败,我必须等待 pod 超时让 k8s 杀死它并重新创建它,此时它会起作用,但是在我需要的时候在扩展事件期间浪费了很多宝贵的时间尽快新的 pod 来处理负载。
不确定我的搜索措辞是否正确,但无法在 k8s 网站上找到。任何想法都会有所帮助。
(附加说明,我知道在StatefulSet 上,默认情况下它会一次扩展 1 个 pod,但是,该方法要求所有 pod 都健康才能继续一次添加一个节点,如果任何 pod 变为unhealthy 它将停止扩展,直到所有 pod 再次健康为止。在高负载情况下,这不是理想的)
【问题讨论】:
-
这是什么文件?如果文件是静态的并且不经常更改,那么您可以在部署中将文件挂载为 configMap,以便所有 pod 都具有相同的文件。或者您可以做的另一种方法是您可以使用 ReadWriteMany 访问权限将此文件挂载到 PVC 上,然后您的 pod 可以在启动时访问这些文件。
-
我无权对文件管理执行任何操作(我无法移动它、更改其使用方式等)。基本上,我有一个 initContainer 在我的主容器启动之前运行,它使用新 pod 需要存在的数据更新这个文件。它似乎有某种策略,一次只允许 1 个并发连接。
标签: kubernetes kubernetes-pod horizontal-scaling