Quarkus 部署到 Google Cloud App 引擎失败

Posted

技术标签:

【中文标题】Quarkus 部署到 Google Cloud App 引擎失败【英文标题】:Quarkus deployment to Google Cloud App engine fails 【发布时间】:2021-06-19 09:19:20 【问题描述】:

我正在尝试将一个简单的单端点 quarkus 应用程序部署到 Google Cloud -> App Engine flex 环境。根据documentation

,我设法将 uber-jar 部署到标准环境

但是我正在努力使用 flex 环境进行部署,正如我从与上面相同的文档链接中所了解的那样,GCP 将基于 Dockerfile 创建一个 docker 容器;最后,我的意图是将原生映像部署到 GCP App Engine。

我按照上面链接中的步骤操作:

    将JVM Dockerfile复制到你项目的根目录:cp src/main/docker/Dockerfile.jvm Dockerfile

    使用 mvn clean package 构建您的应用程序

    src/main/appengine/app.yaml 有以下内容:

     runtime: custom
     env: flex
    

    gcloud 应用部署

gcloud 日志分别返回相同的错误,无论是原生 docker 文件还是普通 docker 文件:

开始构建“502dd964-0abf-470e-a4c1-44c89a67a96e” 获取源 获取存储对象:gs://staging.os-xxxx-quarkus.appspot.com/eu.gcr.io/os-xxxx-quarkus/appengine/default.20210322t183731:latest#1616431057582767 正在复制 gs://staging.os-xxxx-quarkus.appspot.com/eu.gcr.io/os-xxxx-quarkus/appengine/default.20210322t183731:latest#1616431057582767... / [0 个文件][ 0.0 B/ 230.0 B] / [1 个文件][ 230.0 B/ 230.0 B] 操作已完成超过 1 个对象/230.0 B。 建造 已经有图片(带摘要):gcr.io/cloud-builders/docker 无法准备上下文:无法评估 Dockerfile 路径中的符号链接:lstat /Users:没有这样的文件或目录 错误 错误:构建步骤 0“gcr.io/cloud-builders/docker”失败:步骤以非零状态退出:1

为简洁起见,我将包含 dockerfile,但它是默认生成的,没有任何更改。

    FROM registry.access.redhat.com/ubi8/ubi-minimal:8.3 

    ARG JAVA_PACKAGE=java-11-openjdk-headless
    ARG RUN_JAVA_VERSION=1.3.8
    ENV LANG='en_US.UTF-8' LANGUAGE='en_US:en'
    # Install java and the run-java script
    # Also set up permissions for user `1001`
    RUN microdnf install curl ca-certificates $JAVA_PACKAGE \
        && microdnf update \
        && microdnf clean all \
        && mkdir /deployments \
        && chown 1001 /deployments \
        && chmod "g+rwX" /deployments \
        && chown 1001:root /deployments \
        && curl https://repo1.maven.org/maven2/io/fabric8/run-java-sh/$RUN_JAVA_VERSION/run-java-sh-$RUN_JAVA_VERSION-sh.sh -o /deployments/run-java.sh \
        && chown 1001 /deployments/run-java.sh \
        && chmod 540 /deployments/run-java.sh \
        && echo "securerandom.source=file:/dev/urandom" >> /etc/alternatives/jre/lib/security/java.security

    # Configure the JAVA_OPTIONS, you can add -XshowSettings:vm to also display the heap size.
    ENV JAVA_OPTIONS="-Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager"
    # We make four distinct layers so if there are application changes the library layers can be re-used
    COPY --chown=1001 target/quarkus-app/lib/ /deployments/lib/
    COPY --chown=1001 target/quarkus-app/*.jar /deployments/
    COPY --chown=1001 target/quarkus-app/app/ /deployments/app/
    COPY --chown=1001 target/quarkus-app/quarkus/ /deployments/quarkus/

    EXPOSE 8080
    USER 1001

    ENTRYPOINT [ "/deployments/run-java.sh" ]

感谢您的宝贵时间

【问题讨论】:

【参考方案1】:

看来我犯了一个尴尬的错误,污染了空间;对于 Google Cloud App Engine ,flex 环境,app.yaml 文件应放在根文件夹中;它也被记录在案

此外,由于某种原因,max_num_instances 应显式设置为最大值 8,根据帐户配额 google documentation 否则将引发 EXAHUSTED_RESOURCE 异常。

【讨论】:

以上是关于Quarkus 部署到 Google Cloud App 引擎失败的主要内容,如果未能解决你的问题,请参考以下文章

ModuleNotFoundError:将 Streamlit 应用程序部署到 Heroku 时没有名为“google.cloud”的模块

尝试部署到 Google Cloud Run 时出现权限错误

为啥我的函数没有部署到 Google Cloud Platform?

将 env 变量从 Google 的 Secret Manager 加载到在 Google Cloud Run 上运行但未通过 Cloud Build 部署的 Docker 容器中?

Spring Boot 应用在部署到 Google App Engine 时无法连接到 Google Cloud SQL (PostgreSQL)

部署到 Google Cloud Run 时 Docker 容器无法启动