Cloud Composer 3 | Cloud Composer 2 | Cloud Composer 1
本页介绍了如何排查 KubernetesExecutor 运行的任务的问题,并提供了常见问题的解决方案。
KubernetesExecutor 的常规问题排查方法
如需排查使用 KubernetesExecutor 执行的任务的问题,请按所列顺序执行以下操作:
在 DAG 界面或 Airflow 界面中检查任务的日志。
在 Google Cloud 控制台中检查调度程序日志:
在 Google Cloud 控制台中,前往环境页面。
在环境列表中,点击您的环境名称。环境详情页面会打开。
前往日志标签页,然后检查 Airflow 日志 > Scheduler 部分。
对于给定的时间范围,检查运行相应任务的 KubernetesExecutor worker pod。如果 Pod 不再存在,请跳过此步骤。相应 pod 的名称中包含
airflow-k8s-worker
前缀以及 DAG 或任务名称。查找任何报告的问题,例如任务失败或任务无法安排。
KubernetesExecutor 的常见问题排查场景
本部分列出了您在使用 KubernetesExecutor 时可能会遇到的常见问题排查场景。
任务进入 Running
状态,然后在执行期间失败。
症状:
- Airflow 界面和工作器部分的日志标签页中都有该任务的日志。
解决方案:任务日志会指明问题。
任务实例进入 queued
状态,然后在一段时间后被标记为 UP_FOR_RETRY
或 FAILED
。
症状:
- 在 Airflow 界面和工作器部分的日志标签页中,没有任务日志。
- 调度程序部分的日志标签页中会显示一条消息,指出相应任务已标记为
UP_FOR_RETRY
或FAILED
。
解决方案:
- 检查调度程序日志,了解问题的任何详细信息。
可能的原因:
- 如果调度程序日志包含
Adopted tasks were still pending after...
消息以及随后打印的任务实例,请检查您的环境中是否已启用 CeleryKubernetesExecutor。
任务实例进入 Queued
状态,并立即标记为 UP_FOR_RETRY
或 FAILED
症状:
- 在 Airflow 界面和工作器部分的日志标签页中,没有该任务的日志。
- 调度程序部分中日志标签页上的调度程序日志包含
Pod creation failed with reason ... Failing task
消息,以及将任务标记为UP_FOR_RETRY
或FAILED
的消息。
解决方案:
- 检查调度程序日志,了解确切的响应和失败原因。
可能的原因:
如果错误消息为 quantities must match the regular expression ...
,则问题很可能是由为任务工作器 pod 的 k8s 资源(请求/限制)设置的自定义值引起的。
当执行大量任务时,KubernetesExecutor 任务失败且没有日志
如果您的环境同时执行大量使用 KubernetesExecutor 或 KubernetesPodOperator 的任务,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 界面中定义一个具有有限数量的 slot 的 Airflow 池,然后将所有基于容器的任务与此池相关联。我们建议将池中的 slot 数量设置为 50 或更少。额外的任务将保持在“已安排”状态,直到 Airflow 池有空闲槽位来执行它们。如果您使用此解决方法而不应用可能的解决方案,则 Airflow 池中仍可能会出现大量任务队列。