从旧版健康检查迁移到分组健康检查

自 2019 年 9 月 15 日起,如果您使用的是旧版健康检查,那么您的应用会继续运行并接收健康检查,但您无法部署该应用的新版本。

本页面介绍如何从旧版健康检查升级到分组健康检查

验证您的健康检查类型

要验证您的应用使用的健康检查的类型,请运行以下命令:

gcloud app describe

如果您的应用使用的是分组健康检查,则相应说明应包括以下信息:

featureSettings:
    splitHealthChecks: true

了解主要区别

在升级到分组健康检查之前,请考虑旧版健康检查与分组健康检查之间的以下几项重要差异:

  • 默认情况下,针对分组健康检查的 HTTP 请求不转发。相比之下,旧版健康检查默认转发到应用中的 /_ah/health 路径。

  • 如果应用健康状况良好并且已准备就绪,则转发的分组健康检查必须返回 200 OK旧版健康检查将以下 HTTP 代码视为健康状况良好:200301302303307401402403404405

如果您未指定活跃性检查路径就绪性检查路径,则默认情况下,分组健康检查只会确认虚拟机实例和 Docker 容器正在运行。只要这些条件成立,虚拟机就会继续接收流量并保持活跃状态,无论应用的内部状态如何。

相比之下,启用旧版健康检查后,如果应用的 /_ah/health 路径开始返回健康状况不佳的 HTTP 错误代码(例如 5XX),则旧版健康检查将失败,同时虚拟机将停止接收流量并重启。

如果您的应用依赖于默认的旧版健康检查行为,请相应地设置活跃性检查路径就绪性检查路径

转换旧版健康检查选项

您可以使用分组健康检查重写每个旧版健康检查选项,如下所示:

选项 在分组健康检查中保持相同的行为
enable_health_check 如果为 True 或未设置,请将 liveness_check.pathreadiness_check.path 配置为在应用运行状况良好时返回 200 OK 的应用路径。
check_interval_sec liveness_check.check_interval_secreadiness_check.check_interval_sec 配置为相同的值。
timeout_sec liveness_check.timeout_secreadiness_check.timeout_sec 配置为相同的值。
unhealthy_threshold readiness_check.failure_threshold 配置为相同的值。
healthy_threshold liveness_check.success_thresholdreadiness_check.success_threshold 配置为相同的值。
restart_threshold liveness_check.failure_threshold 配置为相同的值。请注意,check_interval_sec 选项值与 failure_threshold 选项值的乘积表示使运行状况不良的虚拟机宕机所需的时间。

启用分组健康检查

如需从旧版健康检查迁移到分组健康检查,同时避免出现数值较高的 5xx 状态代码,请完成以下步骤:

  1. 了解旧版健康检查和分组健康检查之间的重要差异

  2. 为应用中的每个版本转换旧版健康检查选项

    或者,您可以自定义每个版本的 app.yaml 文件中的 liveness_checkreadiness_check 部分。如需查看示例,请参阅活动性检查就绪性检查

  3. 运行以下命令:

    gcloud app update --split-health-checks --project [YOUR_PROJECT_ID]
  4. 如果您对旧版健康检查使用了自定义设置,则必须从 app.yaml 文件中移除 health_check 部分。

  5. 部署一个新的应用主版本,以开始使用活动性和就绪性健康检查。