Cloud Composer 环境架构

Cloud Composer 1 | Cloud Composer 2

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

环境架构配置

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

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

客户和租户项目

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

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

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

环境组件

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

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

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

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

环境的集群

环境的集群是环境的标准模式 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 工作器从 DAG 中获取各项任务,方法是从 Redis 队列中获取任务。Airflow 工作器在环境的集群中作为 Deployment 运行。

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

Airflow Web 服务器

Airflow Web 服务器运行您的环境的 Airflow 界面。

在 Cloud Composer 1 中,Airflow Web 服务器是一个 App Engine Flex 实例,在环境的租户项目中运行。

Airflow 网络服务器已与 Identity-Aware Proxy 集成。Cloud Composer 会隐藏 IAP 集成细节,并根据为用户定义的用户身份和 IAM 政策绑定提供对 Web 服务器的访问权限。

Airflow 网络服务器与 Airflow 工作器和 Airflow 调度器使用不同的服务账号运行。网络服务器的服务账号是在环境创建期间自动生成的,并且源自网络服务器网域。例如,如果网域为 example.appspot.com,则服务账号为 example@appspot.gserviceaccount.com

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 数据库。

    您的公共 IP 环境可以有一个或多个 Cloud SQL 代理实例,具体取决于流向 Airflow 数据库的流量大小。

    对于公共 IP 环境,Cloud SQL 代理会在环境的集群中作为部署运行。

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

- HAProxy。对租户项目中运行的两个 Cloud SQL 代理实例之间流向 Cloud SQL 实例的流量进行负载均衡。对于 Cloud Composer 1,该组件用于专用 IP 环境,并在 Cloud SQL 代理部署中作为容器运行。
  • Airflow 监控。向 Cloud Monitoring 报告环境指标并触发 airflow_monitoring DAG。airflow_monitoring DAG 会报告环境健康状况数据,这些数据之后会用于环境的监控信息中心内等目的。Airflow 监控在环境的集群中作为 Deployment 运行。

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

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

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

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

  • 存储桶同步。此过程会同步客户和租户项目中的环境存储桶。此组件用于采用 DRS 环境架构的专用 IP。该组件在使用环境存储桶的其他组件的 pod 中作为容器运行。

    公共 IP 环境架构

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

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

    • 租户项目托管一个 Cloud SQL 实例、一个 Cloud SQL 存储空间和一个运行 Airflow 网络服务器的 App Engine Flex 实例。
    • 客户项目托管环境的所有其他组件。
    • 客户项目中的 Airflow 调度器和工作器通过客户项目中的 Cloud SQL 代理实例与 Airflow 数据库通信。
    • 租户项目中的 Airflow 网络服务器通过该租户项目中的 Cloud SQL 代理实例与 Airflow 数据库进行通信。

    专用 IP 环境架构

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

    在专用 IP 环境架构中:

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

    使用 DRS 的专用 IP

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

    如果您的项目启用了网域限定共享 (DRS) 组织政策,则 Cloud Composer 会将专用 IP 与 DRS 环境架构搭配使用。

    在采用 DRS 环境架构的专用 IP 中:

    • 租户项目托管一个 Cloud SQL 实例、一个 Cloud SQL 存储空间,以及两个运行 Airflow 网络服务器的 App Engine 实例。

    • 租户项目托管其他环境存储桶。Airflow 网络服务器会直接访问此存储桶。

    • 客户项目托管环境的所有其他组件。

    • 客户项目在环境的集群中托管存储桶同步过程。此过程会同步两个环境存储桶。

    • 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。

    后续步骤