排查 KubernetesExecutor 任务问题

Cloud Composer 3 | Cloud Composer 2 | Cloud Composer 1

本页介绍了如何排查 KubernetesExecutor 运行的任务存在的问题,并提供了常见问题的解决方案。

排查 KubernetesExecutor 问题的一般方法

如需排查使用 KubernetesExecutor 执行的任务存在的问题,请按以下顺序执行以下操作:

  1. DAG 界面Airflow 界面中查看任务的日志。

  2. 在 Google Cloud 控制台中查看调度程序日志:

    1. 在 Google Cloud 控制台中,前往环境页面。

      转到“环境”

    2. 在环境列表中,点击您的环境名称。环境详情页面会打开。

    3. 前往日志标签页,然后查看 Airflow 日志 > 调度器部分。

    4. 对于给定的时间范围,检查运行任务的 KubernetesExecutor worker pod。如果 Pod 已不存在,请跳过此步骤。Pod 的名称中包含 airflow-k8s-worker 前缀和 DAG 或任务名称。查找是否有任何报告的问题,例如任务失败或无法调度任务。

KubernetesExecutor 的常见问题排查场景

本部分列出了您在使用 KubernetesExecutor 时可能会遇到的常见问题排查场景。

任务进入 Running 状态,然后在执行期间失败。

症状:

  • 您可以在 Airflow 界面和工作器部分的日志标签页中找到任务的日志。

解决方法:任务日志会指明问题。

任务实例进入 queued 状态,然后在过了一段时间后被标记为 UP_FOR_RETRYFAILED

症状:

  • Airflow 界面和工作器部分的日志标签页中没有任务日志。
  • Scheduler 部分的 Logs 标签页中会显示日志,其中包含一条消息,指出任务已标记为 UP_FOR_RETRYFAILED

解决方案:

  • 检查调度程序日志,了解问题的任何详细信息。

可能的原因:

  • 如果调度程序日志包含 Adopted tasks were still pending after... 消息后跟输出的任务实例,请检查您的环境中是否启用了 CeleryKubernetesExecutor。

任务实例进入 Queued 状态,并立即标记为 UP_FOR_RETRYFAILED

症状:

  • Airflow 界面和工作器部分的日志标签页中没有任务日志。
  • Scheduler 部分的 Logs 标签页中的 Scheduler 日志包含 Pod creation failed with reason ... Failing task 消息,以及任务被标记为 UP_FOR_RETRYFAILED 的消息。

解决方案:

  • 请检查调度程序日志,了解确切响应和失败原因。

可能的原因:

如果错误消息为 quantities must match the regular expression ...,则问题很可能是由为任务工作器 pod 的 k8s 资源(请求/限制)设置的自定义值引起的。

执行大量任务时,KubernetesExecutor 任务会失败且没有日志

当您的环境同时使用 KubernetesExecutorKubernetesPodOperator 执行大量任务时,Cloud Composer 3 会等到部分现有任务完成后才接受新任务。额外的任务会被标记为失败,如果您为任务定义了重试次数(Airflow 默认会执行此操作),Airflow 会稍后重试这些任务。

症状:使用 KubernetesExecutor 或 KubernetesPodOperator 执行的任务会失败,并且 Airflow 界面或 DAG 界面中没有任务日志。在调度程序的日志中,您可能会看到类似以下内容的错误消息:

pods \"airflow-k8s-worker-*\" is forbidden: exceeded quota: k8s-resources-quota,
requested: pods=1, used: pods=*, limited: pods=*","reason":"Forbidden"

可能的解决方法

  • 调整 DAG 运行时间表,以便随着时间推移更平均地分配任务。
  • 通过合并小任务来减少任务数量。

临时解决方法:

如果您希望任务在环境能够执行它们之前保持在已调度状态,可以在 Airflow 界面中定义一个包含有限数量槽的 Airflow 池,然后将所有基于容器的任务与此池相关联。我们建议将池中的槽数量设置为 50 个或更少。额外的任务将保持在已安排状态,直到 Airflow 池中有空闲的槽可用于执行这些任务。如果您使用此权宜解决方法而不应用可能的解决方案,Airflow 池中仍可能会有大量任务队列。

后续步骤