【问题标题】:set a timeout for Airflow KubernetesPodOperator task为 Airflow KubernetesPodOperator 任务设置超时
【发布时间】:2020-06-30 09:49:23
【问题描述】:

我需要一种方法来在超时后终止正在运行的KubernetesPodOperator 任务,我的DAG 计划运行every 15 minutes

我尝试将 dagrun_timeoutmax_active_runs 添加到 DAG 参数中,

我希望这会阻止 DAG 杀死正在运行的任务并将它们标记为失败

但实际发生的情况是 DAG 被标记为失败并且任务将继续运行,并且由于 DAG 计划每 15 分钟运行一次,因此 DAG 将被触发并继续,即使之前 DAG RUN 中的任务是还在运行

有没有办法解决这个问题?

【问题讨论】:

  • 您可以在创建KubernetesPodOperator 时尝试startup_timeout_seconds 参数吗? documentation中描述了这样的情况。
  • 显然 Airflow 一直存在问题,here。您可以关注此问题以获取任何更新。另外,您能告诉我您使用的是哪个版本的 Airflow?
  • 好的,这是气流中的一个错误,感谢您通知我,为了安全起见,我不得不在 docker 映像的代码中添加超时,并添加了一个 max_active_run,我正在使用Airflow 1.10.1-composer(谷歌云作曲家)
  • 我会尝试与我们的 DevOps 团队讨论这个问题,是的,我认为最好将其发布为答案,谢谢!
  • 我已经发布了答案。请考虑接受并投票。

标签: google-kubernetes-engine kubernetes-pod google-cloud-composer airflow


【解决方案1】:

正如我们在评论部分所讨论的,我将讨论总结为答案,以进一步帮助社区。​​p>

根据文档,参数 dagrun_timeout 指定 DagRun 在超时/失败之前应该运行多长时间,以便可以创建新的 DagRun。此外,超时仅对计划的 DagRuns 强制执行,并且仅对 活动 DagRuns 的数量 == max_active_runs 执行一次。

截至今天,Airflow 1.10.2 一直存在问题,报告的问题描述是:与此相关,当我们手动失败一个任务时,DAG 任务停止运行,但 DAG 中的 Pod不会被杀死并继续运行。 此描述与您的描述相符。虽然,Google Cloud Platform 中的当前版本是 Airflow 1.10.6Composer composer-1.10.5-airflow-1.10.6。因此,出于这个原因,我强烈建议您更新您的环境。

【讨论】:

    【解决方案2】:

    我认为您使用的配置是在 DAG 级别超时并将 DAG 标记为失败。我建议使用任务级别超时参考here

    execution_timeout (datetime.timedelta) - 允许执行此任务实例的最长时间,如果超过它将引发并失败。

    让我知道这很有帮助!

    【讨论】:

    • 实际上这确实使任务超时,但奇怪的是 pod 仍在运行,当触发下一次计划运行时,导致了问题
    猜你喜欢
    • 2021-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-28
    • 2023-04-08
    • 2021-02-26
    • 1970-01-01
    相关资源
    最近更新 更多