Docker 拆分运行状况检查无法设置自定义路径
这最初是一条内部消息,可能涉及到我们的一些项目,但背景信息将非常有用,因此在本文中留下了对这些项目的参考 我们遇到了谷歌应用程序引擎的问题,阻止我们进行新的部署 错误消息是:Docker 拆分运行状况检查无法设置自定义路径,docker,google-app-engine,google-app-engine-python,app-engine-flexible,Docker,Google App Engine,Google App Engine Python,App Engine Flexible,这最初是一条内部消息,可能涉及到我们的一些项目,但背景信息将非常有用,因此在本文中留下了对这些项目的参考 我们遇到了谷歌应用程序引擎的问题,阻止我们进行新的部署 错误消息是: 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 thi
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.
这是一个令人惊讶的错误,尤其是因为我们直到最近才发现这个问题。今年早些时候,我们为准备新的Google App Engine split运行状况检查所做的更改似乎没有真正起作用,因此,当系统在9月15日(此处提到)被弃用时,从那时起就没有任何部署起作用。此处列出了运行状况检查规范:
错误消息引用了app\u start\u timout\u sec
设置,有关此设置的更多详细信息,请参见:。我不认为这是一个超时问题,因为我们的系统启动得相当快(少于默认的5分钟),所以我调查了应用程序版本的日志(从现在起,除非另有说明,否则我将讨论codeWOF生产系统)。版本只列出了“工作”版本,但当我在日志查看器中查看时,列出了所有不同的版本,包括失败的版本
通过以下app.yaml
日志显示此错误:
liveness_check:
path: "/gae/liveness_check"
readiness_check:
path: "/gae/readiness_check"
这证实了系统已成功启动,检查正在通过,但返回了错误的代码,是301重定向,而不是200重定向。但是,由于检查指向错误的URL,因此没有显示前缀
我认为重定向是由APPEND\u SLASH
设置或HTTP到HTTPS重定向引起的。我尝试了以下配置,得到了以下结果:
liveness_check:
path: "/liveness_check/"
readiness_check:
path: "/readiness_check/"
liveness_check:
path: "/liveness_check/"
readiness_check:
path: "/readiness_check/"
与上述错误相同,因此设置自定义路径似乎不会影响健康检查的发送位置。在所有日志记录消息中搜索自定义路径只返回一条消息(摘要如下):
所以这是第一件要研究的事情,正确设置自定义路径,我无法改变它
我读了所有StackOverflow的帖子,都在谈论应用程序引擎和拆分健康检查(只有不到10个条目),并尝试了所有建议的修复。这些措施包括:
使用gcloud app descripe--project codewof
检查拆分运行状况检查设置是否正确。
使用gcloud app update--split health checks--project codewof
设置拆分运行状况检查(再次)
我最后一次尝试的结果是非常有趣的。我删除了app.yaml
文件中的所有健康检查设置
文件()说明了以下内容:
liveness_check:
path: "/liveness_check/"
readiness_check:
path: "/readiness_check/"
liveness_check:
path: "/liveness_check/"
readiness_check:
path: "/readiness_check/"
默认情况下,来自运行状况检查的HTTP请求不会转发到应用程序容器。如果要将运行状况检查扩展到应用程序,请指定活动性检查或就绪性检查的路径。如果应用程序返回200 OK响应代码,则对应用程序的自定义运行状况检查被视为成功
这听起来像是在检查整个虚拟机,而不是其中运行的docker映像,部署工作正常
GET 200 0 B 2 ms GoogleHC/1.0 /readiness_check
GET 200 0 B 3 ms GoogleHC/1.0 /liveness_check
但是如果docker容器由于某种原因失败,Google应用程序引擎将不会知道有问题。我们需要研究这个场景,看看它到底意味着什么,我找不到任何确切的说明。然而,这允许我们进行紧急部署
我还测试了以下内容以跳过HTTPS重定向
settings/production.py
SECURE_REDIRECT_EXEMPT = [
r'^/?cron/.*',
r'^/?liveness_check/?$',
r'^/?readiness_check/?$',
]
我发现的最后一件令人困惑的事情是codewof dev
网站的行为与我读过的文档相冲突。我再也找不到文档了,但我很肯定它说appengine实例将运行旧的遗留或新的剥离运行状况检查。但是codewof-dev
网站同时运行这两个功能
GET 200 0 B 2 ms GoogleHC/1.0 /readiness_check
GET 200 2 B 2 ms GoogleHC/1.0 /_ah/health
GET 200 2 B 2 ms GoogleHC/1.0 /_ah/health
GET 200 2 B 2 ms GoogleHC/1.0 /_ah/health
GET 200 2 B 2 ms GoogleHC/1.0 /_ah/health
GET 200 2 B 2 ms GoogleHC/1.0 /_ah/health
GET 200 2 B 2 ms GoogleHC/1.0 /_ah/health
GET 200 0 B 2 ms GoogleHC/1.0 /readiness_check
GET 200 2 B 2 ms GoogleHC/1.0 /_ah/health
GET 200 0 B 2 ms GoogleHC/1.0 /readiness_check
GET 200 2 B 2 ms GoogleHC/1.0 /_ah/health
GET 200 0 B 2 ms GoogleHC/1.0 /readiness_check
GET 200 2 B 2 ms GoogleHC/1.0 /_ah/health
GET 200 0 B 2 ms GoogleHC/1.0 /readiness_check
GET 200 0 B 3 ms GoogleHC/1.0 /liveness_check
最后一个发现:我今早测试了app.yaml文件中的所有健康检查配置(正如我之前所做的),但也删除了配置URL路由文件中的所有自定义健康检查URL。通过以下运行状况检查,系统已成功部署
GET 200 0 B 2 ms GoogleHC/1.0 /readiness_check
GET 200 0 B 3 ms GoogleHC/1.0 /liveness_check
这似乎表明App Engine VM实例有自己的检查,并且它没有进入我们的Docker容器。这对于大多数GAE灵活的实例来说都是不错的,但不是我们正在使用的自定义运行时选项。我可以看到他们也提出了同样的问题,我在这篇评论中添加了链接,因为您在那里有回复,我认为,如果其他人也有同样的问题,这会很有帮助。@EnriqueDelValle上面评论中指向issuetracker.google.com的链接给了我一个“拒绝访问”的信息。我想读一下对此的回应。。。
GET 200 0 B 2 ms GoogleHC/1.0 /readiness_check
GET 200 2 B 2 ms GoogleHC/1.0 /_ah/health
GET 200 2 B 2 ms GoogleHC/1.0 /_ah/health
GET 200 2 B 2 ms GoogleHC/1.0 /_ah/health
GET 200 2 B 2 ms GoogleHC/1.0 /_ah/health
GET 200 2 B 2 ms GoogleHC/1.0 /_ah/health
GET 200 2 B 2 ms GoogleHC/1.0 /_ah/health
GET 200 0 B 2 ms GoogleHC/1.0 /readiness_check
GET 200 2 B 2 ms GoogleHC/1.0 /_ah/health
GET 200 0 B 2 ms GoogleHC/1.0 /readiness_check
GET 200 2 B 2 ms GoogleHC/1.0 /_ah/health
GET 200 0 B 2 ms GoogleHC/1.0 /readiness_check
GET 200 2 B 2 ms GoogleHC/1.0 /_ah/health
GET 200 0 B 2 ms GoogleHC/1.0 /readiness_check
GET 200 0 B 3 ms GoogleHC/1.0 /liveness_check
GET 200 0 B 2 ms GoogleHC/1.0 /readiness_check
GET 200 0 B 3 ms GoogleHC/1.0 /liveness_check