正如Kuberenetes文档中关于作业主题的解释:
activeDeadlineSeconds
适用于作业的持续时间,无论创建了多少个Pod。一旦作业到达activeDeadlineSeconds
,其所有正在运行的Pod都将终止,作业状态将变为type: Failed
和reason: DeadlineExceeded
。
但是,我想做的是限制每个pod的时间。如果一个pod花费太长时间,我希望它失败,但我希望其他pod继续,并在必要时创建更多的pod。
我会解释一下我的任务,只是为了把问题弄清楚。该作业包括从Redis数据库中获取项目,该数据库充当一种队列。每个pod处理一个项目(好吧,数量可能会有所不同(。如果一个pod处理一个项目的时间太长,我希望它失败。但是,其他pod应该继续,作业应该继续创建pod并从数据库中检索更多项目。
您的用例似乎与kubernetes文档中的这个示例完全相同
正如您所说,activeDeadlineSeconds
不是您应该在此处使用的参数。
我不知道如果pod不能在给定的时间范围内处理一个项目,你为什么希望它失败。我在这里看到了一些不同的方法,但需要更多关于问题性质的信息才能知道该采取哪种方法。解决问题的一种方法是将作业并行性设置为您希望同时运行的pod数量,并在代码本身中设置这种行为-
- 如果延迟处理的问题是暂时的,您可能希望终止当前事务,将该项保留在队列中,然后重新开始处理同一项
- 如果同一项已失败x次,则应将其从队列中删除,并推送到某种死信队列中,以等待稍后的故障排除
另一种方法是将队列中的消息展开,为每条消息生成一个工作容器,与本例所示相同
选择此解决方案确实会导致每个处理项目所花费的时间过长的pod失败,如果您将创建的pod的restartPolicy
设置为never
,则您手上应该有一个失败pod列表,该列表对应于处理项目失败的数量。
说了这么多,我认为让pod失败不是正确的方法,并且应该通过容器日志或度量使用检测来跟踪失败的处理事件。