You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Airflow2.1.4搭配KubernetesExecutor报SIGTERM及PID不匹配错误

问题根因

这是Airflow 2.1.x版本结合KubernetesExecutor使用时的已知逻辑bug:
当worker容器默认运行用户为非root用户时,即使你没有手动配置任务的run_as_user参数,task_runner.run_as_user也会被赋值为当前运行的用户(你的场景里为airflow),触发local_task_job.py中取父PID的逻辑。但你实际没有做用户切换操作,任务进程PID就是当前进程ID,校验时父PID和当前PID不匹配,心跳检测认为任务已僵死,直接发送SIGTERM信号终止任务。

排查步骤
  • 校验pod模板配置:打开你配置的/usr/local/airflow/pod_templates/pod_template_file.yaml,检查securityContext下的runAsUser、runAsGroup取值,是否和你Dockerfile中创建的airflow用户UID/GID完全一致,UID不匹配会导致系统误判发生了用户切换。
  • 校验全局默认配置:检查airflow.cfg的core段是否配置了default_impersonation参数,该参数会全局给所有任务添加run_as_user属性,即使DAG中没有显式配置。
  • 校验家目录权限配置:你的Dockerfile中将/root目录权限赋值给airflow用户,部分组件会识别/root为root用户默认家目录,触发用户切换的误判,建议将AIRFLOW_HOME调整为/home/airflow等普通用户目录。
解决方案

临时修复(无需升级Airflow版本)

你可以任选以下一种方案:

  • 全局配置覆盖:在airflow.cfg的core段添加配置run_as_user = (值留空),覆盖task_runner.run_as_user的默认取值。
  • DAG配置覆盖:在所有DAG的默认参数中显式指定run_as_user = None,同时在airflow_local_settings.py中添加DEFAULT_OPERATOR_ARGS = {'run_as_user': None}做全局覆盖。
  • 源码修改:直接修改镜像中airflow/jobs/local_task_job.py的对应逻辑,PID校验前添加判断:如果当前运行用户和task_runner.run_as_user一致,就直接使用当前PID校验,无需取父PID。

永久修复

直接将Airflow版本升级到2.2.3及以上,该PID校验的逻辑bug已经在2.2.3版本被官方修复,不需要额外调整配置。

内容的提问来源于stack exchange,提问作者Rajeev Reddy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 21:18:01