Google Cloud Composer v2 健康检查似乎是假的 negative/flaky

Google Cloud Composer v2 health-check seems to be false negative/flaky

我们创建了一个 Composer v2 环境以从 Google Cloud Composer v1 迁移。 所有 DAG 代码都已调整,我们使用的是迄今为止最新的可用图像 composer-2.0.0-preview.5-airflow-2.1.4

我们注意到,尽管 CPU 很轻松并且内存充足,但 Web server health 却不稳定(环境监控页面上每隔几分钟红/绿交替一次)。

为了进行测试,我删除了 K8s 中网络服务器 pod 上的 K8s 健康检查(以及启动探测)。然后我发现有一个调用来自 airflow-monitoring pod (10.63.129.6) 的 IP,此后不久 gunicorn 进程收到一个 HUP:

airflow-webserver 10.63.129.6 - - [17/Nov/2021:12:56:03 +0000] "GET /_ah/health HTTP/1.1" 200 187 "-" "python-requests/2.24.0"
airflow-webserver [2021-11-17 12:56:05 +0000] [57] [INFO] Handling signal: hup
airflow-webserver [2021-11-17 12:56:05 +0000] [57] [INFO] Hang up: Master
airflow-webserver [2021-11-17 12:56:05 +0000] [1083] [INFO] Booting worker with pid: 1083
airflow-webserver [2021-11-17 12:56:05 +0000] [1084] [INFO] Booting worker with pid: 1084
airflow-webserver [2021-11-17 12:56:05 +0000] [1051] [INFO] Worker exiting (pid: 1051)
airflow-webserver [2021-11-17 12:56:05 +0000] [1052] [INFO] Worker exiting (pid: 1052)
airflow-webserver [2021-11-17 12:56:05 +0000] [1085] [INFO] Booting worker with pid: 1085
airflow-webserver [2021-11-17 12:56:05 +0000] [1086] [INFO] Booting worker with pid: 1086
airflow-webserver [2021-11-17 12:56:07 +0000] [57] [WARNING] Worker with pid 1052 was terminated due to signal 15
airflow-webserver [2021-11-17 12:56:07 +0000] [57] [WARNING] Worker with pid 1051 was terminated due to signal 15

这种情况每分钟都会发生,因此网络服务器响应缓慢。 由于 airflow-monitoring pod 在 GKEAutopilot 的受保护命名空间中 运行,我不确定如何进一步调试它。

更新: 似乎这里有两件事在起作用,一个看起来像是 gcs-syncd pod 和 webserver 之间的竞争条件:

Removing file:///home/airflow/gcs/plugins/operators/__pycache__/trigger_emarsys_event_operator.cpython-38.pyc
{webserver_command.py:217} ERROR - [Errno 2] No such file or directory: '/home/airflow/gcs/plugins/operators/__pycache__/trigger_emarsys_event_operator.cpython-38.pyc'
{webserver_command.py:218} ERROR - Shutting down webserver

如果您配置了core:default_timezone气流配置,环境健康状况只是一个指标,不会对实际job/tasks执行产生任何影响。

您可以忽略健康状态,也可以删除配置以接受默认的 UTC 时区。

这是因为 Composer 运行 每 5 分钟生成一个名为 airflow_monitoring 的活动 DAG,并报告环境健康状况如下:

  • 当 DAG 运行 成功完成时,健康状态为 True。
  • 如果 DAG 运行 失败,则健康状态为 False。
  • 如果 DAG 没有完成,Composer 每 5 分钟轮询一次 DAG 的状态,如果发生一小时超时则报告 False。

禁用网络服务器的重新加载,当检测到插件更改时,问题已解决。每次 gcs-sync 发生时,这就是触发重启的原因。感谢@MateuszH 的提示!

[webserver]
reload_on_plugin_change=False

https://airflow.apache.org/docs/apache-airflow/stable/configurations-ref.html#reload-on-plugin-change