Kubernetes作业中的Pod时间限制--每个Pod的.spec.activeDeadlineSeconds



正如Kuberenetes文档中关于作业主题的解释:

activeDeadlineSeconds适用于作业的持续时间,无论创建了多少个Pod。一旦作业到达activeDeadlineSeconds,其所有正在运行的Pod都将终止,作业状态将变为type: Failedreason: DeadlineExceeded

但是,我想做的是限制每个pod的时间。如果一个pod花费太长时间,我希望它失败,但我希望其他pod继续,并在必要时创建更多的pod。

我会解释一下我的任务,只是为了把问题弄清楚。该作业包括从Redis数据库中获取项目,该数据库充当一种队列。每个pod处理一个项目(好吧,数量可能会有所不同(。如果一个pod处理一个项目的时间太长,我希望它失败。但是,其他pod应该继续,作业应该继续创建pod并从数据库中检索更多项目。

您的用例似乎与kubernetes文档中的这个示例完全相同
正如您所说,activeDeadlineSeconds不是您应该在此处使用的参数。

我不知道如果pod不能在给定的时间范围内处理一个项目,你为什么希望它失败。我在这里看到了一些不同的方法,但需要更多关于问题性质的信息才能知道该采取哪种方法。解决问题的一种方法是将作业并行性设置为您希望同时运行的pod数量,并在代码本身中设置这种行为-

  • 如果延迟处理的问题是暂时的,您可能希望终止当前事务,将该项保留在队列中,然后重新开始处理同一项
  • 如果同一项已失败x次,则应将其从队列中删除,并推送到某种死信队列中,以等待稍后的故障排除

另一种方法是将队列中的消息展开,为每条消息生成一个工作容器,与本例所示相同
选择此解决方案确实会导致每个处理项目所花费的时间过长的pod失败,如果您将创建的pod的restartPolicy设置为never,则您手上应该有一个失败pod列表,该列表对应于处理项目失败的数量。

说了这么多,我认为让pod失败不是正确的方法,并且应该通过容器日志或度量使用检测来跟踪失败的处理事件。

相关内容

  • 没有找到相关文章

最新更新