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.yamlWeb 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 ServiceclusterIP: None让每个 Worker 拥有稳定的 Pod DNSWeb 界面就能准确找到这个任务的日志在哪个 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并提供 URI6. Redis / RabbitMQ消息传递的快递员Redis或 RabbitMQ作为 Celery 的消息代理Broker负责在 Scheduler 和 Worker 之间传递任务消息。Scheduler 把任务投递进队列Worker 消费队列执行二者通过 Broker 解耦。至此6 大组件全部就位。它们的协作关系大致是你在 Web UI 或代码中触发 DAGScheduler 从 PostgreSQL 读取任务状态把待执行任务交给 Redis 队列Worker 从队列领取任务并执行Worker 把执行结果和日志写回 PostgreSQL 与自身日志端口Web Server 从元数据库和 Worker 日志端口拉取状态与日志展示Flower 实时监控整个队列的健康状况支撑组件让系统更健壮的幕后功臣除了 6 大核心组件kube-airflow 还包含几个重要的支撑模块。持久化存储PVCDAG 文件需要在 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-airflowkube-airflow 提供了两种部署路径推荐使用 Helm。方式一Helm 部署推荐Helm Chart 位于 airflow/Chart 信息见 Chart.yaml。执行make helm-install NAMESPACEyournamespace HELM_VALUES/path/to/values.yaml方式二手工部署使用项目根目录的 airflow.all.yaml 一键创建所有 Deployment 和 Servicekubectl 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),仅供参考