【问题标题】:Add Pod to a kubernetes Job created by a CronJob将 Pod 添加到由 CronJob 创建的 kubernetes 作业
【发布时间】:2021-05-12 12:16:12
【问题描述】:

我有一个 CronJob,它被定义为禁止并发 (concurrencyPolicy: Forbid)。现在,由 CronJob 本身由 Job 启动的 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 控制器以为 Job 已完成。但该作业实际上仍在运行,因为它产生了一个 Pod。因此,下次 CronJob 调度 Job 时,它可能会生成一个 Pod,该 Pod 与第一个调度 Job 生成的其他 Pod 并发运行。这正是我想要阻止的。

有没有办法让我的第一个 pod(我可以完全控制第一个 pod,除了它生成一个 pod 并且我无法控制该 pod 中发生的事情或它是如何生成的,但我可以设置标签和注释)以某种方式将连续生成的 pod 添加到当前 Job 中,这样只有在这些 pod 返回时才被视为完成?


我目前的方法是我自己检查这些生成的 pod,但这很乏味,如果 kubernetes 中已经有解决方案,我更喜欢。此外,它还只是我的基础设施,因为清理工作剩余物的垃圾收集器也会清理这些 pod。

【问题讨论】:

    标签: kubernetes cron jobs kubernetes-cronjob


    【解决方案1】:

    我担心 kubernetes 无法为您处理。我会说它是关于应用程序逻辑的。 Kubernetes Pod 不知道它产生了不同的 Pod 或者这样的 Pod 是由它产生的。

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

    您也可以考虑实施container lifecycle hooks,以便您的父母Pods 得到通知,例如当子 Pod 完成其工作并终止时。

    【讨论】:

    • 正如我在我的问题中所说的,我目前的方法是自己观察这些豆荚。我想知道我是否可以修补作业资源以也考虑到我产生的豆荚,这样我就不必自己做。
    • 当你说“Kubernetes Pod 不知道它产生了一个不同的 Pod”时,你的意思是“Kubernetes Job 不知道......”吗?跨度>
    • @WytrzymałyWiktor 我不接受这个问题作为答案这一事实是否回答了你的问题?
    猜你喜欢
    • 2021-06-02
    • 2021-10-24
    • 2021-02-11
    • 2017-05-14
    • 2018-08-24
    • 1970-01-01
    • 2019-08-08
    • 1970-01-01
    • 2022-01-06
    相关资源
    最近更新 更多