已知问题

Cloud Composer 3 | Cloud Composer 2 | Cloud Composer 1

本页面列出了 Cloud Composer 的已知问题。如需了解问题修复,请参阅版本说明

在更新期间添加的环境标签未完全传播

更新后的环境标签不适用于 Compute Engine 虚拟机。解决方法是手动应用这些标签。

对于上传的 DAG 文件,首次运行 DAG 时有几个失败的任务

当您上传某个 DAG 文件时,有时针对该文件的首次 DAG 运行的前几个任务会失败,并显示 Unable to read remote log... 错误。出现此问题的原因是 DAG 文件在环境的存储分区、Airflow 工作器和环境的 Airflow 调度器之间同步。如果调度器获取 DAG 文件并安排其由工作器执行,并且工作器还没有 DAG 文件,则任务执行将失败。

为了缓解此问题,默认情况下,具有 Airflow 2 的环境配置为对失败的任务执行两次重试。如果任务失败,系统会按 5 分钟的时间间隔重试任务两次。

Cloud Composer 不应受 Apache Log4j 2 漏洞 (CVE-2021-44228) 影响

针对 Apache Log4j 2 漏洞 (CVE-2021-44228),Cloud Composer 开展了详细调查,我们认为 Cloud Composer 不会受到此漏洞的影响。

更改插件后,Airflow 界面有时有时不重新加载插件

如果插件包含多个会导入其他模块的文件,则 Airflow 界面可能无法识别应该重新加载插件的情况。在这种情况下,请重启环境的 Airflow Web 服务器

访问 Airflow 界面时出现 504 错误

您在访问 Airflow 界面时可能会收到 504 Gateway Timeout 错误。导致此错误的原因可能有多种:

  • 暂时性通信问题。在这种情况下,请稍后尝试访问 Airflow 界面。您也可以重启 Airflow Web 服务器

  • (仅限 Cloud Composer 3)连接问题。如果 Airflow 界面永久不可用,并生成超时或 504 错误,请确保您的环境可以访问 *.composer.googleusercontent.com

  • (仅限 Cloud Composer 2)连接问题。如果 Airflow 界面永久不可用,并且生成超时或 504 错误,请确保您的环境可以访问 *.composer.cloud.google.com。如果您使用 Google 专用访问并通过 private.googleapis.com 虚拟 IP 发送流量,或者使用 VPC Service Controls 并通过 restricted.googleapis.com 虚拟 IP 发送流量,请确保您的 Cloud DNS 也针对 *.composer.cloud.google.com 域名进行了配置。

  • Airflow Web 服务器无响应。如果 504 错误仍然存在,但您在某些时候仍然可以访问 Airflow 界面,则表示 Airflow Web 服务器可能因过载而无响应。尝试提高 Web 服务器的扩缩和性能参数

访问 Airflow 界面时出现 502 错误

错误 502 Internal server exception 表示 Airflow 界面无法处理传入请求。导致此错误的原因可能有多种:

  • 暂时性通信问题。请稍后再尝试访问 Airflow 界面。

  • 未能启动网站服务器。为了启动,Web 服务器需要先同步配置文件。检查 Web 服务器日志,看看是否存在类似于 GCS sync exited with 1: gcloud storage cp gs://<bucket-name>/airflow.cfg /home/airflow/gcs/airflow.cfg.tmpGCS sync exited with 1: gcloud storage cp gs://<bucket-name>/env_var.json.cfg /home/airflow/gcs/env_var.json.tmp 的日志条目。如果您看到这些错误,请检查错误消息中提及的文件是否仍存在于环境的存储分区中。

    如果这些数据意外被移除(例如,由于配置了保留政策),您可以通过以下方式恢复它们:

    1. 在您的环境中设置一个新的环境变量。您可以使用任何变量名称和值。

    2. 替换 Airflow 配置选项。您可以使用不存在的 Airflow 配置选项。

在树状视图中将鼠标悬停在任务实例上会抛出未捕获的 TypeError

在 Airflow 2 中,使用非默认时区时,Airflow 界面中的树视图有时可能无法正常运行。如需解决此问题,请在 Airflow 界面中明确配置时区

调度程序和工作器中存在空文件夹

Cloud Composer 不会主动从 Airflow 工作器和调度器中移除空文件夹。如果这些文件夹存在于存储分区中,但最终被移除,环境存储分区同步流程可能会创建此类实体。

建议:调整 DAG,以便它们准备好跳过此类空文件夹。

当 Airflow 调度器和工作器重启时(例如,由于环境集群中的缩减或维护操作),此类实体最终会从 Airflow 调度器和工作器的本地存储空间中移除。

支持 Kerberos

Cloud Composer 不支持 Airflow Kerberos 配置

支持 Cloud Composer 2 和 Cloud Composer 3 中的计算类

Cloud Composer 3 和 Cloud Composer 2 仅支持通用 计算类。这意味着,无法运行请求其他计算类(例如平衡横向扩展)的 Pod。

通用类允许运行的 Pod 最多请求 110 GB 内存和 30 个 CPU(如计算类的最大请求中所述)。

如果您想使用基于 ARM 的架构或需要更多 CPU 和内存,则必须使用其他计算类,Cloud Composer 3 和 Cloud Composer 2 集群不支持此类。

建议:使用 GKEStartPodOperator 在支持所选计算类的其他集群上运行 Kubernetes Pod。如果您运行需要其他计算类的自定义 Pod,则这些 Pod 也必须在非 Cloud Composer 集群上运行。

无法缩减 Cloud SQL 存储空间

Cloud Composer 使用 Cloud SQL 运行 Airflow 数据库。随着时间的推移,Cloud SQL 实例的磁盘存储空间可能会增加,因为当 Airflow 数据库增长时,磁盘会扩容以适应 Cloud SQL 操作存储的数据。

无法缩减 Cloud SQL 磁盘大小。

作为一种权宜解决方法,如果您想使用最小的 Cloud SQL 磁盘大小,可以使用快照重新创建 Cloud Composer 环境。

从 Cloud SQL 中移除记录后,“数据库磁盘用量”指标不会减少

关系型数据库(例如 Postgres 或 MySQL)在删除或更新行时不会实际移除行。而是将其标记为“死元组”,以保持数据一致性并避免阻塞并发事务。

MySQL 和 Postgres 都实现了在删除记录后回收空间的机制。

虽然可以强制数据库回收未使用的磁盘空间,但这是一个资源密集型操作,并且会锁定数据库,使 Cloud Composer 不可用。因此,建议依赖于构建机制来回收未使用的空间。

禁止访问:发生了授权错误

如果此问题影响了用户,访问被阻止:授权错误对话框中会显示 Error 400: admin_policy_enforced 消息。

如果 Google Workspace 中启用了 API 控件 > 未配置的第三方应用 > 不允许用户访问任何第三方应用选项,并且未明确允许“Cloud Composer 中的 Apache Airflow”应用,则用户将无法访问 Airflow 界面,除非他们明确允许该应用。

如需授予访问权限,请执行允许访问 Google Workspace 中的 Airflow 界面中提供的步骤。

访问 Airflow 界面时出现登录循环

此问题可能由以下原因造成:

Airflow 组件在与 Cloud Composer 配置的其他部分通信时遇到问题

在极少数情况下,与 Compute Engine 元数据服务器的通信缓慢可能会导致 Airflow 组件无法正常运行。例如,Airflow 调度器可能会重启,Airflow 任务可能需要重试,或者任务启动时间可能会延长。

症状

Airflow 组件(例如 Airflow 调度器、工作器或 Web 服务器)的日志中显示以下错误:

Authentication failed using Compute Engine authentication due to unavailable metadata server

Compute Engine Metadata server unavailable on attempt 1 of 3. Reason: timed out
...
Compute Engine Metadata server unavailable on attempt 2 of 3. Reason: timed out
...
Compute Engine Metadata server unavailable on attempt 3 of 3. Reason: timed out

解决方案:

设置以下环境变量GCE_METADATA_TIMEOUT=30

Airflow Web 服务器中不提供 /data 文件夹

在 Cloud Composer 2 和 Cloud Composer 3 中,Airflow Web 服务器应是大部分为只读的组件,Cloud Composer 不会将 data/ 文件夹同步到此组件。

有时,您可能需要在所有 Airflow 组件(包括 Airflow Web 服务器)之间共享常用文件。

解决方案:

  • 将要与 Web 服务器共享的文件封装到 PYPI 模块中,并将其作为常规 PYPI 软件包进行安装。在环境中安装 PYPI 模块后,这些文件会添加到 Airflow 组件的映像中,并可供它们使用。

  • 将文件添加到 plugins/ 文件夹中。此文件夹会同步到 Airflow Web 服务器。

监控中的非连续 DAG 解析时间和 DAG 包大小图

Monitoring 信息中心中不连续的 DAG 解析时间和 DAG 包大小图表表示 DAG 解析时间过长(超过 5 分钟)存在问题。

显示一系列非连续间隔的 Airflow DAG 解析时间和 DAG 包大小图表
图 1. 非连续 DAG 解析时间和 DAG 总数图表(点击可放大)

解决方案:我们建议将 DAG 总解析时间控制在 5 分钟以内。如需缩短 DAG 解析时间,请遵循 DAG 编写指南

任务日志会延迟显示

具体情况:

  • 在 Cloud Composer 3 中,Airflow 任务日志不会立即显示,而是会延迟几分钟。

原因:

如果您的环境同时运行大量任务,则任务日志可能会延迟,因为环境的基础架构大小不足以快速处理所有日志。

解决方案

  • 请考虑增加环境的基础架构大小,以提升性能。
  • 分散 DAG 运行时间,以免任务同时执行。

缩短了 KubernetesPodOperator 和 KubernetesExecutor 的启动时间

使用 KubernetesPodOperator 创建的 Pod 和使用 KubernetesExecutor 执行的任务的启动时间会延长。Cloud Composer 团队正在努力寻找解决方案,并会在问题得到解决时通知您。

解决方法

  • 启动具有更多 CPU 的 pod。
  • 请尽可能优化图片(减少图层、缩减大小)。

在项目的结算账号被删除或停用,或 Cloud Composer API 被停用后,环境处于 ERROR 状态

受以下问题影响的 Cloud Composer 环境无法恢复:

  • 项目的结算账号被删除或停用后,即使之后关联了其他账号,也不会恢复。
  • 在项目中停用 Cloud Composer API 后,即使日后重新启用,也不会恢复。

您可以执行以下操作来解决此问题:

  • 您仍然可以访问存储在环境存储分区中的数据,但环境本身不再可用。您可以创建新的 Cloud Composer 环境,然后传输 DAG 和数据。

  • 如果您要执行任何会导致环境无法恢复的操作,请务必备份数据,例如通过创建环境的快照。这样一来,您就可以通过加载此快照创建其他环境并转移其数据。

后续步骤