已知问题

Cloud Composer 1 |Cloud Composer 2 |Cloud Composer 3

本页面列出了 Cloud Composer 的已知问题。针对这些问题的一些修复 一些问题正在处理中,将在 未来版本

有些问题会影响旧版本,您可以通过升级环境来解决。

Pod 和服务部分支持非 RFC 1918 地址范围

Cloud Composer 依赖 GKE 来提供支持 非 RFC 1918 地址。目前,Cloud Composer 仅支持以下非 RFC 1918 范围列表:

  • 100.64.0.0/10
  • 192.0.0.0/24
  • 192.0.2.0/24
  • 192.88.99.0/24
  • 198.18.0.0/15
  • 198.51.100.0/24
  • 203.0.113.0/24
  • 240.0.0.0/4

在 Composer 1.10.2 和 Composer 1.10.3 中启用 DAG 序列化时,Airflow 界面不显示任务日志

在使用 Composer 版本 1.10.2 和 1.10.3 的环境中启用 DAG 序列化时,可防止日志显示在 Airflow 网络服务器上。要解决此问题,请升级到版本 1.10.4(或更高版本)。

在 Cloud Composer 中安排期间出现间歇性任务失败

在任务执行期间,任务实例的 Airflow Scheduler 中会出现此问题。不过,日志并未说明任务失败的原因,而且 Airflow 工作器和 Airflow 调度器看起来相对正常。

Airflow 调度器上的错误消息可能类似于以下错误:

Executor reports task instance <TaskInstance: xx.xxxx scheduled__2022-04-21T06:00:00+00:00 [queued]> finished (failed) although the task says its queued. (Info: None) Was the task killed externally?

或者,Airflow 工作器上可能存在一些类似以下错误的错误:

Log file is not found: gs://$BUCKET_NAME/logs/$DAG_NAME/$TASK_NAME/2023-01-25T05:01:17.044759+00:00/1.log.
The task might not have been executed or worker executing it might have finished abnormally (e.g. was evicted).

为确保稳健性能够应对源自 Airflow 长期问题的此类错误,强烈建议您在任务和 DAG 级别主动实施适当的重试策略。通过结合这些措施,系统可以有效地减轻这些错误的影响,从而提高工作流的整体可靠性和弹性。

不支持 GKE Workload Identity

此问题仅适用于 Cloud Composer 1 环境。Cloud Composer 2 环境使用的是 Workload Identity。

您无法为 Cloud Composer 环境集群开启 Workload Identity。因此,您可能会在 Security Command Center 中看到 WORKLOAD_IDENTITY_DISABLED 发现结果。

更新期间添加的环境标签不会完全传播

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

发生 CVE-2020-14386 问题时的 GKE 升级

我们正致力于解决所有 Cloud Composer 环境的 CVE-2020-14386 漏洞。作为修复的一部分,所有现有 Cloud Composer 的 GKE 集群都将更新为更新版本。

如果客户决定立即解决该漏洞,则可以按照这些说明升级 Composer GKE 集群,同时注意以下几点:

第 1 步:如果您运行的 Cloud Composer 版本低于 1.7.2,请升级到更高版本的 Cloud Composer。如果您已使用 1.7.2 或更高版本,请转到下一个点。

第 2 步:将 GKE 集群(主服务器和节点)升级到包含此漏洞修复的最新 1.15 补丁程序版本。

从 Airflow 1.9.0 升级到 Airflow 1.10.x 之后,Airflow 任务日志将在 Airflow 网络服务器中不可用

Airflow 1.10.x 针对日志文件的命名惯例引入了不向后兼容的更改。区域信息现已添加到 Airflow 任务。

Airflow 1.9.0 会存储日志名称,并要求采用以下格式: BUCKET/logs/DAG/2020-03-30T10:29:06/1.log Airflow 1.10.x 会存储日志名称,并要求采用以下格式: BUCKET/logs/DAG/2020-03-30T10:29:06+00:00/1.log

因此,如果您从 Airflow 1.9.0 升级到 Airflow 1.10.x,并且想要读取使用 Airflow 1.9.0 执行的任务的日志,则 Airflow 网络服务器将显示以下错误消息: Unable to read remote log from BUCKET/logs/DAG/2020-03-30T10:29:06+00:00/1.log

解决方法:使用以下格式,重命名 Cloud Storage 存储分区中由 Airflow 1.9.0 生成的日志:BUCKET/logs/DAG/2020-03-30T10:29:06+00:00/1.log

无法创建执行组织政策 constraints/compute.disableSerialPortLogging 的 Cloud Composer 环境

如果对目标项目强制执行 constraints/compute.disableSerialPortLogging,Cloud Composer 环境创建将失败。

诊断

要确定您是否受到此问题影响,请按以下步骤操作:

转到以下位置的 GKE 菜单: Google Cloud 控制台。 访问 GKE 菜单

然后,选择新创建的集群。检查是否存在以下错误:

Not all instances running in IGM after 123.45s.
Expect <number of desired instances in IGM>. Current errors:

Constraint constraints/compute.disableSerialPortLogging violated for
project <target project number>.

解决方法

  1. 在将创建 Cloud Composer 环境的项目中停用组织政策。

    即使父资源(组织或文件夹)启用了组织政策,您也始终可以在项目级层停用组织政策。如需了解详情,请参阅为布尔值限制条件自定义政策页面

  2. 使用排除过滤器

    使用串行端口日志的排除过滤器可以实现与停用组织政策同样的目标,因为 Logging 中将会有串行控制台日志。如需了解详情,请参阅排除过滤器页面。

使用 Deployment Manager 管理受 VPC Service Controls 保护的 Google Cloud 资源

Composer 使用 Deployment Manager 创建 Cloud Composer 环境的组件。

2020 年 12 月,您可能收到相关信息,告知您可能需要执行其他 VPC Service Controls 配置,以便能够使用 Deployment Manager 来管理受 VPC Service Controls 保护的资源。

我们想要说明如果您使用的是 Composer,并且直接使用 Deployment Manager 来管理 Deployment Manager 通告中所述的 Google Cloud 资源,则您无需执行任何操作

在环境的 GKE 集群被删除后无法删除环境

如果您在删除环境之前删除环境的集群,则尝试删除环境会导致以下错误:

 Got error "" during CP_DEPLOYMENT_DELETING [Rerunning Task. ]

如需删除其 GKE 集群已被删除的环境,请执行以下操作:

  1. 打开 Google Cloud 控制台中的 Deployment Manager 页面。

    打开 Deployment Manager 页面

  2. 查找所有带有以下标签的部署:

    • goog-composer-environment:<environment-name>
    • goog-composer-location:<environment-location>

    您应该会看到两个部署带有所述标签:

    • 名为 <environment-location>-<environment-name-prefix>-<hash>-sd 的部署
    • 名为 addons-<uuid> 的部署
  3. 手动删除仍在这两个部署中列出和存在于项目中的资源(例如,Pub/Sub 主题和订阅)。为此,请执行以下操作:

    1. 选择部署。

    2. 点击删除

    3. 选择删除这 2 个部署及其创建的虚拟机、负载平衡器和磁盘等所有资源选项,然后点击全部删除

    删除操作失败,但剩余资源将被删除。

  4. 使用以下任一选项删除部署:

    • 在 Google Cloud 控制台中,再次选择这两个部署。 点击删除,然后选择删除这 2 个部署,但保留其创建的资源选项。

    • 运行 gcloud 命令以删除具有 ABANDON 政策的部署:

      gcloud deployment-manager deployments delete addons-<uuid> \
          --delete-policy=ABANDON
      
      gcloud deployment-manager deployments delete <location>-<env-name-prefix>-<hash>-sd \
          --delete-policy=ABANDON
      
  5. 删除 Cloud Composer 环境

Deployment Manager 显示有关不受支持的功能的信息

您可能会在 Deployment Manager 标签页中看到以下警告:

The deployment uses actions, which are an unsupported feature. We recommend
that you avoid using actions.

对于 Cloud Composer 拥有的 Deployment Manager 部署,您可以忽略此警告。

属于“echo-airflow_monitoring”DAG 的“echo”任务条目的警告

您可能会在 Airflow 日志中看到以下条目:

in _query db.query(q) File "/opt/python3.6/lib/python3.6/site-packages/MySQLdb/
connections.py", line 280, in query _mysql.connection.query(self, query)
_mysql_exceptions.IntegrityError: (1062, "Duplicate entry
'echo-airflow_monitoring-2020-10-20 15:59:40.000000' for key 'PRIMARY'")

您可以忽略这些日志条目,因为此错误不会影响 Airflow DAG 和任务处理。

我们正在努力改进 Cloud Composer 服务,以从 Airflow 日志中移除这些警告。

在将 Identity-Aware Proxy API 添加到 VPC Service Controls 边界的项目中,环境创建失败

在启用了 VPC Service Controls 的项目中, cloud-airflow-prod@system.gserviceaccount.com 账号要求明确 创建环境的权限。

如需创建环境,您可以使用以下解决方案之一:

  • 请勿添加 Cloud Identity-Aware Proxy APIIdentity-Aware Proxy TCP API 连接到安全边界。

  • 添加 cloud-airflow-prod@system.gserviceaccount.com 服务账号 作为安全边界的成员 方法是在 YAML 条件文件中使用以下配置

     - members:
        - serviceAccount:cloud-airflow-prod@system.gserviceaccount.com
    

启用 compute.requireOsLogin 政策后,Cloud Composer 1 环境创建失败

如果您的项目中的 compute.requireOsLogin 政策设为 true,则 Cloud Composer 1 v1 环境创建操作将失败。

如需创建 Cloud Composer 1 环境,请在项目中停用此政策。

如需详细了解此组织政策,请参阅组织政策限制条件

停用 compute.vmExternalIpAccess 后,Cloud Composer 环境创建或升级失败

在公共 IP 模式下配置的 Cloud Composer 拥有的 GKE 集群需要其虚拟机的外部连接。因此,compute.vmExternalIpAccess 政策不能禁止创建具有外部 IP 地址的虚拟机。如需详细了解此组织政策,请参阅组织政策限制条件

停用 compute.vmCanIpForward 政策时 Cloud Composer 环境创建失败

在非 VPC 原生(使用别名 IP)模式下创建的 Cloud Composer 1 环境需要此政策允许创建启用了“IP 转发”功能的虚拟机。如需详细了解此组织政策,请参阅组织政策限制条件

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

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

要解决此问题,默认情况下,Cloud Composer 1.17.0-preview.9 及更高版本的 Airflow 2 环境配置为对失败的任务执行两次重试。如果任务失败,系统会按 5 分钟的时间间隔重试任务两次。

如需在 Airflow 1 中使用此问题的解决方法,请替换 core-default_task_retries Airflow 配置选项并将其设置为大于或等于 2 的数字。

在 Airflow 1.10.15 或更早版本中,任务失败并显示“OSError: [Errno 5] Input/output error”

Airflow 1 版本中的一个错误会导致在极少数情况下将任务放入 Redis 队列两次。

有时,这可能会导致日志文件出现竞态条件,进而造成任务失败。任务失败并在 Cloud Logging 中显示 OSError: [Errno 5] Input/output error,在任务尝试日志中显示 Task is in the 'running' state which is not a valid state for execution.

此错误在 Airflow 2 中得到了解决。如果您在执行长时间运行的任务时,在 Airflow 1 中遇到此问题,请增加 [celery_broker_transport_options]visibility_timeout Airflow 配置选项的值(Composer 1.17.0 的默认值为 604800,旧版环境的默认值为 21600)。对于短时间运行的任务,请考虑向受影响的任务添加更多重试次数,或将环境迁移到 Airflow 2。

Dataproc/Dataflow 运算符失败并显示 Negsignal.SIGSEGV

通过 Celery 工作器使用 grcpio 库时会出现这个间歇性问题。此问题会影响 Airflow 1.10.14 及更高版本。

解决方法是向您的环境添加以下环境变量,以更改 grpcio 轮询策略:GRPC_POLL_STRATEGY=epoll1。 Cloud Composer 1.17.1 及更高版本中已经应用此解决方法。

关于从 GKE 版本中移除对已弃用 Beta 版 API 的支持的公告

Cloud Composer 管理 Cloud Composer 拥有的底层 GKE 集群。除非您在 DAG 和代码中显式使用此类 API,否则可以忽略有关 GKE API 弃用的公告。如有必要,Cloud Composer 会负责处理任何迁移。

发生 CVE-2021-25741 安全问题时的 GKE 升级

通过修复 CVE-2021-25741 中描述的问题,所有 Cloud Composer 的现有 GKE 集群都将自动升级到较新的 GKE 版本。

如果您要立即解决此漏洞,请按照升级集群的说明升级您的环境的 GKE 集群。

  • 如果您使用的是 Cloud Composer 1 环境和 GKE 1.18.x 版或更早版本,请升级到 1.18.20-gke.4501。

  • 如果您使用的是 Cloud Composer 1 环境和 GKE 1.19.x 版,请升级到 1.19.14-gke.301。

  • 如果您使用的是 Cloud Composer 2 环境和 GKE 1.21.x 版,请升级到 1.21.4-gke.301。

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

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

Airflow 工作器或调度器在访问环境的 Cloud Storage 存储桶时可能会遇到问题

Cloud Composer 使用 gcsfuse 来访问/data 并将 Airflow 任务日志保存到 /logs 目录(如果 )。如果 gcsfuse 过载或环境的存储桶不可用,您可能会遇到 Airflow 任务实例失败,并在 Airflow 日志中看到 Transport endpoint is not connected 错误。

解决方案

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

如果插件包含多个会导入其他模块的文件,则 Airflow 界面可能无法识别应该重新加载插件的情况。在这种情况下,需要触发 Airflow Web 服务器的重启。为此,您可以添加环境变量或者安装或卸载 PYPI 依赖项。您也可以重启 Airflow Web 服务器

与 Airflow 元数据数据库通信时出现间歇性问题

此已知问题仅适用于 Cloud Composer 1。

之前创建的某些旧版 Cloud Composer 1 环境(1.16.3 或更早版本) 2021 年 8 月 12 日,您可能遇到了与以下联系人通信有关的暂时性问题: Airflow 元数据数据库。

如果遇到此问题,您会在 Airflow 任务日志中看到 以下错误消息:

"Can't connect to MySQL server on 'airflow-sqlproxy-service.default.svc.cluster.local' (104)"

Cloud Composer 团队正在努力解决此问题。与此同时,如果您认为自己受到此问题的严重影响,可以执行以下操作来消除此问题:

  1. 在 Google Cloud 控制台中,前往环境配置页面 受影响的 Cloud Composer 环境
  2. 点击查看集群详情链接,前往环境的底层 GKE 集群。
  3. 前往节点标签页,然后点击节点池部分中显示的 default-pool

    节点池列表中的 default-pool
    图 1.“节点池”列表中的 default-pool(点击可放大)
  4. 点击页面顶部的修改

  5. 将映像类型更改为包含 Containerd 的 Container-Optimized OS 并保存配置 如下所示。

    将节点池映像类型从 Docker 更改为 containerd
    图 2.将节点池映像类型从 Docker 更改为 containerd(点击可放大)
  6. 提交更改后,您的 default-pool 节点池将重新配置为使用 containerd 作为容器运行时。您的某些 Airflow 任务可能会失败 重新配置节点池的状态。如果这些任务已配置重试,则在节点池上的操作完成后,Airflow 会重新运行这些任务。

环境的集群中有处于“无法调度”状态的工作负载

此已知问题仅适用于 Cloud Composer 2。

在 Cloud Composer 2 中,创建环境后,环境集群中的多个工作负载仍处于不可调度状态。

当环境纵向扩容时,系统会创建新的工作器 Pod,Kubernetes 会尝试运行它们。 如果没有可用于运行它们的空闲资源,工作器 Pod 会被标记为不可调度。

在这种情况下,集群自动扩缩器会添加更多节点,这需要几分钟的时间。 在此之前,这些 Pod 会保持不可调度状态,并且不会运行任何任务。

名为 composer-gcsfusecomposer-fluentd 且无法在未安装 Airflow 组件的节点上启动的不可调度 DaemonSet 工作负载不会影响您的环境。

如果此问题长时间(超过 1 小时)仍然存在,您可以检查集群 自动扩缩器日志。您可以在日志查看器中使用以下过滤条件找到这些日志:

resource.type="k8s_cluster"
logName="projects/<project-name>/logs/container.googleapis.com%2Fcluster-autoscaler-visibility"
resource.labels.cluster_name="<cluster-name>"

它包含集群自动扩缩器做出的决策的相关信息:展开任何 noDecisionStatus 即可查看集群无法扩容或缩容的原因。

访问 Airflow 界面时出现 504 错误

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

  • 暂时性的通信问题。在这种情况下,请稍后尝试访问 Airflow 界面。您也可以重启 Airflow Web 服务器
  • (仅限 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 界面中明确配置时区

Airflow 2.2.3 或更低版本中的 Airflow 界面容易受到 CVE-2021-45229 的攻击

CVE-2021-45229 中所指出,“使用配置触发 DAG”屏幕容易受到通过 origin 查询参数进行的 XSS 攻击。

建议:升级到最新的 Cloud Composer 版本 (支持 Airflow 2.2.5)

工作器需要的内存比以前的 Airflow 版本更多

症状

  • 在 Cloud Composer 2 环境中,此环境的所有集群工作负载 Airflow 工作器处于 CrashLoopBackOff 状态且不执行 任务。你还可以查看系统生成的 OOMKilling 个警告,如果你未 将受该问题影响

  • 此问题可能会导致环境升级。

原因

  • 如果您为 [celery]worker_concurrency Airflow Airflow 工作器的配置选项和自定义内存设置, 在资源消耗量接近上限时可能会遇到此问题。
  • 与早期版本的工作器相比,使用 Python 3.11 的 Airflow 2.6.3 中 Airflow 工作器的内存要求提高了 10%。
  • 与 Airflow 2.2 或 Airflow 2.1 中的 Airflow 工作器相比,Airflow 2.3 及更高版本中的 Airflow 工作器内存要求高出 30%。

解决方案

  • 移除 worker_concurrency 的替换项,以便 Cloud Composer 自动计算此值。
  • 如果您对 worker_concurrency 使用自定义值,请将其设置为较低的值。 您可以使用自动计算的值作为起点。
  • 您也可以增加可供 Airflow 使用的内存量 worker。
  • 如果由于此原因无法将环境升级到更高版本 问题,然后在升级之前应用建议的解决方案之一。

使用 Cloud Run 函数通过专用网络触发 DAG

使用 Cloud Composer 不支持 VPC 连接器。

建议:使用 Cloud Run 函数在 Pub/Sub 上发布消息。此类事件可以激活 Pub/Sub 传感器以触发 Airflow DAG 或者实施基于可延期运算符的方法。

410.0.0 版本中 gcloud Compose 命令的问题

410.0.0 版 gcloud 中,以下 Cloud Composer 命令:

  • gcloud composer environments run
  • gcloud composer environments list-packages

返回非零错误代码并显示以下错误消息:

  (ERROR: gcloud crashed (TypeError): 'NoneType' object is not callable)

除了 gcloud 命令运行,而不会影响其功能。

如果此问题不会影响您的操作,您可以继续使用 410.0.0 版本,并忽略错误消息。如果您需要使用 410.0.0 版本并以程序化方式使用 gcloud 命令,请实现其他逻辑,以忽略输出中的非零错误代码以及有关错误堆栈轨迹的信息。您还可以参阅“解决方案”部分,了解任何其他权宜解决方法。

解决方案

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

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

建议:调整您的 DAG,使其准备好跳过此类空的会话 文件夹中。

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

支持 Kerberos

Cloud Composer 尚不支持 Airflow Kerberos 配置

Cloud Composer 2 对计算类的支持

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

通用类允许运行请求最多 110 GB 实例 以及多达 30 个 CPU(如 计算类最大请求次数

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

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

支持 Google Campaign Manager 360 操作符

Cloud Composer 2.1.13 之前的版本中的 Google Campaign Manager 运算符基于已弃用的 Campaign Manager 360 v3.5 API,该 API 的弃用日期为 2023 年 5 月 1 日

如果您使用 Google 广告客户管理工具运算符,请将您的环境升级到 Cloud Composer 2.1.13 或更高版本。

支持 Google Display & Video 360 运营商

Cloud Composer 版本中的 Google Display & Video 360 运算符 基于 Display & Video 360 v1.1 API, 其弃用日期为 2023 年 4 月 27 日。

如果您使用 Google Display & Video 360 运算符,请将您的环境升级到 Cloud Composer 2.1.13 或更高版本。此外,由于部分 Google Display & Video 360 运算符已废弃并替换为新运算符,因此您可能需要更改 DAG。

  • GoogleDisplayVideo360CreateReportOperator 现已废弃。相反, 请使用 GoogleDisplayVideo360CreateQueryOperator。此运算符会返回 query_id,而非 report_id
  • GoogleDisplayVideo360RunReportOperator 现已废弃。相反, 请使用 GoogleDisplayVideo360RunQueryOperator。此运算符会返回 query_idreport_id,而不仅仅是 report_id,并且需要 使用 query_id(而不是 report_id)作为参数。
  • 如需检查报告是否已准备就绪,请使用使用 query_idreport_id 参数的新 GoogleDisplayVideo360RunQuerySensor 传感器。已废弃的 GoogleDisplayVideo360ReportSensor 传感器仅需要 report_id
  • GoogleDisplayVideo360DownloadReportV2Operator 现在需要同时提供 query_idreport_id 参数。
  • GoogleDisplayVideo360DeleteReportOperator 中没有任何更改会影响您的 DAG。

次要范围名称限制

CVE-2023-29247(界面中的任务实例详情页面容易受到存储 XSS 攻击)

Airflow 2.0.x 至 2.5.x 版本中的 Airflow 界面容易受到以下攻击: CVE-2023-29247

如果您使用的 Cloud Composer 版本低于 2.4.2,并且 您的环境可能容易受到攻击,请阅读 以下说明和可能的解决方案。

在 Cloud Composer 中,对 Airflow 界面的访问权限 通过 IAM 进行保护 以及 Airflow 界面访问权限控制

这意味着,为了利用 Airflow 界面漏洞,攻击者首先需要获得对您的项目的访问权限以及必要的 IAM 权限和角色。

解决方案:

删除 Cloud Composer 2 Composer 环境后,Airflow 监控 DAG 不会重新创建

如果 Airflow 监控 DAG 被用户删除,或者使用 composer-2.1.4-airflow-2.4.3 从 Composer 环境中的存储桶中移出,则系统不会自动重新创建该 DAG。

解决方案:

  • 此问题已在 composer-2.4.2-airflow-2.5.3 等较高版本中得到修复。建议的方法是将环境升级到较新版本。
  • 环境升级的替代或临时解决方法是,从具有相同版本的其他环境中复制 airflow_monitoring DAG。

如果启用了 Sentry,升级操作可能会失败

Cloud Composer 环境的升级操作可能会失败 如果您在环境中配置了 Sentry,并设置了 [sentry]sentry_on,则 设为 true

解决方案:

  • 在您的环境中关闭 Sentry,执行升级,然后配置 再次侦查。

无法减少 Cloud SQL 存储空间

Cloud Composer 使用 Cloud SQL 运行 Airflow 数据库。超过 则 Cloud SQL 实例的磁盘存储空间可能会增加, 会扩展以适应 Cloud SQL 操作所存储的数据, Airflow 数据库不断增大。

无法缩减 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 任务实例成功完成 可以标记为 FAILED

如果出现这种情况,通常是由环境更新或 或由 GKE 维护来执行

注意:该问题本身并不表明环境存在任何问题,也不会导致任务执行出现任何实际失败。

此问题已在 Cloud Composer 2.6.5 或更高版本中得到修复。

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

在极少数情况下,与 Compute Engine 元数据服务器的通信缓慢可能会导致 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 中,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 包大小图表
图 3. 不连续的 DAG 解析时间和 DAG 数据袋大小图(点击可放大)

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

任务日志出现延迟

此已知问题适用于 Cloud Composer 3。

具体情况:

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

原因:

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

解决方案

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

后续步骤