安装 Airflow™

本页面介绍了在考虑如何安装 Airflow™ 时可能会用到的一些安装选项。Airflow 由许多组件组成,这些组件通常分布在许多物理或虚拟机上,因此 Airflow 的安装可能会非常复杂,具体取决于您选择的选项。

您还应该查看安装 Airflow 时必须满足的先决条件以及支持的版本,以了解支持 Airflow、Python 和 Kubernetes 的策略。

Airflow 需要安装额外的依赖项,这可以通过附加组件和提供程序来完成。

安装 Airflow 时,您需要设置数据库,并且在升级 Airflow 时也必须保持数据库更新。

警告

截至 2021 年 6 月,Airflow 1.10 已停止维护,并且不会再收到任何修复,即使是关键的安全修复。请按照从 1.10 升级到 2了解如何将已停止维护的 1.10 升级到 Airflow 2。

使用发布的源代码

更多详细信息:从源代码安装

此选项最适合以下情况

目标用户

  • 熟悉从源代码安装和构建软件,并且了解所用软件的完整性和来源的用户,直至尽可能低的级别。

您需要处理的内容

  • 您需要自行构建和安装 Airflow 及其组件。

  • 您应该开发和处理 Airflow 所有组件的部署。

  • 您负责使用 airflow db 命令设置数据库、创建和管理数据库架构,以及 Airflow 和 Airflow 提供程序的自动启动和恢复、维护、清理和升级。

  • 您需要设置系统监控,以便观察资源并对问题做出反应。

  • 您需要根据安装的监控和反馈循环,为安装配置和管理适当的资源(内存、CPU 等)。请参阅有关要求的说明。

Apache Airflow 社区为此方法提供的内容

  • 您有关于如何构建软件的说明,但由于您可能想使用的各种环境和工具,您可能会遇到特定于您的部署和环境的问题,您必须自行诊断和解决。

在哪里寻求帮助

  • Slack 上的 #user-troubleshooting 频道可用于快速解决一般故障排除问题。如果您需要更长时间的讨论并有更多信息要分享,请访问GitHub 讨论区

  • Slack 上的 #user-best-practices 频道可用于询问和分享有关使用和部署 Airflow 的最佳实践。

  • 如果您能提供 Airflow 软件可重现问题的描述,您可以在GitHub issues 上提交问题。

  • 如果您想回馈 Airflow,请访问 #contributors Slack 频道,了解如何构建 Airflow 本身。

使用 PyPI

更多详细信息:从 PyPI 安装

此选项最适合以下情况

  • 如果您不熟悉容器和 Docker,并且希望在物理或虚拟机上安装 Apache Airflow,并且习惯于使用自定义部署机制安装和运行软件,则此安装方法非常有用。

  • 唯一官方支持的安装机制是使用 pip 并使用约束机制。约束文件由 Apache Airflow 版本管理员管理,以确保您可以使用所有提供程序和所需的依赖项从 PyPI 重复安装 Airflow。

  • 如果使用 PyPI 安装,您还可以验证从 PyPI 下载的软件包的完整性和来源,如安装页面所述,但您从 PyPI 下载的软件是为您预先构建的,因此您无需构建即可安装,并且您无需从源代码构建软件。

目标用户

  • 熟悉安装和配置 Python 应用程序、管理 Python 环境、依赖项以及使用其自定义部署机制运行软件的用户。

您需要处理的内容

  • 您需要自行安装 Airflow 的所有组件。

  • 您应该开发和处理 Airflow 所有组件的部署。

  • 您负责使用 airflow db 命令设置数据库、创建和管理数据库架构,以及 Airflow 和 Airflow 提供程序的自动启动和恢复、维护、清理和升级。

  • 您需要设置系统监控,以便观察资源并对问题做出反应。

  • 您需要根据安装的监控和反馈循环,为安装配置和管理适当的资源(内存、CPU 等)。

Apache Airflow 社区为此方法提供的内容

  • 您有关于如何安装软件的从 PyPI 安装,但由于您可能想使用的各种环境和工具,您可能会遇到特定于您的部署和环境的问题,您必须自行诊断和解决。

  • 您有快速入门,您可以在其中看到在本地运行 Airflow 的快速入门示例,您可以使用它快速启动 Airflow 以进行本地测试和开发。但是,这仅仅是为了启发。不要指望这个 docker-compose 已经准备好用于生产安装,如果您采用这种方法,您需要构建自己的生产就绪部署。

在哪里寻求帮助

  • Airflow Slack 上的 #user-troubleshooting 频道可用于快速解决一般故障排除问题。如果您需要更长时间的讨论并有更多信息要分享,请访问GitHub 讨论区

  • Slack 上的 #user-best-practices 频道可用于询问和分享有关使用和部署 Airflow 的最佳实践。

  • 如果您能提供 Airflow 软件可重现问题的描述,您可以在GitHub issues 上提交问题。

使用生产 Docker 镜像

更多详细信息:Apache Airflow 的 Docker 镜像

此选项最适合以下情况

如果您熟悉容器/Docker 堆栈,则此安装方法非常有用。它提供了在与在同一物理或虚拟机上运行的其他软件隔离的情况下运行 Airflow 组件的功能,并且易于维护依赖项。

这些镜像由 Apache Airflow 版本管理员构建,他们使用从 PyPI 正式发布的软件包和官方约束文件,这些文件与从 PyPI 安装 Airflow 时使用的文件相同。

目标用户

  • 熟悉容器和 Docker 堆栈,并且了解如何构建自己的容器镜像的用户。

  • 如果用户希望扩展或自定义镜像,则他们需要了解如何使用约束从 PyPI 安装提供程序和依赖项。

  • 了解如何通过将多个 Docker 容器链接在一起来创建部署,以及如何维护此类部署的用户。

您需要处理的内容

  • 如果您想添加额外的依赖项,则需要能够自定义或扩展容器/Docker 镜像。您需要将由多个容器构建的部署(例如使用 docker-compose)组合在一起,并确保它们链接在一起。

  • 您负责使用 airflow db 命令设置数据库、创建和管理数据库架构,以及 Airflow 和 Airflow 提供程序的自动启动和恢复、维护、清理和升级。

  • 您负责管理自定义依赖项的自定义和扩展。对于官方 Airflow Docker 镜像,社区会处理 Airflow 和作为参考镜像一部分的 Airflow 提供程序的升级 - 您需要确保在发布新版本时通过升级基础镜像来获取这些更改。但是,您负责使用自己添加的依赖项和提供程序创建构建自己的自定义镜像的管道,并且在发布新版本的 Airflow 镜像时,需要重复自定义步骤并构建自己的镜像。

  • 您应该选择正确的部署机制。有许多可用的容器部署选项。您可以使用自己的自定义机制、自定义 Kubernetes 部署、自定义 Docker Compose、自定义 Helm 图表等,您应该根据自己的经验和期望进行选择。

  • 您需要设置系统监控,以便观察资源并对问题做出反应。

  • 您需要根据安装的监控和反馈循环,为安装配置和管理适当的资源(内存、CPU 等)。

Apache Airflow 社区为此方法提供的内容

  • 您有说明:构建镜像,介绍如何构建和自定义您的镜像。

  • 您有在 Docker 中运行 Airflow,您可以在其中看到快速入门示例,您可以使用它快速启动 Airflow 以进行本地测试和开发。但是,这仅仅是为了启发。不要指望将此 docker-compose.yml 文件用于生产安装,您需要熟悉 Docker Compose 及其功能,并使用它构建自己的生产就绪部署(如果您选择 Docker Compose 进行部署)。

  • Docker 镜像由构建 Airflow 的同一批人管理,他们致力于在 Airflow 发布新功能和功能时保持更新。

在哪里寻求帮助

  • 有关官方 Docker 镜像的快速问题,请访问 Airflow Slack 上的 #production-docker-image 频道。

  • Airflow Slack 上的 #user-troubleshooting 频道可用于快速解决一般故障排除问题。如果您需要更长时间的讨论并有更多信息要分享,请访问GitHub 讨论区

  • Slack 上的 #user-best-practices 频道可用于询问和分享有关使用和部署 Airflow 的最佳实践。

  • 如果您能提供 Airflow 软件可重现问题的描述,您可以在GitHub issues 上提交问题。

使用官方 Airflow Helm Chart

更多详细信息:Apache Airflow 的 Helm Chart

此选项最适合以下情况

  • 当您不仅熟悉容器/Docker 堆栈,而且使用 Kubernetes 并希望使用社区管理的 Kubernetes 安装机制通过 Helm 图表安装和维护 Airflow 时,此安装方法非常有用。

  • 它不仅能够隔离运行 Airflow 组件与在相同物理或虚拟机上运行的其他软件并管理依赖项,而且还提供了以标准化方式更轻松地维护、配置和升级 Airflow 的功能,并将由社区维护。

  • 该图表使用官方 Airflow 生产 Docker 镜像来运行 Airflow。

目标用户

  • 熟悉容器和 Docker 堆栈,并且了解如何构建自己的容器镜像的用户。

  • 如果用户希望扩展或自定义镜像,则他们需要了解如何使用约束从 PyPI 安装提供程序和依赖项。

  • 使用 Kubernetes 管理其基础架构并使用 Helm 图表在 Kubernetes 上管理其应用程序的用户。

您需要处理的内容

  • 如果您想添加额外的依赖项,您应该能够自定义或扩展容器/Docker 镜像。您应该将由多个容器构建的部署组合在一起(例如使用 Docker Compose),并确保它们链接在一起。

  • 您负责设置数据库。

  • Helm 图表管理您的数据库架构,自动启动、恢复和重新启动应用程序组件并将它们链接在一起,因此您不必担心这一点。

  • 您负责管理自定义依赖项的自定义和扩展。对于官方 Airflow Docker 镜像,社区会处理 Airflow 和作为参考镜像一部分的 Airflow 提供程序的升级 - 您需要确保在发布新版本时通过升级基础镜像来获取这些更改。但是,您负责使用自己添加的依赖项和提供程序创建构建自己的自定义镜像的管道,并且在发布新版本的 Airflow 镜像时,需要重复自定义步骤并构建自己的镜像。

  • 您需要设置系统监控,以便观察资源并对问题做出反应。

  • 您需要根据安装的监控和反馈循环,为安装配置和管理适当的资源(内存、CPU 等)。

Apache Airflow 社区为此方法提供的内容

  • 您有说明:构建镜像,介绍如何构建和自定义您的镜像。

  • 您有Apache Airflow 的 Helm 图表 - 有关如何配置和安装 Helm 图表的完整文档。

  • Helm 图表由构建 Airflow 的同一批人管理,他们致力于在 Airflow 发布新功能时保持更新。

在哪里寻求帮助

  • 有关官方 Docker 镜像的快速问题,请访问 Airflow Slack 上的 #production-docker-image 频道。

  • 对于官方 Helm 图表的快速问题,Slack 中有#helm-chart-official频道。

  • Airflow Slack 上的 #user-troubleshooting 频道可用于快速解决一般故障排除问题。如果您需要更长时间的讨论并有更多信息要分享,请访问GitHub 讨论区

  • Slack 上的 #user-best-practices 频道可用于询问和分享有关使用和部署 Airflow 的最佳实践。

  • 如果您能提供 Airflow 软件可重现问题的描述,您可以在GitHub issues 上提交问题。

使用托管的 Airflow 服务

请访问生态系统页面,查找 Airflow 的所有托管服务。

此选项最适合以下情况

  • 如果您希望由其他人为您管理 Airflow 安装,可以使用托管的 Airflow 服务。

目标用户

  • 希望为其管理 Airflow 并愿意为此付费的用户。

您需要处理的内容

  • 托管服务通常提供运行 Airflow 所需的一切。有关详细信息,请参阅托管服务的文档。

Apache Airflow 社区为此方法提供的内容

  • Airflow 社区不为托管服务提供任何特定文档。有关详细信息,请参阅托管服务的文档。

在哪里寻求帮助

  • 您的首选应该是托管服务提供的支持。Apache Airflow Slack 中有几个频道专门针对不同的用户群体,如果您得出结论,该问题与 Airflow 的关系比与托管服务的关系更大,则可以使用这些频道。

使用第三方镜像、图表、部署

请访问生态系统页面,查找所有第三方部署选项。

此选项最适合以下情况

  • 如果前面提到的所有官方方法都不适合您,或者您过去使用过这些方法,则这些安装方法非常有用。但是,建议您在考虑进行任何更改时,都应该考虑切换到 Apache Airflow 社区或托管服务官方支持的方法之一。

目标用户

  • 过去使用过其他安装方法或由于其他原因发现官方方法不够用的用户。

您需要处理的内容

  • 取决于第三方提供的内容。请查看第三方的文档。

Apache Airflow 社区为此方法提供的内容

  • Airflow 社区不为第三方方法提供任何特定文档。有关详细信息,请参阅托管服务的文档。

在哪里寻求帮助

  • 取决于第三方提供的内容。请查看您使用的第三方部署的文档。

关于最低要求的说明

关于生产系统对 Airflow 的最低要求,经常会有一些问题,但不可能对这个问题给出简单的答案。

Airflow 可能需要的要求取决于许多因素,包括(但不限于)
  • 安装 Airflow 所用的部署(请参阅上述安装 Airflow 的方法)

  • 部署环境的要求(例如 Kubernetes、Docker、Helm 等),这些要求完全独立于 Airflow(例如 DNS 资源、共享节点/资源),需要更多(或更少)的 pod 和容器,这可能取决于对特定技术/云/监控集成的选择等。

  • 运行部署的数据库、硬件、网络等的详细技术信息

  • 您添加到 DAG、配置、插件、设置等的代码的复杂性(请注意,Airflow 运行 DAG 作者和部署管理器提供的代码)

  • 您安装和使用的提供程序的数量和选择(Airflow 有 80 多个提供程序),这些提供程序可以由部署管理器选择安装,使用它们可能需要更多资源。

  • 您在调整 Airflow 时使用的参数的选择。Airflow 有许多配置参数,可以根据您的需要进行微调

  • 您运行的 DagRuns 和任务实例的数量,并考虑到每个实例的并行实例

  • 您运行的任务的复杂程度

上述“DAG”特征会随着时间的推移而发生变化,甚至会根据一天或一周中的时间而发生变化,因此您必须准备好持续监控系统并调整参数以使其顺利运行。

虽然我们可以为一些开发“快速入门”提供一些具体的最低要求,例如在我们的在 Docker 中运行 Airflow快速入门指南中,但不可能为生产系统提供任何最低要求。

考虑 Airflow 实例的资源分配的最佳方式是从过程控制理论的角度来考虑,其中有两种类型的系统

  1. 完全可预测,旋钮和变量很少,您可以可靠地设置旋钮的值,并且可以轻松地确定系统的行为

  2. 具有多个变量的复杂系统,难以预测,您需要持续监控系统并调整旋钮,以确保系统平稳运行。

Airflow(通常是任何通常在云服务上运行的现代系统,具有多层负责资源以及多个参数来控制其行为)是一个复杂的系统,它们更多地属于第二类。如果您决定在生产环境中自行运行 Airflow,则应准备好进行监控/观察/调整反馈循环,以确保系统平稳运行。

拥有一个良好的监控系统,使您能够监控系统并调整参数,是将其付诸实践的必要条件。

也有一些指导原则可用于优化资源使用。微调调度程序性能是微调调度程序的一个良好起点,您还可以遵循最佳实践指南,以确保以最有效的方式使用 Airflow。

此外,Airflow 托管服务提供的一项重要内容是,它们会为您做出许多固执己见的选择并微调系统,因此您不必为此担心太多。使用此类托管服务,通常需要转动的旋钮和做出的选择要少得多,您支付的费用之一是托管服务提供商为您管理系统并提供付费支持,并允许您根据需要扩展系统并分配正确的资源 - 在您可能拥有的各种部署类型方面遵循做出的选择。

此条目有帮助吗?