在 Azure Kubernetes 服务(AKS)上部署 Apache Airflow 概述

本指南介绍如何使用 Helm 在 Azure Kubernetes 服务(AKS)上部署 Apache Airflow。 了解如何设置 AKS 群集、安装 Helm、使用 Helm 图表部署 Airflow 以及浏览 Airflow UI。 本文简要概述了在 AKS 上部署生产就绪 Airflow 所涉及的体系结构和组件。

重要

整个 AKS 文档和示例都提到了开源软件。 部署的软件从 AKS 服务级别协议、有限保修和 Azure 支持中排除。 与 AKS 一起使用开源技术时,请查阅各社区和项目维护人员提供的支持选项,以制定计划。

例如, Ray GitHub 存储库 描述了响应时间、用途和支持级别变化的多个平台。

Microsoft负责生成我们在 AKS 上部署的开源包。 该责任包括拥有构建、扫描、签名、验证和快速修复流程的完整所有权,并掌控容器镜像中的二进制文件。 有关详细信息,请参阅 AKS 的漏洞管理AKS 支持范围

什么是 Apache Airflow?

Apache Airflow 是一个开源平台,专为开发、计划和监视面向批处理的工作流而构建。 借助其灵活的 Python 框架,Airflow 允许设计与几乎所有技术无缝集成的工作流。 在 Airflow 中,必须定义由定向无环图(DAG)表示的 Python 工作流。 可以在任意位置部署 Airflow,部署后,可以访问 Airflow UI 并设置工作流。

Airflow 体系结构

在高级别上,Airflow 包括:

  • 跟踪 DAG、任务实例、XComs 等状态的元数据数据库。
  • 提供 Airflow UI 的 Web 服务器,用于监视和管理。
  • 负责触发 DAG 和任务实例的计划程序。
  • 处理任务实例的执行器。
  • 执行任务的员工。
  • 命令行接口(CLI)等其他组件。

AKS 上的 Apache Airflow 的体系结构图。

用于生产的 Airflow 分布式体系结构

Airflow 的模块化分布式体系结构为生产工作负荷提供了几个关键优势:

  • 关注点分离:每个组件具有不同的角色,使系统保持简单且可维护。 调度器管理 DAG 和任务调度,而工作者执行任务,确保每个部分都专注于其特定功能。
  • 可伸缩性:随着工作负荷的增长,体系结构允许轻松缩放。 可以同时运行多个计划程序或工作进程,并利用托管数据库实现自动扩展,以满足增加的需求。
  • 可靠性:由于组件已分离,因此单个计划程序或辅助角色的故障不会导致系统范围的中断。 集中式元数据数据库可确保整个系统的一致性和连续性。
  • 扩展性:体系结构很灵活,允许执行程序或排队服务等组件根据需要交换和自定义。

此设计为管理复杂数据管道提供了坚实的基础,以支持扩展性、可靠性和灵活性。

Airflow 执行器

在使 Airflow 生产就绪时,一个非常重要的设计决策是选择正确的执行程序。 当任务准备好运行时,执行程序负责管理其执行。 执行程序与执行任务的工作线程池进行交互。 最常用的执行程序包括:

  • LocalExecutor:在主机系统上并行运行任务实例。 此执行程序非常适合用于测试,但为较大的工作负荷提供有限的可伸缩性。
  • CeleryExecutor:使用 Celery 池在多台机器上分配任务,通过在不同节点上运行工作节点来实现水平可伸缩性。
  • KubernetesExecutor:针对 Kubernetes 中的 Airflow 部署量身定制,此执行程序会在 Kubernetes 群集中动态启动工作 Pod。 它提供出色的可伸缩性,并确保强大的资源隔离。

当我们将 Airflow 过渡到生产环境时,扩展工作节点变得至关重要,因此 KubernetesExecutor 最适合我们的需求。 但是,对于本地测试,LocalExecutor 是最简单的选项。

后续步骤

供稿人

Microsoft维护本文。 以下贡献者最初撰写了这篇文章:

  • Don High | 首席客户工程师
  • Satya Chandragiri |高级数字云解决方案架构师
  • Erin Schaffer | 内容开发人员 2