Managed Airflow(第 3 代) | Managed Airflow(第 2 代) | Managed Airflow(旧版第 1 代)
本页面列出了 Managed Airflow 的已知问题。如需了解问题修复,请参阅版本说明。
某些问题会影响早期版本,可以通过升级环境来解决。
Pod 和服务部分支持非 RFC 1918 地址范围
Managed Airflow 依赖于 GKE 为 Pod 和 Service 提供对非 RFC 1918 地址的支持。Managed Airflow 仅支持以下非 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
更新期间添加的环境标签未完全传播
更新环境标签时,这些标签不会应用于环境集群中的 Compute Engine 虚拟机。作为解决方法,您可以手动应用标签。
在强制执行组织政策限制条件 constraints/compute.disableSerialPortLogging 的情况下,无法创建 Managed Airflow 环境
如果对目标项目强制执行 constraints/compute.disableSerialPortLogging 组织政策,则 Managed Airflow 环境创建会失败。
诊断
要确定您是否受到此问题影响,请按以下步骤操作:
前往Google Cloud 控制台中的 GKE 菜单。 访问 GKE 菜单
然后,选择新创建的集群。检查是否存在以下错误:
Not all instances running in IGM after 123.45s.
Expect <number of desired instances in IGM>. Current errors:
[CONDITION_NOT_MET]: Instance '<generated instance name>' creation failed:
Constraint constraints/compute.disableSerialPortLogging violated for
project <target project number>.
解决方法:
在将要创建 Managed Airflow 环境的项目中停用组织政策。
即使父资源(组织或文件夹)启用了组织政策,您也始终可以在项目级层停用组织政策。如需了解详情,请参阅为布尔值限制条件自定义政策页面。
使用排除过滤器
使用串行端口日志的排除过滤器可以实现与停用组织政策同样的目标,因为 Logging 中将会有串行控制台日志。如需了解详情,请参阅排除过滤器页面。
使用 Deployment Manager 管理受 VPC Service Controls 保护的 Google Cloud 资源
Managed Airflow(旧版第 1 代)和 Managed Airflow(第 2 代)2.0.x 版使用 Deployment Manager 创建 Managed Airflow 环境的组件。
在 2020 年 12 月,您可能收到了相关信息,提示您可能需要执行额外的 VPC Service Controls 配置,才能使用 Deployment Manager 管理受 VPC Service Controls 保护的资源。
我们想澄清一点:如果您使用的是 Managed Airflow,并且没有直接使用 Deployment Manager 来管理 Deployment Manager 公告中提到的 Google Cloud 资源,则无需采取任何行动。
Deployment Manager 显示有关不受支持的功能的信息
您可能会在 Deployment Manager 标签页中看到以下警告:
The deployment uses actions, which are an unsupported feature. We recommend
that you avoid using actions.
对于由 Managed Airflow 拥有的 Deployment Manager 部署,您可以忽略此警告。
无法删除集群已被删除的环境
此问题会出现在 Managed Airflow(旧版第 1 代)和 Managed Airflow(第 2 代)2.0.x 版中。
如果您在删除环境本身之前删除了环境的 GKE 集群,则尝试删除环境会导致以下错误:
Got error "" during CP_DEPLOYMENT_DELETING [Rerunning Task. ]
如需在环境的集群已被删除时删除该环境,请执行以下操作:
在 Google Cloud 控制台中,前往 Deployment Manager 页面。
查找所有带有以下标签的部署:
goog-composer-environment:<environment-name>goog-composer-location:<environment-location>。
您应该会看到两个部署带有所述标签:
- 名为
<environment-location>-<environment-name-prefix>-<hash>-sd的部署 - 名为
addons-<uuid>的部署
手动删除仍在这两个部署中列出和存在于项目中的资源(例如,Pub/Sub 主题和订阅)。为此,请执行以下操作:
选择部署。
点击删除。
选择删除这 2 个部署及其创建的虚拟机、负载平衡器和磁盘等所有资源选项,然后点击全部删除。
删除操作失败,但剩余资源将被删除。
使用以下任一选项删除部署:
在 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
属于“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 和任务处理。
我们正在努力改进 Managed Airflow 服务,以从 Airflow 日志中移除这些警告。
在将 Identity-Aware Proxy API 添加到 VPC Service Controls 边界的项目中,环境创建失败
在启用了 VPC Service Controls 的项目中,cloud-airflow-prod@ 账号需要安全边界中的显式访问权限才能创建环境。
如需创建环境,您可以使用以下解决方案之一:
请勿将 Cloud Identity-Aware Proxy API 和 Identity-Aware Proxy TCP API 添加到安全边界。
在 YAML 条件文件中使用以下配置,将
cloud-airflow-prod@服务账号添加为安全边界的成员:- members: - serviceAccount:cloud-airflow-prod@
当 compute.vmExternalIpAccess 政策处于停用状态时,Managed Airflow 环境创建或升级会失败
此问题适用于 Managed Airflow(旧版第 1 代)和 Managed Airflow(第 2 代)环境。
在公共 IP 模式下配置的 Managed Airflow 拥有的 GKE 集群需要为其虚拟机提供外部连接。因此,compute.vmExternalIpAccess 政策不能禁止创建具有外部 IP 地址的虚拟机。如需详细了解此组织政策,请参阅组织政策限制条件。
上传的 DAG 文件的首次 DAG 运行有多个失败的任务
当您上传某个 DAG 文件时,有时针对该文件的首次 DAG 运行的前几个任务会失败,并显示 Unable to read remote log... 错误。出现此问题的原因是 DAG 文件在环境的存储分区、Airflow 工作器和环境的 Airflow 调度器之间同步。如果调度器获取 DAG 文件并将其调度为由工作器执行,并且工作器还没有 DAG 文件,则任务执行会失败。
为了缓解此问题,默认情况下,具有 Airflow 2 的环境配置为对失败的任务执行两次重试。如果任务失败,系统会重试两次, 每次间隔 5 分钟。
关于从 GKE 版本中移除对已弃用 Beta 版 API 的支持的公告
Managed Airflow 管理底层 Managed Airflow 拥有的 GKE 集群。除非您在 DAG 和代码中显式使用此类 API,否则可以忽略有关 GKE API 弃用的公告。Managed Airflow 会在必要时负责所有迁移。
Managed Airflow 不应受 Apache Log4j 2 漏洞 (CVE-2021-44228) 影响
针对 Apache Log4j 2 漏洞 (CVE-2021-44228),Managed Airflow 开展了详细调查,我们认为 Managed Airflow 不会受到此漏洞的影响。
访问环境的 Cloud Storage 存储桶时,Airflow 工作器或调度器可能会遇到问题
Managed Airflow 使用 gcsfuse 访问环境存储桶中的 /data 文件夹,并将 Airflow 任务日志保存到 /logs 目录(如果已启用)。如果 gcsfuse 过载或环境的存储桶不可用,您可能会遇到 Airflow 任务实例失败,并在 Airflow 日志中看到 Transport endpoint is not connected 错误。
解决方案:
- 禁止将日志保存到环境的存储桶。如果环境是使用 Managed Airflow 2.8.0 或更高版本创建的,则此选项默认处于停用状态。
- 升级到 Managed Airflow 2.8.0 或更高版本。
- 减少
[celery]worker_concurrency,并增加 Airflow 工作器数量。 - 减少 DAG 代码中生成的日志量。
- 遵循建议和最佳实践来实现 DAG 并启用任务重试。
更改插件后,Airflow 界面有时有时不重新加载插件
如果插件包含多个会导入其他模块的文件,则 Airflow 界面可能无法识别应该重新加载插件的情况。在这种情况下,请重启环境的 Airflow Web 服务器。
环境的集群中有处于“不可调度”状态的工作负载
此已知问题仅适用于 Managed Airflow(第 2 代)。
在 Managed Airflow(第 2 代)中,创建环境后,环境集群中的多个工作负载仍处于不可调度状态。
当环境扩容时,系统会创建新的工作器 Pod,并且 Kubernetes 会尝试运行这些 Pod。如果没有可用于运行这些 Pod 的空闲资源,则工作器 Pod 会被标记为不可调度。
在这种情况下,集群自动扩缩器会添加更多节点,这需要几分钟时间。在完成之前,Pod 会保持不可调度状态,并且不会运行任何任务。
名为 composer-gcsfuse 和 composer-fluentd 的不可调度 DaemonSet 工作负载无法在不存在 Airflow 组件的节点上启动,但不会影响您的环境。
如果此问题持续很长时间(超过 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 服务器。
(仅限 Managed Airflow [第 3 代])连接问题。如果 Airflow 界面永久不可用,并且生成了超时或 504 错误,请确保您的环境可以访问
*.composer.googleusercontent.com。(仅限 Managed Airflow [第 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 服务器需要先同步配置文件。检查 Web 服务器日志中是否有类似于
GCS sync exited with 1: gcloud storage cp gs://<bucket-name>/airflow.cfg /home/airflow/gcs/airflow.cfg.tmp或GCS sync exited with 1: gcloud storage cp gs://<bucket-name>/env_var.json.cfg /home/airflow/gcs/env_var.json.tmp的日志条目。如果您看到这些出错提示,请检查出错提示中提到的文件是否仍存在于环境的存储桶中。如果这些文件被意外移除(例如,由于配置了保留政策),您可以将其恢复:
在您的环境中设置新的环境变量。您可以使用任何变量名称和值。
替换 Airflow 配置选项。您可以使用不存在的 Airflow 配置选项。
替换 [webserver]analytics_tool 后访问 Airflow 界面时出现错误 500
在具有 Airflow 2 的环境中,如果您替换 [webserver]analytics_tool Airflow 配置选项,以将匿名 Airflow 界面使用情况数据路由到分析服务(例如 Google Analytics、Segment、MetaRouter 或 Matomo),则在环境更新成功后访问 Airflow 界面可能会返回 (500) Internal Server Error 响应,并在 Airflow Web 服务器日志中显示以下错误之一:
airflow.exceptions.AirflowConfigException: section/key [webserver/analytics_id] not found in config
airflow.exceptions.AirflowConfigException: section/key [webserver/analytics_url] not found in config
在 Airflow 2 中设置 [webserver]analytics_tool 时,Airflow Web 服务器要求在呈现 Airflow 界面时也定义 [webserver] 部分中的配套分析选项。
在 Airflow 3 中,[webserver]analytics_tool、[webserver]analytics_id 和 [webserver]analytics_url 配置选项已被移除。
解决方案:
- 移除
[webserver]analytics_toolAirflow 配置选项的替换,或 - 同时指定所有必需的 Airflow 配置选项:
[webserver]analytics_tool[webserver]analytics_id[webserver]analytics_url(在 Airflow 2.9 及更高版本中是必需的,即使您的分析工具不使用自定义网址也是如此)
将鼠标悬停在树状视图中的任务实例上会抛出未捕获的 TypeError
在 Airflow 2 中,使用非默认时区时,Airflow 界面中的树状视图有时可能无法正常工作。如需解决此问题,请在 Airflow 界面中明确配置时区。
Airflow 2.2.3 或更低版本中的 Airflow 界面容易受到 CVE-2021-45229 的影响
如 CVE-2021-45229 中所述,“使用配置触发 DAG”屏幕容易受到通过 origin 查询参数发起的 XSS 攻击。
建议:升级到支持 Airflow 2.2.5 的最新 Managed Airflow 版本。
工作器需要的内存比之前的 Airflow 版本更多
症状:
在 Managed Airflow(第 2 代)环境中,Airflow 工作器的所有环境集群工作负载都处于
CrashLoopBackOff状态,并且不执行任务。您还可以查看如果您受到此问题的影响,系统会生成OOMKilling警告。此问题可能会阻止环境升级。
原因:
- 如果您为
[celery]worker_concurrencyAirflow 配置选项使用自定义值,并为 Airflow 工作器使用自定义内存设置,则当资源消耗接近限制时,您可能会遇到此问题。 - 与早期版本中的工作器相比,Airflow 2.6.3(搭配 Python 3.11)中的 Airflow 工作器内存要求高出 10%。
- 与 Airflow 2.2 或 Airflow 2.1 中的工作器相比,Airflow 2.3 及更高版本中的 Airflow 工作器内存要求高 30%。
解决方案:
- 移除
worker_concurrency的替换值,以便 Managed Airflow 自动计算此值。 - 如果您为
worker_concurrency使用自定义值,请将其设置为较低的值。您可以将自动计算的值作为起点。 - 或者,您也可以增加 Airflow 工作器的可用内存量。
- 如果您因该问题而无法将环境升级到更高版本,请在升级前应用其中一种建议的解决方案。
使用 Cloud Run functions 通过专用网络触发 DAG
Managed Airflow 不支持通过专用网络使用 VPC 连接器通过 Cloud Run functions 触发 DAG。
建议:使用 Cloud Run functions 在 Pub/Sub 上发布消息。此类事件可以促使 Pub/Sub 传感器触发 Airflow DAG,或实现基于可延期运算符的方法。
Scheduler 和 Worker 中的空文件夹
Managed Airflow 不会主动从 Airflow 工作器和调度器中移除空文件夹。当这些文件夹存在于存储桶中并最终被移除时,环境存储桶同步过程可能会创建此类实体。
建议:调整 DAG,使其准备好跳过此类空文件夹。
当这些组件重启时(例如,由于环境集群中的缩容或维护操作),这些实体最终会从 Airflow 调度器和工作器的本地存储空间中移除。
支持 Kerberos
Managed Airflow 不支持 Airflow Kerberos 配置。
Managed Airflow(第 2 代)和 Managed Airflow(第 3 代)支持计算类
Managed Airflow(第 3 代)和 Managed Airflow(第 2 代)仅支持通用 计算类。这意味着无法运行请求其他计算类(例如均衡或横向扩容)的 Pod。
通用类允许运行请求最多 110 GB 内存和最多 30 个 CPU 的 Pod(如计算类最大请求数中所述)。
如果您想使用基于 ARM 的架构或需要更多 CPU 和内存,则必须使用其他计算类,Managed Airflow(第 3 代)和 Managed Airflow(第 2 代)集群不支持这些计算类。
建议:使用 GKEStartPodOperator 在支持所选计算类的其他集群上运行 Kubernetes Pod。如果您运行需要其他计算类的自定义 Pod,则它们也必须在非 Managed Airflow 集群上运行。
为 Google Campaign Manager 360 运营商提供支持
2.1.13 之前的 Managed Airflow 版本中的 Google Campaign Manager Operator 基于已弃用的 Campaign Manager 360 v3.5 API,其停用日期为 2023 年 5 月 1 日。
如果您使用 Google Campaign Manager 运算符,请将环境升级到 Managed Airflow 2.1.13 或更高版本。
对 Google Display & Video 360 运营商的支持
2.1.13 之前的 Managed Airflow 版本中的 Google Display & Video 360 Operator 基于 Display & Video 360 v1.1 API,该 API 已弃用,其停用日期为 2023 年 4 月 27 日。
如果您使用 Google Display and Video 360 运算符,请将环境升级到 Managed Airflow 2.1.13 或更高版本。除此之外,您可能还需要更改 DAG,因为某些 Google Display & Video 360 运算符已弃用并替换为新运算符。
GoogleDisplayVideo360CreateReportOperator现已废弃。而是改用GoogleDisplayVideo360CreateQueryOperator。此运算符返回query_id,而不是report_id。GoogleDisplayVideo360RunReportOperator现已废弃。而是改用GoogleDisplayVideo360RunQueryOperator。此运算符返回query_id和report_id,而不仅仅是report_id,并且需要query_id而不是report_id作为参数。- 如需检查报告是否已准备就绪,请使用新的
GoogleDisplayVideo360RunQuerySensor传感器,该传感器使用query_id和report_id参数。已弃用的GoogleDisplayVideo360ReportSensor传感器只需要report_id。 GoogleDisplayVideo360DownloadReportV2Operator现在需要query_id和report_id参数。GoogleDisplayVideo360DeleteReportOperator中没有任何可能影响 DAG 的更改。
次要范围名称限制
CVE-2023-29247(界面中的任务实例详情页面容易受到存储型 XSS 攻击)
Airflow 2.0.x 到 2.5.x 版中的 Airflow 界面容易受到 CVE-2023-29247 的影响。
如果您使用的 Managed Airflow 版本低于 2.4.2,并且怀疑您的环境可能容易受到漏洞利用,请阅读以下说明和可能的解决方案。
在 Managed Airflow 中,对 Airflow 界面的访问权限受 IAM 保护,并受 Airflow 界面访问权限控制的约束。
这意味着,为了利用 Airflow 界面漏洞,攻击者首先需要获得对项目的访问权限以及必要的 IAM 权限和角色。
解决方案:
验证项目中的 IAM 权限和角色,包括分配给各个用户的 Managed Service for Apache Airflow 角色。确保只有获批的用户才能访问 Airflow 界面。
验证通过 Airflow 界面访问权限控制机制分配给用户的角色(这是一种单独的机制,可提供对 Airflow 界面的更精细访问权限)。确保只有获批的用户才能访问 Airflow 界面,并且所有新用户都注册了适当的角色。
考虑使用 VPC Service Controls 进行额外的强化。
Managed Airflow(第 2 代)Composer 环境的 Airflow 监控 DAG 在删除后不会重新创建
在具有 composer-2.1.4-airflow-2.4.3 的环境中,如果用户删除了 Airflow 监控 DAG 或将其从存储桶中移出,则系统不会自动重新创建该 DAG。
解决方案:
- 此问题已在后续版本(例如 composer-2.4.2-airflow-2.5.3)中得到修复。建议的方法是将环境升级到较新版本。
- 环境升级的替代或临时解决方法是从具有相同版本的其他环境复制 airflow_monitoring DAG。
无法缩减 Cloud SQL 存储空间
Managed Airflow 使用 Cloud SQL 运行 Airflow 数据库。随着时间的推移,Cloud SQL 实例的磁盘存储空间可能会增加,因为当 Airflow 数据库增长时,磁盘会扩容以适应 Cloud SQL 操作存储的数据。
无法缩减 Cloud SQL 磁盘大小。
作为一种解决方法,如果您想使用最小的 Cloud SQL 磁盘大小,可以使用快照重新创建 Managed Airflow 环境。
从 Cloud SQL 中移除记录后,数据库磁盘用量指标并未减少
关系型数据库(例如 Postgres 或 MySQL)在删除或更新行时不会实际移除这些行。而是将其标记为“死元组”,以保持数据一致性并避免阻塞并发事务。
MySQL 和 Postgres 都实现了在删除记录后回收空间的机制。
虽然可以强制数据库回收未使用的磁盘可用空间,但这是一项资源密集型操作,还会锁定数据库,导致 Managed Airflow 无法使用。因此,建议您依靠构建机制来回收未使用的空间。
禁止访问:发生了授权错误
如果此问题影响到用户,访问权限遭拒:授权错误对话框会包含 Error 400: admin_policy_enforced 消息。
如果在 Google Workspace 中启用了 API 控件 > 未配置的第三方应用 > 不允许用户访问任何第三方应用选项,并且未明确允许 Managed Airflow 应用中的 Apache Airflow,则用户无法访问 Airflow 界面,除非他们明确允许该应用。
如需允许访问,请执行允许在 Google Workspace 中访问 Airflow 界面中提供的步骤。
访问 Airflow 界面时出现登录循环
此问题可能由以下原因引起:
如果 Chrome 企业进阶版 情境感知访问权限绑定与依赖于设备属性的访问权限级别搭配使用,并且 Managed Airflow 应用中的 Apache Airflow 未豁免,则由于登录循环,无法访问 Airflow 界面。如需允许访问,请执行在情境感知访问权限绑定中允许访问 Airflow 界面中提供的步骤。
如果在保护项目的 VPC Service Controls 边界中配置了入站流量规则,并且允许访问 Managed Airflow 服务的入站流量规则使用
ANY_SERVICE_ACCOUNT或ANY_USER_ACCOUNT身份类型,则用户无法访问 Airflow 界面,最终会陷入登录循环。如需详细了解如何应对这种情况,请参阅在 VPC Service Controls 入站流量规则中允许访问 Airflow 界面。
过去成功的任务实例被标记为 FAILED
在某些情况下和极少数场景中,过去成功的 Airflow 任务实例可能会被标记为 FAILED。
如果发生这种情况,通常是由环境更新或升级操作或 GKE 维护触发的。
注意:问题本身并不表示环境中存在任何问题,也不会导致任务执行出现任何实际故障。
此问题已在 Managed Airflow 2.6.5 或更高版本中得到修复。
Airflow 组件在与其他 Managed Airflow 配置部分通信时遇到问题
此问题仅影响 Managed Airflow(第 2 代)2.10.2 及更早版本。
在极少数情况下,与 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
解决方案:
- 将环境升级到更高版本的 Managed Airflow。此问题已从 Managed Airflow 2.11.0 版开始得到解决。
Airflow Web 服务器中不提供 /data 文件夹
在 Managed Airflow(第 2 代)和 Managed Airflow(第 3 代)中,Airflow Web 服务器主要用作只读组件,Managed Airflow 不会将 data/ 文件夹同步到此组件。
有时,您可能希望在所有 Airflow 组件(包括 Airflow Web 服务器)之间共享通用文件。
解决方案:
将要与 Web 服务器共享的文件封装到 PYPI 模块中,并将其作为常规 PYPI 软件包进行安装。在环境中安装 PYPI 模块后,这些文件会添加到 Airflow 组件的映像中,并可供这些组件使用。
将文件添加到
plugins/文件夹中。此文件夹会同步到 Airflow Web 服务器。
监控中的非连续 DAG 解析时间和 DAG 包大小图表
监控信息中心上的非连续 DAG 解析时间和 DAG 包大小图表表示 DAG 解析时间过长(超过 5 分钟)的问题。
解决方案:我们建议将 DAG 总解析时间控制在 5 分钟以内。如需缩短 DAG 解析时间,请遵循 DAG 编写指南。
Cloud Logging 中缺少 Managed Airflow 组件日志
负责将 Airflow 组件的日志上传到 Cloud Logging 的环境组件存在问题。此 bug 有时会导致 Airflow 组件缺少 Managed Airflow 级日志。在 Kubernetes 组件级别,仍可使用相同的日志。
问题发生频率:极少、偶发
原因:
负责将日志上传到 Cloud Logging 的 Managed Airflow 组件行为不正确。
解决方案:
将环境升级到 Managed Airflow 2.10.0 版或更高版本。
在早期版本的 Managed Airflow 中,如果您遇到这种情况,临时解决方法是启动一项 Managed Airflow 操作,以重启缺少日志的组件。
不支持将环境的集群切换到 GKE Enterprise Edition
此备注适用于 Managed Airflow 1 和 Managed Airflow 2。
Managed Airflow 环境的 GKE 集群是在 GKE Standard Edition 中创建的。
自 2024 年 12 月起,Managed Airflow 服务不支持在企业版中使用集群创建 Managed Airflow 环境。
Managed Airflow 环境未通过 GKE Enterprise Edition 测试,并且具有不同的结算模式。
我们将在 2025 年第 2 季度进一步沟通 GKE Standard 版与 Enterprise 版的相关事宜。
Airflow 组件在与其他 Managed Airflow 配置部分通信时遇到问题
在某些情况下,由于 DNS 解析失败,Airflow 组件在与 Managed Airflow 环境之外的其他 Managed Airflow 组件或服务端点通信时可能会遇到问题。
症状:
Airflow 组件(例如 Airflow 调度器、工作器或 Web 服务器)的日志中可能会出现以下错误:
google.api_core.exceptions.ServiceUnavailable: 503 DNS resolution failed ...
... Timeout while contacting DNS servers
或
Could not access *.googleapis.com: HTTPSConnectionPool(host='www.googleapis.com', port=443): Max retries exceeded with url: / (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0x7c5ef5adba90>: Failed to resolve 'www.googleapis.com' ([Errno -3] Temporary failure in name resolution)"))
或
redis.exceptions.ConnectionError: Error -3 connecting to
airflow-redis-service.composer-system.svc.cluster.local:6379.
Temporary failure in name resolution.
可能的解决方案:
升级到 Managed Airflow 2.9.11 或
设置以下环境变量:
GCE_METADATA_HOST=169.254.169.254。
在项目的结算账号被删除或停用,或者 Cloud Composer API 被停用后,环境处于错误状态
受这些问题影响的 Managed Airflow 环境无法恢复:
- 项目的结算账号被删除或停用后,即使后来关联了其他账号,也是如此。
- 在项目中停用 Cloud Composer API 之后,即使后来又启用了该 API。
您可以执行以下操作来解决此问题:
您仍然可以访问存储在环境存储桶中的数据,但环境本身不再可用。您可以创建新的 Managed Airflow 环境,然后转移 DAG 和数据。
如果您想执行任何会导致环境无法恢复的操作,请务必备份数据,例如创建环境快照。这样,您就可以创建另一个环境,并通过加载此快照来转移其数据。
有关环境集群的 Pod 中断预算的警告
您可以在 Managed Airflow 环境集群的 GKE 界面中看到以下警告:
GKE can't perform maintenance because the Pod Disruption Budget allows
for 0 Pod evictions. Update the Pod Disruption Budget.
A StatefulSet is configured with a Pod Disruption Budget but without readiness
probes, so the Pod Disruption Budget isn't as effective in gauging application
readiness. Add one or more readiness probes.
这些警告无法消除。我们正在努力阻止这些警告的生成。
可能的解决方案:
- 在问题解决之前,请忽略这些警告。
无法移除 Airflow 连接中的字段值
原因:
Apache Airflow 界面存在限制,无法将连接字段更新为空值。当您尝试这样做时,系统会还原到之前保存的设置。
可能的解决方案:
虽然 Apache Airflow 2.10.4 版包含永久性修复,但对于使用早期版本的用户,也有临时解决方法。这涉及删除连接,然后重新创建连接,具体而言,就是将必填字段留空。建议使用命令行界面删除连接:
gcloud composer environments run ENVIRONMENT_NAME \
--location LOCATION \
connections delete -- \
CONNECTION_ID
删除连接后,使用 Airflow 界面重新创建连接,确保您打算留空的字段确实留空。您还可以使用 Google Cloud CLI 运行 connections add Airflow CLI 命令来创建连接。
如果 [core]execute_tasks_new_python_interpreter 设置为 True,则系统不会收集 Airflow 任务的日志
如果 [core]execute_tasks_new_python_interpreter Airflow 配置选项设置为 True,则 Managed Airflow 不会收集 Airflow 任务的日志。
可能的解决方法:
- 移除此配置选项的替换设置,或将其值设置为
False。
指标中缺少数据点,ValueError:无法在没有存储桶名称的情况下确定路径
使用 Managed Airflow(第 2 代)2.16.0 和 2.16.1 版的环境可能会遇到指标报告方面的已知问题。您可能会在报告的指标中看到一些跳过的数据点,并在环境日志中看到有关 airflow-monitoring pod 重启的出错提示。
出错提示示例:ValueError: Cannot determine path without bucket name error。
此问题不会影响环境的功能。环境仍可正常运行,并且环境健康状况和监控信息会正确报告。您可以忽略这些出错提示。
多个 google-api-core 软件包版本中的环境性能下降
2.28.0 到 2.30.2 之间的 google-api-core 预安装软件包版本可能会导致环境性能下降,从而导致执行任务的时间更长,以及将任务从已加入队列状态移至正在执行状态的时间更长。
受影响的Managed Airflow(第 3 代) build:
- composer-3-airflow-3.1.7-build.0 至 composer-3-airflow-3.1.7-build.5
- composer-3-airflow-3.1.0-build.5 至 composer-3-airflow-3.1.0-build.10
- composer-3-airflow-2.11.1-build.0
- composer-3-airflow-2.10.5-build.22 至 composer-3-airflow-2.10.5-build.33
- composer-3-airflow-2.9.3-build.42 至 composer-3-airflow-2.9.3-build.53
受影响的Managed Airflow(第 2 代) build:
- composer-2.16.10-airflow-2.11.1
- composer-2.16.0-airflow-2.10.5 至 composer-2.16.10-airflow-2.10.5
- composer-2.16.0-airflow-2.9.3 至 composer-2.16.10-airflow-2.9.3
我们建议您将环境升级到以下版本,这些版本包含已修复或不存在该问题的软件包版本:
- composer-3-airflow-3.1.7-build.7 及更高版本
- composer-3-airflow-2.11.1-build.3 及更高版本
- composer-3-airflow-2.10.5-build.36 及更高版本
- composer-3-airflow-2.9.3-build.54(包含 2.27.0)
- composer-2.17.0-airflow-2.11.1 及更高版本
- composer-2.17.0-airflow-2.10.5 及更高版本
- composer-2.16.11-airflow-2.11.1(包含 2.27.0)
- composer-2.16.11-airflow-2.10.5(包含 2.27.0)
- composer-2.16.11-airflow-2.9.3(包含 2.27.0)
作为解决方法,您可以通过将 >=2.30.3 指定为所需版本,手动将更高版本的 google-api-core 软件包安装到受影响的环境。