尧图网站设计 尧图网站设计YAOTU DESIGN
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 端口Deploymentairflow-scheduler负责 DAG 调度与任务下发Deploymentairflow-worker执行具体任务8793 端口StatefulSetairflow-flowerCelery 任务监控面板5555 端口Deploymentpostgres存储元数据与执行记录依赖 Chartrabbitmq / redis消息队列负责任务分发依赖 ChartWorker 为什么使用 StatefulSet 而非 Deployment这是 kube-airflow 的一个巧妙设计StatefulSet 配合 Headless Service 可以冻结每个 Worker 的 DNS 名称让 Webserver 能够按 Pod 独立拉取日志这对分布式任务排错至关重要。具体配置见 statefulsets-workers.yaml。最快部署方法两种方式任你选择方式一一条命令快速创建适合尝鲜克隆仓库后直接使用项目提供的聚合清单文件airflow.all.yamlkubectl 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 NAMESPACEyournamespace 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_prefix与ingress配置可以让 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 会自动获得稳定 DNSWebserver 也能正确抓取其任务日志。使用 Flower 监控任务Flower 面板5555 端口实时展示 Celery 任务队列、Worker 状态与执行统计。通过make browse-flower或配置好的 Ingress 即可访问是排查任务积压问题的利器。常见问题速查QScheduler 为什么不更新 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),仅供参考
返回列表