【问题标题】:Blocking execution of a k8s job till another one gets completed in a helm chart阻止 k8s 作业的执行,直到在 helm 图表中完成另一个作业
【发布时间】:2020-09-24 17:42:49
【问题描述】:

我有一个舵图,并且在模板下定义了两个工作资源。

.
├── Chart.yaml
├── templates
│   ├── job.yaml
│   └── post-copy-job.yaml
└── values.yaml

我的第一份工作(job.yaml)实际上是一个模板,但它推出了多个工作(使用范围)。

我希望我的第二个作业模板 (post-copy-job.yaml) 保持执行,直到第一个模板下的所有作业都完成。 我尝试在第二个作业模板中使用安装后挂钩。

annotations:
"helm.sh/hook": post-install,post-upgrade
"helm.sh/hook-weight": "-5"
"helm.sh/hook-delete-policy": before-hook-creation

不过,它会在作业模板 1 下的所有作业完成之前执行并完成。 我的问题是如何延迟第二个作业模板的执行,直到作业模板下的所有资源都完成。

【问题讨论】:

  • 您需要一些比 Helm 更强大的东西才能做到这一点,就像自定义运算符一样。您可能会发现使用 RabbitMQ 之类的作业队列系统和长时间运行的 worker 部署比为每个任务启动单独的作业要容易一些。

标签: kubernetes kubernetes-helm


【解决方案1】:

虽然 David 评论可能是最好的方法,但我认为您可以采用的最轻量级的解决方案是部署另一个作业,该作业将陷入循环并不断监控第一个作业的状态,一旦它们全部完成它将开始处理。这会消耗一些额外的资源,但会让你轻松摆脱困境。

您可以通过使用 k8s API 来监控第一个作业,如果您也想在那里偷工减料,您可以为此使用 blob 存储 - 为每个作业创建一个 blob 并在作业完成时将其标记为已完成.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-05
    • 2014-03-17
    • 2022-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-06
    • 2010-09-20
    相关资源
    最近更新 更多