ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

kube-airflow 完全指南:在 Kubernetes 上运行 Apache Airflow 的终极方案

kube-airflow 完全指南:在 Kubernetes 上运行 Apache Airflow 的终极方案

kube-airflow 完全指南:在 Kubernetes 上运行 Apache Airflow 的终极方案

【免费下载链接】kube-airflowA docker image and kubernetes config files to run Airflow on Kubernetes项目地址: https://gitcode.com/gh_mirrors/ku/kube-airflow

你是否正在寻找一套在 Kubernetes 上运行 Apache Airflow 的终极方案?kube-airflow 正是为此而生的开源项目,它提供了一整套 Docker 镜像与 Kubernetes 配置文件,让你无需维护复杂的 Celery 集群,就能轻松获得高可用的 Airflow 调度器与并行任务执行能力。本文将从零开始,带你快速掌握 kube-airflow 的部署方法、核心组件与最佳实践,让新手也能在十几分钟内搭建出属于自己的 Airflow 调度平台。

为什么选择 kube-airflow:在 Kubernetes 上运行 Airflow 的核心优势

传统方式运行 Airflow 常常面临两个痛点:调度器高可用难以实现、任务并行扩展成本高昂。kube-airflow 巧妙地把这两个问题都交给了 Kubernetes 解决:

  • 调度器高可用:Airflow 官方不建议同时运行多个调度器,而 kube-airflow 利用 Kubernetes 的容器编排能力,让调度器以"崩溃即重启"的方式稳定运行,省去了复杂的 Leader Election 包装。
  • 任务并行扩展:无需为 Celery 维护高可用的后端数据库与 Worker 集群,K8s 本身就是最好的任务管理器,一条命令即可完成 Worker 扩容。
  • 开箱即用:项目内置了 Webserver、Scheduler、Worker、Flower 等全套组件的部署清单,配合 Helm Chart 一键安装。

kube-airflow 架构:一次看懂全部组件

整个系统由以下核心组件组成,各司其职:

组件作用类型
airflow-webserver提供 Web 管理界面(8080 端口)Deployment
airflow-scheduler负责 DAG 调度与任务下发Deployment
airflow-worker执行具体任务(8793 端口)StatefulSet
airflow-flowerCelery 任务监控面板(5555 端口)Deployment
postgres存储元数据与执行记录依赖 Chart
rabbitmq / redis消息队列,负责任务分发依赖 Chart

Worker 为什么使用 StatefulSet 而非 Deployment?这是 kube-airflow 的一个巧妙设计:StatefulSet 配合 Headless Service 可以冻结每个 Worker 的 DNS 名称,让 Webserver 能够按 Pod 独立拉取日志,这对分布式任务排错至关重要。具体配置见 statefulsets-workers.yaml。

最快部署方法:两种方式任你选择

方式一:一条命令快速创建(适合尝鲜)

克隆仓库后,直接使用项目提供的聚合清单文件airflow.all.yaml

kubectl create -f airflow.all.yaml

这一条命令会一次性创建 postgres、rabbitmq、airflow-webserver、airflow-scheduler、airflow-flower、airflow-worker 六个 Deployment 以及对应的 Service。如果你使用的是 minikube,还可以通过make browse-web直接打开 Web 界面。

方式二:Helm 部署(生产环境推荐)

Helm Chart 位于airflow/目录,它支持更灵活的定制能力,官方推荐使用:

make helm-install NAMESPACE=yournamespace HELM_VALUES=/path/to/you/values.yaml

所有可定制参数都集中在 values.yaml 中,包括镜像版本、Worker 数量、Ingress 配置、持久化存储等,覆盖了日常运维的绝大多数需求。

快速配置技巧:三个必须掌握的定制项

1. 生成 Fernet Key(必做)

Airflow 使用 Fernet Key 加密连接信息,values.yaml中默认留空。启动前请先执行以下命令生成,并填入配置:

python -c "from cryptography.fernet import Fernet; FERNET_KEY = Fernet.generate_key().decode(); print(FERNET_KEY)"

2. 自定义 airflow.cfg(无需重新构建镜像)

默认情况下,config/airflow.cfg被打包在 Docker 镜像中,通过模板变量注入环境信息。如果你只想测试新配置而不想重建镜像,可以使用 ConfigMap 方式:

  • values.yaml中开启airflow.airflow_cfg.enable: true
  • 将你的airflow.cfg内容填入airflow.airflow_cfg.data
  • 参考示例文件 myvalue-with-airflowcfg-configmap.yaml

注意保留配置中的模板变量(如{{ POSTGRES_CREDS }}),否则容器将无法正确连接后端。

3. 指定 URL 前缀与 Ingress

通过values.yaml中的url_prefixingress配置,可以让 Web 界面以http://mycompany.com/airflow的形式对外提供服务,同时支持为 Flower 单独设置路径前缀,方便接入已有网关体系。

DAG 部署实战:两种主流方式对比

DAG(有向无环图)是 Airflow 的核心,kube-airflow 提供了两种部署方式:

方式优点适用场景
嵌入式 DAG版本可控、依赖完整打包生产环境、CI/CD 流程成熟
git-syncDAG 更新即时生效(默认每 60 秒同步)快速迭代、开发测试

嵌入式 DAG:构建专属镜像

将 DAG 放入项目dags/目录,把依赖写入requirements/dags.txt,然后构建镜像:

make ENBEDDED_DAGS_LOCATION=$DAG_PATH

之后将新镜像部署到集群即可。这是官方最推荐的生产方案,因为它能保证 DAG 及其依赖的完整性。

git-sync:让 DAG 自动更新

values.yaml中开启dags.git_sync_enabled: true并指定git_repo地址,Scheduler 和 Worker 就会自动拉取最新代码。但请注意:如果 Scheduler 在 DAG 执行中途重载了新版 DAG,可能导致执行逻辑不一致。建议遵循两个原则——执行期间加锁不拉新,或让 DAG 保持不可变、只新增不修改。

Worker 扩容与运维实战

一键扩容 Worker

修改values.yaml中的celery.num_workers数值,重新应用即可完成扩容:

make apply

由于 Worker 使用 StatefulSet,扩容后的新 Worker 会自动获得稳定 DNS,Webserver 也能正确抓取其任务日志。

使用 Flower 监控任务

Flower 面板(5555 端口)实时展示 Celery 任务队列、Worker 状态与执行统计。通过make browse-flower或配置好的 Ingress 即可访问,是排查任务积压问题的利器。

常见问题速查

Q:Scheduler 为什么不更新 DAG?检查scheduler_num_runs配置,设为-1表示无限循环但不会刷新 DAG;设为1则每次刷新后退出、由 Kubernetes 自动拉起,可根据需求选择。

Q:如何增加自定义 Python 依赖?将依赖写入requirements/dags.txt,构建镜像时会被自动安装,也可通过make REQUIREMENTS_TXT_LOCATION=/path/to/requirements.txt指定其他文件。

Q:同一命名空间想跑多个独立集群?利用 Chart 提供的 prefix 机制,为每个集群添加前缀即可,注意前缀不要包含引号、斜杠等特殊字符。

总结

kube-airflow 用最简洁的方式解决了在 Kubernetes 上运行 Apache Airflow 的核心难题:无需维护复杂的 Celery 基础设施,K8s 原生能力即是最佳的任务编排者。无论是新手快速搭建,还是生产环境的高可用部署,这份方案都能让你事半功倍。现在就 clone 项目,开启你的 Airflow + Kubernetes 之旅吧!

【免费下载链接】kube-airflowA docker image and kubernetes config files to run Airflow on Kubernetes项目地址: https://gitcode.com/gh_mirrors/ku/kube-airflow

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

返回列表