App Engine Flex部署运行状况检查失败

时间:2019-09-27 15:50:19

标签: python-3.x flask gunicorn google-cloud-endpoints app-engine-flexible

我制作了一个Python 3 Flask应用程序,用作gunicorn的API代理。我已经将openapi部署到Cloud Endpoints,并在app.yaml文件中填写了端点服务。

当我尝试部署到App Engine Flex时,运行状况检查失败,因为它花费了太长时间。我试图像建议的那样更改readiness_check的app_start_timeout_sec,但无济于事。在检查stackdriver上的日志时,我只能看到gunicorn正在引导几个工作人员,并最终连续两次终止所有操作。没有进一步解释出什么问题了。我还尝试在app.yaml中指定资源,并在gunicorn.conf.py文件中扩展worker,但无济于事。

然后,我尝试切换到uwsgi,但操作方式相同:启动并连续终止几次,并进行健康检查超时。

错误:

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

runtime: python
env: flex
entrypoint: gunicorn -c gunicorn.conf.py -b :$PORT main:app

runtime_config:
    python_version: 3

endpoints_api_service:
  name: 2019-09-27r0
  rollout_strategy: managed

resources:
  cpu: 1
  memory_gb: 2
  disk_size_gb: 10

gunicorn.conf.py:

import multiprocessing

bind = "127.0.0.1:8000"
workers = multiprocessing.cpu_count() * 2 + 1

requirments.txt:

aniso8601==8.0.0
certifi==2019.9.11
chardet==3.0.4
Click==7.0
Flask==1.1.1
Flask-Jsonpify==1.5.0
Flask-RESTful==0.3.7
gunicorn==19.9.0
idna==2.8
itsdangerous==1.1.0
Jinja2==2.10.1
MarkupSafe==1.1.1
pytz==2019.2
requests==2.22.0
six==1.12.0
urllib3==1.25.5
Werkzeug==0.16.0
pyyaml==5.1.2

这里有人可以发现冲突或我忘了什么吗?我没有主意,真的需要帮助。如果有人可以向我指出在日志中查找更多信息的正确方向,这也绝对有帮助(我也使用--verbosity = debug运行gcloud应用程序deploy,但这仅显示“正在更新服务[default] ...。 ..正在等待重试。”)。我真的很想知道导致健康检查超时的原因!

谢谢!

1 个答案:

答案 0 :(得分:0)

您都可以禁用运行状况检查或对其进行自定义:

要禁用,您必须在app.yaml中添加以下内容:

health_check: enable_health_check: False

要自定义它们,您可以查看Split health checks

您可以通过在liveness_check文件上添加可选的app.yaml部分来自定义Liveness checks请求,例如:

liveness_check: path: "/liveness_check" check_interval_sec: 30 timeout_sec: 4 failure_threshold: 2 success_threshold: 2

在文档中,您可以检查可用于活动检查的设置。

此外,还有Readiness checks。同样,您可以自定义一些设置,例如:

readiness_check: path: "/readiness_check" check_interval_sec: 5 timeout_sec: 4 failure_threshold: 2 success_threshold: 2 app_start_timeout_sec: 300

上面提到的值可以根据您的需要进行更改。尤其是要检查此值,因为App Engine Flexible需要花费几分钟的时间来启动实例,所以这与App Engine Standard相比有显着差异,因此请不要掉以轻心。

如果您检查应用程序的nginx.health_check日志,则可能还会看到运行状况检查轮询比配置的发生频率更高,这是由于冗余的运行状况检查器也在遵循您的设置。这些冗余的运行状况检查程序是自动创建的,您无法对其进行配置。