【发布时间】:2020-07-01 02:23:09
【问题描述】:
由于我们的一项服务中存在内存泄漏,我计划添加一个 k8s CronJob 来安排定期重启泄漏服务。目前我们没有资源来正确调查内存泄漏,因此我们需要一个临时解决方案来快速减少由泄漏引起的问题。这将是滚动重启,如下所述:
我已经在我们的测试集群中对此进行了测试,它似乎可以按预期工作。该服务有 2 个副本处于测试阶段,3 个处于生产阶段。
我的计划是安排 CronJob 每 2 小时运行一次。
我现在想知道:如果新的 CronJob 碰巧在服务升级已经运行时执行,它将如何表现?我们进行滚动升级以实现零停机时间,有时我们一天会推出多次升级。我不想通过说“请确保您永远不要在 08:00、10:00、12:00 等附近部署”来限制部署升级的人。从长远来看,这永远不会奏效。
反之亦然,我也想知道如果在 CronJob 已经在运行并且 Pod 正在重新启动时开始升级会发生什么。
kubernetes 有内置的东西来处理这种冲突吗?
【问题讨论】:
-
如果 Pod 上有
resources:声明,我希望 kubernetes 会自动杀死泄漏的 Pod,从而让你摆脱这种反模式;遇到需要如此复杂解决方法的内存以外的泄漏? -
公平的问题,但是在 k8s 重新启动它们之前,pod 似乎变慢了很多,我们希望避免这种情况。因此,即使在内存消耗超出预期之前,也需要重新启动它们。显然,正确的解决方案是修复内存泄漏,我们最终会这样做。但现在假期快到了,我们需要一个快速的临时解决方案。
标签: kubernetes google-kubernetes-engine