【问题标题】:are updated health checks causing App Engine deployment to fail?更新的运行状况检查是否会导致 App Engine 部署失败?
【发布时间】:2018-02-18 00:21:51
【问题描述】:

我们将我们的 google 应用引擎健康检查从旧版本更新到新版本,现在我们的部署失败了。该项目的其他任何内容都没有改变。我们测试了默认设置,然后扩展了检查以防万一。

这是错误: ERROR: (gcloud.app.deploy) Error Response: [4] Your deployment has failed to become healthy in the allotted time and therefore was rolled back. If you believe this was an error, try adjusting the 'app_start_timeout_sec' setting in the 'readiness_check' section.

这是我们的 app.yaml:

liveness_check:
   check_interval_sec: 120
   timeout_sec: 40
   failure_threshold: 5
   success_threshold: 5
   initial_delay_sec: 500

readiness_check:
  check_interval_sec: 120
  timeout_sec: 40
  failure_threshold: 5
  success_threshold: 5
  app_start_timeout_sec: 1500

不幸的是,无论配置如何,就绪性和活动性检查都会抛出 404。

什么可能导致问题?我们该如何调试呢? 是否可以回滚到旧版运行状况检查?

【问题讨论】:

  • 更新:更新的健康检查导致问题。我们刚刚更改了 app.yaml 以使用旧版运行状况检查,并且我们能够顺利部署。
  • 如何重新使用旧版运行状况检查?命令gcloud beta app update --split-health-checks 只执行一种方式。
  • 现在(直到 2018-09-30)您可以通过运行 gcloud app update --no-split-health-checks 然后重新部署来回滚到旧的运行状况检查。请注意,旧的健康检查将在 2018 年 9 月结束时消失。来源:cloud.google.com/appengine/docs/flexible/python/…
  • 新部署的类似问题!新部署不存在恢复到旧版运行状况检查的选项,而且运行状况检查似乎是一个长期存在的问题 - 再次在这里提出:stackoverflow.com/questions/62735687/…

标签: google-app-engine google-cloud-platform


【解决方案1】:

这通常是由于应用程序仍在读取旧版运行状况检查标志和/或使用 gcloud app deploy 部署应用程序而未先启用更新的运行状况检查时引起的。您可以通过以下方式检查:

1- 确保您的 app.yaml 中不存在旧版 health_check 标志。

2- 运行gcloud beta app describe 以查看splitHealthChecks 标志是否在featureSettings 下设置为true。

默认情况下,来自更新的运行状况检查的 HTTP 请求不会转发到您的应用程序容器。如果您想将健康检查扩展到您的应用程序,请指定用于活动检查或就绪检查的路径。

然后您可以使用gcloud beta app update --split-health-checks --project [your-project-id] 启用更新的运行状况检查。请参阅this public issue tracker 或这篇关于Updated Health Checks 的文章了解更多详情。

【讨论】:

  • 同一个项目下有两个应用怎么办?我有一个在 GAE 经典上运行的 app.yaml 和一个在灵活上运行的 vm.yamlgcloud beta app update 对这些有什么影响?
  • @speedplane 只需在 app.yaml 中指定常规的旧健康检查。这就是我为使它发挥作用所做的。 health_check: enable_health_check: True check_interval_sec: 5 timeout_sec: 4 unhealthy_threshold: 2 healthy_threshold: 2
  • 拆分健康检查设置是项目范围的。但它不适用于 App Engine 标准,仅适用于柔性环境。 cloud.google.com/appengine/docs/flexible/python/…
  • 嗨 Kenworth,“默认情况下,来自更新的健康检查的 HTTP 请求不会转发到您的应用程序容器。如果您想将健康检查扩展到您的应用程序,那么指定一个路径liveness checks or readiness checks。”,我如何“指定活性检查或就绪检查的路径”?
【解决方案2】:

就我而言,我通过手动增加内存分配解决了这个问题?

resources:
    cpu: 1
    memory_gb: 2
    disk_size_gb: 10

在谷歌论坛中找到了这个解决方案: https://groups.google.com/forum/#!topic/google-appengine/Po_-SkC5DOE

【讨论】:

  • 在花了一个小时左右的时间使用健康检查设置并挖掘日志文件后,这个解决方案立即奏效了。
【解决方案3】:

对于那些想要迁移到拆分运行状况检查的默认设置的用户,请按照以下步骤操作:

1) 从 app.yaml 文件中删除 health_checkliveness_checkreadiness_check 部分

2) 部署到更新的版本,这很重要。因此,例如,如果您的当前版本是 production,请在命令 gcloud app deploy --version [new-version-name] 中将其更改为 prod 之类的其他内容

【讨论】:

  • 如果上述方法不起作用,请同时运行此命令gcloud app update --split-health-checks --project [YOUR_PROJECT_ID]
  • 大多数人会到达这里,因为它不适用于默认设置
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-12
  • 2018-06-05
  • 1970-01-01
  • 2016-11-30
  • 1970-01-01
  • 1970-01-01
  • 2021-09-25
相关资源
最近更新 更多