Cloud Composer 环境架构

Cloud Composer 1 | Cloud Composer 2

本页面介绍了 Cloud Composer 2 环境的架构。

环境架构配置

Cloud Composer 2 环境可以具有以下架构配置:

每种配置会对环境资源的架构稍作更改。

客户和租户项目

当您创建环境时,Cloud Composer 会在租户和客户项目之间分配环境的资源。

客户项目是您在其中创建环境的 Google Cloud 项目。您可以在一个客户项目中创建多个环境。

租户项目是由 Google 管理的租户项目。租户项目可为您的环境提供统一的访问权限控制和额外一层数据安全保护。每个 Cloud Composer 环境都有自己的租户项目。

环境组件

Cloud Composer 环境由环境组件组成。

环境组件是作为环境的一部分在 Google Cloud 上运行的代管式 Airflow 基础架构的一个元素。

环境组件在环境的租户或客户项目中运行。

您的部分环境组件基于独立的 Google Cloud 产品。这些产品的配额和限制也适用于您的环境。例如,Cloud Composer 环境使用 VPC 对等互连。关于 VPC 对等互连数目上限的配额适用于您的客户项目,因此一旦您的项目达到此对等互连数上限,您将无法创建额外的环境。

环境的集群

环境的集群是环境的 Autopilot 模式 VPC 原生 Google Kubernetes Engine 集群:

  • 环境节点是环境集群中的虚拟机。

  • 环境集群中的 pod 使用其他环境组件(如 Airflow 工作器和调度器)运行容器。pod 在环境节点上运行。

  • 您的环境集群的工作负载资源会管理环境集群中的 pod 集。您的环境的许多组件以不同类型的工作负载资源的形式实现。例如,Airflow 工作器作为 Deployment 运行。除了 Deployment 之外,您的环境还具有 StatefulSet、DaemonSet 和作业工作负载类型。

默认情况下,Cloud Composer 支持节点自动升级节点自动修复,以保护您的环境的集群免受安全漏洞的影响。这些操作在您为环境指定的维护期内发生。

Airflow 调度器、工作器和 Redis 队列

Airflow 调度器控制 DAG 运行和 DAG 中各项任务的时间安排。调度器使用 Redis 队列将任务分发到 Airflow 工作器,该队列在环境集群中作为应用运行。Airflow 调度器在环境的集群中作为 Deployment 运行。

Airflow 工作器通过从 Redis 队列获取 DAG 中的各项任务来执行任务。Airflow 工作器在环境的集群中作为 Deployment 运行。

Redis 队列包含 DAG 中各项任务的队列。Airflow 调度器会填充队列,Airflow 工作器从中提取任务。Redis 队列在环境的集群中作为StatefulSet 应用运行,因此消息会在容器重启后保留。

Airflow 网络服务器

Airflow 网络服务器会运行您的环境的 Aiflow 界面。

在 Cloud Composer 2 中,Airflow Web 服务器在环境的集群中作为 Deployment 运行。

在 Cloud Composer 2 中访问不使用 Identity-Aware Proxy。

Airflow 数据库

Airflow 数据库是您的环境的租户项目中运行的 Cloud SQL 实例。它托管 Airflow 元数据数据库。

为了保护敏感连接和工作流信息,Cloud Composer 只允许对环境的服务帐号进行数据库访问。

环境存储桶

环境存储桶是一个 Cloud Storage 存储桶,用于存储 DAG、插件、数据依赖项和 Airflow 日志。环境存储桶位于客户项目中。

当您将 DAG 文件上传到环境存储桶中的 /dags 文件夹时,Cloud Composer 会将 DAG 同步到您的环境的工作器、调度器和网络服务器。您可以将工作流工件存储在 data/logs/ 文件夹中,并保留对数据的完全访问控制权,而无需担心大小限制。

其他环境组件

Cloud Composer 环境具有其他几个环境组件:

  • Cloud SQL Storage。存储 Airflow 数据库备份。为最大限度地降低丢失数据的可能性,Cloud Composer 每天都会对 Airflow 元数据进行备份。

    Cloud SQL Storage 在您的环境的租户项目中运行。您无法访问 Cloud SQL Storage 内容。

  • Cloud SQL 代理。将环境的其他组件连接到 Airflow 数据库。

    您的环境可以有一个或多个具有不同角色的 Cloud SQL 代理实例,具体取决于您的环境架构。

    Cloud SQL 代理在环境集群中或在租户项目中的 App Engine Flex 实例中作为 Deployment 运行。

    部署在环境的集群中时,Cloud SQL 代理还会授权通过应用、客户端或其他 Google Cloud 服务访问 Cloud SQL 实例。

  • HAProxy。在租户项目中运行的两个 Cloud SQL 代理实例之间对 Cloud SQL 实例的流量进行负载平衡。此组件用于专用 IP 环境架构,并在 Cloud SQL 代理部署中作为容器运行。

  • Airflow 监控。向 Cloud Monitoring 报告环境指标并触发 airflow_monitoring DAG。airflow_monitoring DAG 会报告环境健康状况数据,随后将会请求它,例如在环境的监控信息中心请求。Airflow 监控在环境的集群中作为 Deployment 运行。

  • Composer 代理可执行环境操作,例如创建、更新、升级和删除环境。一般来说,此组件负责在环境中引入更改。在环境的集群中作为作业运行。

  • Airflow InitDB 可创建一个 Cloud SQL 实例和初始数据库架构。Airflow InitDB 在环境的集群中作为作业运行。

  • FluentD。从所有环境组件收集日志,并将日志上传到 Cloud Logging。在环境的集群中作为 DaemonSet 运行。

  • Pub/Sub 订阅。您的环境通过 Pub/Sub 订阅与其 GKE 服务代理进行通信。它依赖于 Pub/Sub 的默认行为来管理消息。请勿删除 .*-composer-.* Pub/Sub 主题。Pub/Sub 支持每个项目最多 10000 个主题

  • 客户指标 Stackdriver 适配器会报告环境的指标,以便进行自动扩缩。此组件在环境的集群中作为 Deployment 运行。

  • Airflow 工作器设置控制器会根据客户指标 Stackdriver 适配器中的指标自动扩缩您的环境。此组件在环境的集群中作为 Deployment 运行。

  • Cloud Storage FUSE将环境的存储桶作为文件系统装载到 Airflow 工作器、调度器和 Web 服务器上,以便这些组件可以访问该存储桶中的数据。在环境的集群中作为 DaemonSet 运行。

公共 IP 环境架构

租户项目和客户项目中的公共 IP Cloud Composer 环境资源
图 1. 公共 IP 环境架构(点击可放大)

在 Cloud Composer 2 的公共 IP 环境架构中:

  • 租户项目托管 Cloud SQL 实例和 Cloud SQL 存储空间。
  • 客户项目托管环境的所有其他组件。
  • 客户项目中的 Airflow 调度器和工作器通过客户项目中的 Cloud SQL 代理实例与 Airflow 数据库通信。

专用 IP

租户项目和客户项目中的专用 IP Cloud Composer 环境资源
图 2. 专用 IP 环境架构(点击可放大)

在 Cloud Composer 2 的专用 IP 环境架构中:

  • 租户项目托管 Cloud SQL 实例和 Cloud SQL 存储空间。
  • 客户项目托管环境的所有其他组件。
  • Airflow 调度器和工作器通过环境集群中的 HAProxy 进程连接到 Airflow 数据库。
  • HAProxy 进程在租户项目中的两个 Cloud SQL 代理实例之间对 Cloud SQL 实例的流量进行负载平衡。专用 IP 环境使用两个 Cloud SQL 代理实例,这是因为由于客户限制,客户项目不直接访问数据库。您需要两个实例,以确保环境的组件始终可以访问数据库。

与 Cloud Logging 和 Cloud Monitoring 集成

Cloud Composer 集成了您的 Google Cloud 项目的 Cloud Logging 和 Cloud Monitoring,因此您可以集中查看 Airflow 服务和工作流日志

Cloud Monitoring 会从 Cloud Composer 中收集并提取指标、事件和元数据,并通过信息中心和图表生成数据分析

得益于 Cloud Logging 的流式传输特性,您可以立即查看由 Airflow 调度器和工作器发出的日志,而无需等待 Airflow 日志显示在环境的 Cloud Storage 存储桶中。由于 Cloud Composer 的 Cloud Logging 日志基于 google-fluentd,因此您可以访问由 Airflow 调度器和工作器生成的所有日志。

如需限制 Google Cloud 项目中的日志数量,您可以停止所有日志提取。请勿停用 Logging。

后续步骤