由于无法进行就绪检查,因此Google App Engine部署失败

亨德里克

自定义应用引擎环境无法启动,这似乎是由于运行状况检查失败所致。该应用程序具有一些自定义的依赖项(例如PostGIS,GDAL),因此在应用程序引擎映像之上有几层。它可以成功构建,并且可以在Docker容器中本地运行。

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.

Dockerfile如下的外观(注:没有CMD为入口点中定义docker-compose.ymlapp.yaml):

FROM gcr.io/google-appengine/python
ENV PYTHONUNBUFFERED 1
ENV DEBIAN_FRONTEND noninteractive

RUN apt -y update && apt -y upgrade\
    && apt-get install -y software-properties-common \
    && add-apt-repository -y ppa:ubuntugis/ppa \
    && apt -y update \
    && apt-get -y install gdal-bin libgdal-dev python3-gdal  \ 
    && apt-get autoremove -y \
    && apt-get autoclean -y \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*

ADD requirements.txt /app/requirements.txt
RUN python3 -m pip install -r /app/requirements.txt 
ADD . /app/
WORKDIR /app

不幸的是,这创建了一个高达1.58GB的映像,但是原始的gcr.io python映像从1.05GB开始,所以我认为映像的大小不会或不会有问题。

使用以下docker-compose.yml配置在本地运行此容器可以立即精美地旋转一个容器:

version: "3"
services:
  web:
    build: .
    command: gunicorn gisapplication.wsgi --bind 0.0.0.0:8080

因此,我希望以下方法yaml.app能解决问题:

runtime: custom
env: flex
entrypoint: gunicorn -b :$PORT gisapplication.wsgi

beta_settings:
    cloud_sql_instances: <sql-db-connection>

runtime_config:
    python_version: 3

没有运气。因此,根据上述错误,似乎与准备情况检查有关。尝试增加应用程序启动的超时时间(15分钟!)以前似乎有一些健康检查问题,并且自2019年9月起回滚到旧版健康检查还不是解决方案。

readiness_check:
    path: "/readiness_check"
    check_interval_sec: 10
    timeout_sec: 10
    failure_threshold: 3
    success_threshold: 3
    app_start_timeout_sec: 900

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

拆分健康检查肯定会进行。输出gcloud beta app describe是:

authDomain: gmail.com
codeBucket: staging.proj-id-000000.appspot.com
databaseType: CLOUD_DATASTORE_COMPATIBILITY
defaultBucket: proj-id-000000.appspot.com
defaultHostname: proj-id-000000.ts.r.appspot.com
featureSettings:
  splitHealthChecks: true
  useContainerOptimizedOs: true
gcrDomain: asia.gcr.io
id: proj-id-000000
locationId: australia-southeast1
name: apps/proj-id-000000
servingStatus: SERVING

那没有用,因此还尝试增加实例可用的资源,并为1个CPU(6.1GB)分配了最大内存量:

resources:
    cpu: 1
    memory_gb: 6.1
    disk_size_gb: 10

为了安全起见,我在应用程序中添加了运行状况检查端点(旧式运行状况检查和拆分运行状况检查)-这是Django应用程序,因此已进入项目的urls.py

path(r'_ah/health/', lambda r: HttpResponse("OK", status=200)),
path(r'readiness_check/', lambda r: HttpResponse("OK", status=200)),
path(r'liveness_check/', lambda r: HttpResponse("OK", status=200)),

因此,当我深入查看日志时,似乎有/liveness_check一个curl用户代理成功发送了请求,但是随后/readiness_check来自GoogleHC代理的请求返回了503(服务不可用)

日志查看器屏幕截图

(在8个失败的请求之后-为什么是8个?)之后不久,似乎发送了以下原因的关闭触发器:

2020-07-05 09:00:02.603 AEST Triggering app shutdown handlers.

对这里发生的事情有任何想法吗?我想我已经穷尽了解决该问题的所有选项,并且想知道是否应该花费更多的时间在Compute / EC2中启动和运行这些时间。

附录

除了链接的SO问题外,我还在Google上(这里这里)进行了一些问题

亨德里克

好的,Google员工也无济于事,但是在经历了太多日志的史诗般的旅程之后,我设法弄清了问题所在:Dockerfile需要CMD声明。虽然我假设这是entrypointin app.yaml的目的,但App Engine似乎使用旋转了容器docker run因此,只需将此行添加到Dockerfile中即可对其进行修复:

CMD gunicorn -b :$PORT gisapplication.wsgi

我还恢复了默认的运行状况检查设置,并且能够从我的应用程序中删除运行状况检查的URL路径,并让Google基本容器提供的默认nginx实例处理这些情况。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

App Engine Google Cloud中的部署失败

来自分类Dev

在Google App Engine上部署时部署失败(用于在App Engine上上传)

来自分类Dev

Google App Engine部署失败,“空索引配置”

来自分类Dev

Cloudbees:App Engine部署失败

来自分类Dev

尽管readiness_check返回200状态响应,但Google App Engine应用程序部署失败

来自分类Dev

部署到Google App Engine

来自分类Dev

Google App Engine上传失败

来自分类Dev

Python部署到Google App Engine

来自分类Dev

Google App Engine仅部署Jar文件

来自分类Dev

Google App Engine部署:JDK不是JRE

来自分类Dev

Google App Engine devserver重新部署

来自分类Dev

Google App Engine部署不起作用

来自分类Dev

Python部署到Google App Engine

来自分类Dev

将GCloud部署到App Engine的请求失败

来自分类Dev

无法将EAR部署到Google App Engine 1.9.4

来自分类Dev

Google App Engine部署错误[12]无法分配内存

来自分类Dev

无法将EAR部署到Google App Engine 1.9.4

来自分类Dev

使用Luminus部署后,Google App Engine CSS无法加载

来自分类Dev

无法将 OctoberCMS 部署到 Google App Engine (Flex)

来自分类Dev

KeystoneJS 应用程序无法在 Google App Engine 上部署

来自分类Dev

Google App Engine中的Spring OAuth失败

来自分类Dev

使用Google App Engine上传图片失败

来自分类Dev

Google App Engine + Django +文件传输失败

来自分类Dev

代码可在localhost上运行,但在使用Google App Engine进行部署时无法运行

来自分类Dev

如何防止GWT在部署到App Engine时进行编译

来自分类Dev

Google App Engine使用App Engine:update和App cfg.sh失败,出现不同的错误

来自分类Dev

部署的网站上的Google App Engine PHP包含错误

来自分类Dev

查看Google App Engine应用程序的部署日期

来自分类Dev

在Google App Engine中部署应用程序

Related 相关文章

  1. 1

    App Engine Google Cloud中的部署失败

  2. 2

    在Google App Engine上部署时部署失败(用于在App Engine上上传)

  3. 3

    Google App Engine部署失败,“空索引配置”

  4. 4

    Cloudbees:App Engine部署失败

  5. 5

    尽管readiness_check返回200状态响应,但Google App Engine应用程序部署失败

  6. 6

    部署到Google App Engine

  7. 7

    Google App Engine上传失败

  8. 8

    Python部署到Google App Engine

  9. 9

    Google App Engine仅部署Jar文件

  10. 10

    Google App Engine部署:JDK不是JRE

  11. 11

    Google App Engine devserver重新部署

  12. 12

    Google App Engine部署不起作用

  13. 13

    Python部署到Google App Engine

  14. 14

    将GCloud部署到App Engine的请求失败

  15. 15

    无法将EAR部署到Google App Engine 1.9.4

  16. 16

    Google App Engine部署错误[12]无法分配内存

  17. 17

    无法将EAR部署到Google App Engine 1.9.4

  18. 18

    使用Luminus部署后,Google App Engine CSS无法加载

  19. 19

    无法将 OctoberCMS 部署到 Google App Engine (Flex)

  20. 20

    KeystoneJS 应用程序无法在 Google App Engine 上部署

  21. 21

    Google App Engine中的Spring OAuth失败

  22. 22

    使用Google App Engine上传图片失败

  23. 23

    Google App Engine + Django +文件传输失败

  24. 24

    代码可在localhost上运行,但在使用Google App Engine进行部署时无法运行

  25. 25

    如何防止GWT在部署到App Engine时进行编译

  26. 26

    Google App Engine使用App Engine:update和App cfg.sh失败,出现不同的错误

  27. 27

    部署的网站上的Google App Engine PHP包含错误

  28. 28

    查看Google App Engine应用程序的部署日期

  29. 29

    在Google App Engine中部署应用程序

热门标签

归档