【发布时间】:2020-09-19 11:17:25
【问题描述】:
我正在尝试在 Google App Engine 上上传一个 yesod Docker 容器。源码为here,Docker镜像为here。
我遵循Custom runtime quickstart 中的文档,当调用gcloud app deploy 时,应用程序在增加构建超时后构建良好,但容器在尝试启动时进行就绪检查或显示以下超时消息:
ERROR: (gcloud.app.deploy) Operation [apps/meeshkan-github-webhook-router/operations/xxxx-xxxx-xxxx] timed out. This operation may still be underway.
我尝试了几件事,包括手动准备检查、创建/_ah/health 端点以及将准备检查的超时时间一直增加到 1799 秒,但这些操作似乎都不起作用。
一个问题可能是容器的大小(它是 3.2gb),我可以尝试将其缩减,但只有在有人能够确认容器大小是导致部署问题的一个因素时,我才会这样做。除此之外,我不确定是什么导致了这个失败。 docker 镜像在我们的本地机器上启动良好。
提前感谢您的帮助和建议!
【问题讨论】:
-
我克隆了您共享的 GIT 存储库,将构建超时更改为 30 分钟,并在部署期间出现以下错误消息:
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. -
我完全不精通 Haskell,无法在这方面为您提供进一步的指导,但是您在应用程序中实现 split health checks 的方式存在问题,因为通过检查日志我在日志中注意到有很多 503 错误消息用于准备检查。
-
谢谢@DanielOcando!我尝试更改
app_start_timeout_sec并没有对结果产生影响。我阅读了您提供的文档,但我不确定阅读它是如何实现拆分健康检查的。我从文档中了解到不需要实施任何东西并且检查是自动的。您能告诉我如何使用 CLI 获取这些日志吗?我可以深入研究 503,看看是否可以修复它们。感谢您的帮助! -
请注意,您的应用程序实际上需要引入以下两个处理程序:
/liveness_check和/readiness_check,它们需要返回一个200响应。在app.yaml级别上,您需要包含相关的elements。我认为您可以参考Yesod Book,了解如何在您的应用程序上实现处理程序的细节(正如我解释的那样,我的 Haskell 知识有限)。 -
最后,请注意使用 /_ah/health 路径的运行状况检查现已弃用,您需要按照documentation 的这一部分了解如何实施拆分运行状况检查的迁移。
标签: google-app-engine google-cloud-platform yesod