kube-airflow 架构深度解析:6 大核心组件如何协同工作?
kube-airflow 架构深度解析:6 大核心组件如何协同工作?
【免费下载链接】kube-airflowA docker image and kubernetes config files to run Airflow on Kubernetes项目地址: https://gitcode.com/gh_mirrors/ku/kube-airflow
如果你正在寻找一种在 Kubernetes 上运行 Airflow的成熟方案,那么kube-airflow值得你花十分钟认真了解。它是一个开源的 Helm Chart 与 Docker 镜像项目,把 Airflow 调度平台完整地"搬"进 Kubernetes 集群:调度器、Web 界面、Celery 任务队列、监控面板、元数据库一应俱全。本文将从零开始,为你深度解析 kube-airflow 的 6 大核心组件以及它们之间的协作方式,帮助你理解"Airflow on Kubernetes"的整体架构。
为什么要把 Airflow 跑在 Kubernetes 上?
在深入组件之前,先回答一个关键问题:为什么不用传统方式直接跑 Airflow?
传统方案通常需要自己维护调度器的高可用(Airflow 官方曾不建议同时运行多个 scheduler,容易产生任务竞争)、单独搭建 Celery 集群和消息队列,运维成本很高。而 kube-airflow 的思路是:既然你已经有 K8s 集群,就让 K8s 来管理一切。
- ✅ 调度器崩溃后自动重启,无需手工干预
- ✅ 多个 Worker 并行执行任务,天然支持水平扩展
- ✅ 滚动更新、健康检查、DNS 服务发现全部交给 Kubernetes
- ✅ 一条命令部署,一条命令扩容
kube-airflow 的 6 大核心组件
kube-airflow 的架构可以概括为4 个 Airflow 应用组件 + 2 个基础设施组件。它们分别以 Deployment 或 StatefulSet 的形式运行在集群中,定义在 airflow/templates/ 目录下的各 YAML 文件里。
1. Web Server:你的可视化控制台
Web Server 是用户最常打交道的组件,它提供 Airflow 的 Web UI,让你可以在浏览器里查看 DAG 运行状态、触发任务、配置连接、查看日志。
- 运行方式:Deployment,默认 2 个副本
- 端口:8080
- 健康检查:通过
/health端点进行存活探针 - 配置位置:deployments-web.yaml
Web Server 通过环境变量连接 PostgreSQL 元数据库,任务日志则来自每个 Worker 节点暴露的日志端口。
2. Scheduler:任务的"发令官"
Scheduler 是整个系统的核心大脑,它周期性扫描 DAG 目录,根据调度表达式决定"什么时候该跑哪个任务",并把任务交给 Celery 队列分发。
- 运行方式:Deployment,默认 1 个副本
- 关键参数:
scheduler_num_runs控制调度器的运行模式(-1表示无限循环持续调度) - 配置位置:deployments-scheduler.yaml
它的启动参数是scheduler -n -1 -p,配合 Kubernetes 的restartPolicy: Always,即使调度器异常退出也会被自动拉起,这就是 K8s 带来的高可用保障。
3. Celery Worker:真正干活的"工人"
Worker 是任务的实际执行者,它从消息队列中领取任务并执行。kube-airflow 中最巧妙的设计就在这里——Worker 不使用 Deployment,而是使用 StatefulSet。
- 运行方式:StatefulSet,副本数可在 values.yaml 的
celery.num_workers中配置 - 端口:8793(每个 Worker 暴露一个只服务日志的小型 HTTP 服务)
- 配置位置:statefulsets-workers.yaml
为什么用 StatefulSet?因为 Web Server 需要按 Worker 的固定 DNS 名称逐个获取日志。StatefulSet 配合 services.yaml 中定义的 Headless Service(clusterIP: None),让每个 Worker 拥有稳定的 Pod DNS,Web 界面就能准确找到"这个任务的日志在哪个 Worker 上"。
4. Flower:任务队列的"监控仪表盘"
Flower 是 Celery 的实时监控工具,你可以看到队列积压情况、Worker 存活状态、任务执行耗时等。
- 运行方式:Deployment,默认 1 个副本
- 端口:5555
- 配置位置:deployments-flower.yaml
对于排查"任务为什么排队"这类问题,Flower 是第一现场。
5. PostgreSQL:一切的"账本"
PostgreSQL 是 Airflow 的元数据库,保存着 DAG 定义、任务实例状态、用户账号、连接配置等所有元数据。Scheduler、Web Server、Worker 三者的状态同步都依赖它。
- 数据库名 / 用户 / 密码在 values.yaml 的
postgresql段配置 - 支持关闭内置 PostgreSQL,接入你自己的数据库(设置
postgresql.enabled: false并提供 URI)
6. Redis / RabbitMQ:消息传递的"快递员"
Redis(或 RabbitMQ)作为 Celery 的消息代理(Broker),负责在 Scheduler 和 Worker 之间传递任务消息。Scheduler 把任务"投递"进队列,Worker 消费队列执行,二者通过 Broker 解耦。
至此,6 大组件全部就位。它们的协作关系大致是:
- 你在 Web UI 或代码中触发 DAG
- Scheduler 从 PostgreSQL 读取任务状态,把待执行任务交给 Redis 队列
- Worker 从队列领取任务并执行
- Worker 把执行结果和日志写回 PostgreSQL 与自身日志端口
- Web Server 从元数据库和 Worker 日志端口拉取状态与日志展示
- Flower 实时监控整个队列的健康状况
支撑组件:让系统更健壮的"幕后功臣"
除了 6 大核心组件,kube-airflow 还包含几个重要的支撑模块。
持久化存储(PVC)
DAG 文件需要在 Scheduler 和 Worker 之间共享,pvc.yaml 定义了持久卷声明,挂载到/dags路径。默认persistence.enabled: false时使用 emptyDir,生产环境建议开启持久化。
Ingress:统一的对外入口
ingresses.yaml 为 Web Server 和 Flower 提供了 Ingress 配置,支持自定义域名、URL 前缀(如/airflow)以及 Traefik、Nginx 等负载均衡器的注解。
两种 DAG 部署方式
- Git-Sync:通过 script/git-sync 脚本周期性地(默认每 60 秒)拉取 Git 仓库中的 DAG,实现"合并代码 1 分钟后 DAG 自动更新"的丝滑体验,适合快速迭代。不过要注意,DAG 运行中途被更新可能导致执行行为变化,生产环境需谨慎。
- Embedded DAGs:把 DAG 直接打进 Docker 镜像(放在项目 dags/ 目录,依赖写入 requirements/dags.txt),通过 CI/CD 构建新镜像完成更新,适合对稳定性要求高的生产场景。
airflow.cfg 的灵活配置
默认的 config/airflow.cfg 会被打进镜像,支持模板变量注入。如果想不重建镜像就改配置,可以参考 myvalue-with-airflowcfg-configmap.yaml,通过 ConfigMap 方式覆盖配置,非常适合测试新参数。
快速上手:一键部署 kube-airflow
kube-airflow 提供了两种部署路径,推荐使用 Helm。
方式一:Helm 部署(推荐)
Helm Chart 位于 airflow/,Chart 信息见 Chart.yaml。执行:
make helm-install NAMESPACE=yournamespace HELM_VALUES=/path/to/values.yaml方式二:手工部署
使用项目根目录的 airflow.all.yaml 一键创建所有 Deployment 和 Service:
kubectl create -f airflow.all.yaml它会依次创建 postgres、rabbitmq、airflow-webserver、airflow-scheduler、airflow-flower、airflow-worker 六个对象。
常用运维命令
项目通过 Makefile 封装了常用操作,例如:
make browse-web:打开 Airflow Web 界面make browse-flower:打开 Flower 监控面板make apply:应用最新配置(比如修改 Worker 副本数后)make build:构建包含自定义 DAG 的 Docker 镜像
结语
kube-airflow 的价值在于:它把 Airflow 部署从"手工运维多个进程"变成了"声明式管理一组 Pod"。Web Server、Scheduler、Worker、Flower、PostgreSQL、Redis 六大组件各司其职,配合 PVC、Ingress、Git-Sync 等支撑能力,构成了一套完整、可扩展的Kubernetes 上运行 Airflow的参考架构。理解了组件之间的协作关系,无论是排查任务积压、日志缺失,还是规划 Worker 扩容,你都能做到心中有数。如果你是第一次接触 Airflow on Kubernetes,从 kube-airflow 开始,是一个相当不错的起点。
【免费下载链接】kube-airflowA docker image and kubernetes config files to run Airflow on Kubernetes项目地址: https://gitcode.com/gh_mirrors/ku/kube-airflow
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
