Skip to content

第 1 部分:Kubernetes 上的 Airflow 架构 ​

审查基线:Airflow 3.3.1 / Helm chart 1.22.0 已检查的最新上游补丁版本:Airflow 3.3.2;示例仍使用 3.3.1 · 2026 年 10 月 12 日

1. 组件与任务执行 ​

Airflow 根据 DAG 依赖关系调度并观测任务实例。任务可以在执行器的工作进程、外部 Pod 或任务调用的服务中运行。Kubernetes API 服务器负责处理请求和状态;调度器与 kubelet 负责放置并启动 Pod。

组件职责与范围
Scheduler + executor评估 DAG / 任务是否就绪,提交工作,管理状态和心跳;读取并写入元数据
DAG processor访问 bundle,解析 / 序列化 DAG 并更新版本相关元数据;在 Airflow 3 中是必需的独立角色
API serverUI、REST API v2 和 Execution API;通过 auth manager 和部署配置处理身份验证 / 授权
任务运行时 / worker执行 operator / Task SDK 代码,并与执行 API 和所需服务通信
Triggerer在异步循环中运行延迟任务的 trigger;未使用延迟任务时可以不部署
元数据库共享 DAG / 任务状态、序列化结构及相关元数据

Airflow 3 的 Execution API ​

在常见的受监督 Python Task SDK 执行模式中,worker 会启动一个 supervisor 进程,由它运行 task-runner 子进程。用户任务代码通过套接字与 supervisor 通信;supervisor 使用短期任务 JWT 调用 Execution API。SDK 对 Connections、Variables、XComs 和状态的公开访问方式取代了任务代码直接访问元数据库的做法。

worker 到 API server 的寻址、身份验证和网络连接都是实际依赖。仅画出一条 scheduler 到 worker 的箭头无法说明 Airflow 3 的执行路径。还应单独检查执行器内部实现、系统 worker,以及 Celery 结果后端等存储;不要据此泛化为“任何后端进程都不会连接任何数据库”。像 local dag.test 这样的进程内执行,也不一定会走与受监督部署相同的子进程 / HTTP 路径。

Triggerer 与 worker 的区别 ​

operator 在 worker 上启动后,可以注册一个 trigger,并在等待期间延迟执行。Triggerer 运行该 trigger;事件发生后,任务会重新排入调度并在 worker 上恢复。它不会在 Triggerer 中运行整个 operator。延迟任务会释放 worker slot,默认情况下也会释放 pool slot;pool 行为可以配置。普通异步任务可能仍占用 worker slot,二者并不相同。

2. Airflow 2 到 3 的实际变化 ​

Airflow 2 已于 2026 年 4 月 22 日结束生命周期。下表用于说明迁移背景。

方面Airflow 2.xAirflow 3.x
UI / API基于 Flask 的 webserver基于 FastAPI 的 api-server 和任务 Execution API 路径
DAG 解析Manager 和文件处理子进程;可选的独立 dag-processor独立 DAG processor 成为必需角色
DAG 结构早已支持基于序列化 DAG 的调度延续使用序列化结构和版本元数据
Scheduler HA已支持基于数据库的多 scheduler仍需验证 HA、容量和数据库负载
并发执行器自 2.10.0 起支持保留并通用化配置
固定的混合执行器可使用 LocalKubernetesExecutor 和 CeleryKubernetesExecutor自 3.0 起不再支持

声称 Airflow 2 在 scheduler 的同一个 Python 循环中解析所有文件,或声称 scheduler HA 直到 Airflow 3 才成为可能,都不准确。职责分离有助于独立调优,但新 DAG 解析缓慢、CPU / 内存 / 数据库资源争用,以及过高的解析并发度,仍可能影响调度延迟。仅增加副本并不能保证可靠性。

3. 元数据、消息代理和 DAG 代码 ​

Airflow 3.3.1 列出的已测试数据库版本包括 PostgreSQL 14–18、MySQL 8.0 / 8.4 / Innovation 和 SQLite 3.15.0 及以上版本。SQLite 用于开发 / 测试,不适用于生产环境。不支持 MariaDB。本系列使用 PostgreSQL 示例,并不表示不支持 MySQL。托管数据库仍需实际配置 HA、备份保留和删除策略。

CeleryExecutor 需要兼容的消息代理,可选 Redis 或 RabbitMQ 等。KubernetesExecutor 和 LocalExecutor 本身不需要 Redis。应区分元数据存储、消息代理和所选 Celery 结果后端。Connections / Variables 可以使用 secrets backend;XCom 负载也可以使用其他后端存储。

DAG processor 和 worker 都需要可执行的 DAG / 任务代码及其依赖包。正常任务执行不要求 API server 解析 DAG 文件,但插件、auth manager 和 trigger 仍需要通过合适的方式分发代码 / 依赖项。

DAG bundle当前版本控制支持情况
GitDagBundle支持
LocalDagBundle不支持;使用当前本地代码
S3DagBundle / GCSDagBundle不支持;这与对象存储版本控制不同

git-sync 仍包含在 chart 1.22.0 中。渲染结果显示 processor / triggerer 的 sidecar 和 init container,以及 Kubernetes 任务 Pod 模板中的一个 init container。可根据实际情况选择 git-sync、将 DAG 烘焙进镜像、共享卷或远程 bundle。请确认 bundle 是否保留了本次运行对应的代码版本,以及重试时会读取哪一版代码。

Airflow 元数据和执行器路径,以及任务通过 Execution API 通信的路径。

Airflow 元数据和执行器路径,以及任务通过 Execution API 通信的路径。全屏打开 ↗

4. 执行器选择与并发执行器 ​

选项执行单元成本、延迟和隔离注意事项
LocalExecutorscheduler 一侧的本地任务进程无需单独的消息代理;与 scheduler 共用资源 / 边界
KubernetesExecutor每个任务实例对应一个 worker PodPod / 镜像启动延迟;限制和身份取决于实际 Pod 规范
CeleryExecutor消费消息代理消息的 worker 池预热的 worker 可以快速启动;扩缩至零会引入冷启动

即使 KubernetesExecutor 没有空闲 worker Pod,控制平面、数据库、节点和日志开销仍然存在。单独使用 Pod 并不会自动形成强安全边界。KubernetesPodOperator 是一个会启动另一个 Pod 的 operator,它不同于 KubernetesExecutor。

配置并发执行器时,第一个配置项是默认执行器。任务的 executor 字段可选择其他执行器;DAG 可以通过 default_args={"executor": "KubernetesExecutor"} 设置任务默认值,并允许各任务单独覆盖。所选执行器 / 别名必须已配置,并且 provider、版本和权限兼容。此功能始于 2.10.0,与 3.0 移除混合执行器是两回事。

5. 为第 2 部分做准备,并了解验证的局限 ​

Chart 1.22.0 的目标版本是 Helm 3.19.0+ 和 Airflow 3.1.0+。Airflow 3.3.1 列出的已测试 Kubernetes 版本为 1.30–1.35。这并不构成对未来版本的全面支持承诺,也不意味着建议选择较旧的 EKS 1.30。还需检查 EKS 支持周期,以及所选 provider / chart 的兼容性。

第 2 部分将准备镜像、数据库 / 消息代理连接、DAG 分发、权限和存储。不要假设 API server、scheduler、processor 和 triggerer 始终是轻量组件;请测量 DAG 数量、解析开销、API 负载和任务并发度。

bash
helm version --short
helm repo add apache-airflow https://airflow.apache.org
helm repo update apache-airflow
helm show chart apache-airflow/airflow --version 1.22.0
kubectl config current-context
# Prints the namespace manifest; does not create it.
kubectl create namespace airflow --dry-run=client -o yaml

不要预期一定恰好有四个 Deployment。在渲染后的 chart 变体中,triggerer 会根据持久化配置使用 StatefulSet 或 Deployment;根据 values 的不同,还会有 StatsD、数据库、消息代理或 worker 等资源。使用外部数据库时,集群内无需运行 PostgreSQL Pod。

本章使用 3.3.1 override 渲染 KubernetesExecutor、CeleryExecutor 和 git-sync 变体。渲染结果不等于真实数据库、任务、镜像拉取或 HA 故障恢复测试;第 2 部分中的环境检查仍然必不可少。

第 2 部分:Helm 部署

README

测验

向文档提问

按 Enter 发送,按 Shift+Enter 换行。