将Pod添加到CronJob创建的kubernetes Job中



我有一个定义为禁止并发(concurrencyPolicy: Forbid)的CronJob。现在,由作业通过CronJob本身启动的Pod会生成一个Pod(这是我无法控制的),而这个Pod反过来也可能会或可能不会生成一个Pod。

··········> ··········> time ··········> ··········>
CronJob
|
+-----------------------+----····
|                       |
schedules               schedules
|                       |
v                       v
first Pod ~~~> Exit.    first Pod ~~~> Exit.
|                       |
spawns                  spawns
|                       |
|                       🥺 SECOND COMING OF SECOND POD CONCURRENT WITH FIRST
v                       
second Pod ~~~~~~ still running ~~~~~~>

现在,第一个Pod很快退出,使CronJob控制器以为作业已经完成。但这个作业实际上还在运行,因为它产生了一个Pod。因此,下一次由CronJob调度作业时,它可能会生成一个Pod,该Pod与第一个调度作业生成的其他Pod并发运行。这正是我想要阻止的。

是否有一种方法,我的第一个pod(我完全控制第一个pod,除了它产生一个pod,我不控制在那个pod中发生了什么,或者它是如何产生的,但我可以设置标签和注释)以某种方式将连续产生的pod添加到当前的作业,这样它只被视为完成一旦这些pod返回?


我目前的方法是我自己检查这些衍生的pod,但这很乏味,我更希望kubernetes已经有解决方案了。此外,它还会简单地将我的基础设施作为垃圾收集器来清理作业残留物,然后也会清理这些pod。

我怕kubernetes我没办法帮你搞定。我认为这是应用程序逻辑的问题。KubernetesPod不知道它生成了一个不同的Pod,也不知道它生成了一个不同的Pod

第二个Pod是由你的应用程序在第一个Pod中运行产生的,这个应用程序负责处理这个过程。它可以监视这样的Pods,只有当所有这样的子Pods都被终止时才退出。您可以将其与操作系统上的进程管理进行比较,在操作系统中,允许的进程通常在终止其子进程之前不会退出。

你也可以考虑实现容器生命周期钩子,以便你的父Pods得到通知,例如当子Pod完成它的工作并终止时。

相关内容

  • 没有找到相关文章

最新更新