为 Airflow KubernetesPodOperator 任务设置超时

set a timeout for Airflow KubernetesPodOperator task

我需要一种方法在超时后终止 运行ning KubernetesPodOperator 任务,我的 DAG 被安排到 运行 every 15 minutes.

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

我预计这会阻止 DAG 终止 运行ning 任务并将它们标记为失败

但实际发生的是 DAG 被标记为失败并且任务将继续 运行ning,并且由于 DAG 被安排为每 15 分钟 运行,DAG 将被触发并继续,尽管来自前一个 DAG 运行 的任务仍然是 运行ning

有办法解决这个问题吗?

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

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

告诉我这很有用!

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

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

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

我看到的解决方法是,当操作员超时时,有回退选项来杀死所有特定的 运行 pods.

https://airflow.apache.org/docs/apache-airflow-providers-dingding/stable/operators.html#sending-messages-from-a-task-callback