编辑此页面

使用 Docker 构建策略将 Quarkus Java 应用程序部署到 OpenShift

作为应用程序开发人员,您可以使用 Docker 构建策略作为部署选项将应用程序部署到 OpenShift。

此策略在 OpenShift 集群外部(本地或 CI 环境)构建工件,并与 Dockerfile 一起提供给 OpenShift 构建系统。工件包括 JAR 文件或原生可执行文件。OpenShift 集群构建容器并将其作为镜像流提供。

此功能由 quarkus-openshift 扩展提供。如果要使用自定义 Dockerfile,请将文件添加到 src/main/docker 目录或模块内的任何位置。此外,请使用 quarkus.openshift.jvm-dockerfile 属性设置 Dockerfile 的路径。

先决条件

  • 您已安装 OpenJDK 17 或 21。

  • 您已将 JAVA_HOME 环境变量设置为 Java SDK 的位置。

  • 您已安装 Apache Maven 3.9.9。

  • 您有一个包含 quarkus-openshift 扩展的 Quarkus 项目。

  • 您已连接到 OpenShift 集群,并安装了最新兼容版本的 oc CLI 工具。

  • 您正在正确的 OpenShift 项目命名空间中工作。

步骤

  1. application.properties 配置文件中设置 Docker 构建策略

    quarkus.openshift.build-strategy=docker
  2. 可选:根据您的环境,在 application.properties 文件中设置以下属性

    • 如果您正在使用不受信任的证书,请为 KubernetesClient 启用证书信任

      quarkus.kubernetes-client.trust-certs=true
    • 要公开服务并创建 OpenShift Route,请设置以下属性

      quarkus.openshift.route.expose=true
    • 要使用自定义 Dockerfile 而不是预生成的 Dockerfile,请设置 Dockerfile 的路径

      quarkus.openshift.jvm-dockerfile=<path_to_your_dockerfile>

      例如,要指定一个名为 Dockerfile.custom-jvm 的自定义 Dockerfile

      quarkus.openshift.jvm-dockerfile=src/main/resources/Dockerfile.custom-jvm
  3. 打包您的应用程序并将其部署到当前的 OpenShift 项目

    ./mvnw clean package -Dquarkus.openshift.deploy=true

验证

以下验证步骤使用 openshift-helloworld 示例应用程序。

  1. 显示与您的当前 OpenShift 项目关联的 Pod 列表

    oc get pods
    NAME                            READY   STATUS      RESTARTS   AGE
    openshift-helloworld-1-build    0/1     Completed   0          11m
    openshift-helloworld-1-deploy   0/1     Completed   0          10m
    openshift-helloworld-1-gzzrx    1/1     Running     0          10m
  2. 要获取应用程序 Pod 的日志输出,请使用带有其名称的 oc logs -f 命令。以下示例使用 openshift-helloworld-1-gzzrx Pod 名称,该名称对应于以您的应用程序名称为前缀的最新 Pod。

    oc logs -f openshift-helloworld-1-gzzrx
    Starting the Java application using /opt/jboss/container/java/run/run-java.sh ...
    INFO exec -a "java" java -Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager -XX:MaxRAMPercentage=50.0 -XX:+UseParallelGC -XX:MinHeapFreeRatio=10 -XX:MaxHeapFreeRatio=20 -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90 -XX:+ExitOnOutOfMemoryError -cp "." -jar /deployments/quarkus-run.jar
    __  ____  __  _____   ___  __ ____  ______
    --/ __ \/ / / / _ | / _ \/ //_/ / / / __/
    -/ /_/ / /_/ / __ |/ , _/ ,< / /_/ /\ \
    --\___\_\____/_/ |_/_/|_/_/|_|\____/___/
    2024-09-17 10:23:25,254 INFO  [io.quarkus] (main) getting-started 1.0.0-SNAPSHOT on JVM (powered by Quarkus {QuarkusCore}) started in 0.653s. Listening on: http://0.0.0.0:8080
    2024-09-17 10:23:25,281 INFO  [io.quarkus] (main) Profile prod activated.
    2024-09-17 10:23:25,281 INFO  [io.quarkus] (main) Installed features: [cdi, kubernetes, rest, smallrye-context-propagation, vertx]
  3. 获取服务列表

    oc get svc
    NAME                   TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                               AGE
    openshift-helloworld   ClusterIP   172.30.64.57     <none>        80/TCP                                14m
  4. 获取用于测试您的应用程序的 URL。为此,请确保您已通过在构建应用程序之前在 application.properties 文件中设置 quarkus.openshift.route.expose=true 属性来公开 OpenShift Route。

    oc get routes
    NAME                   HOST/PORT                                                                   PATH   SERVICES               PORT   TERMINATION   WILDCARD
    openshift-helloworld   openshift-helloworld-username-dev.apps.sandbox-m2.ll9k.p1.openshiftapps.com          openshift-helloworld   http                 None

    请注意,Route 现在监听端口 80,而不是端口 8080。

    您可以使用 Web 浏览器或终端,通过 curloc get routes 的完整 URL 输出(即 http://openshift-helloworld-username-dev.apps.sandbox-m2.ll9k.p1.openshiftapps.com)来测试此示例中演示的应用程序。

    例如:curl http://openshift-helloworld-username-dev.apps.sandbox-m2.ll9k.p1.openshiftapps.com

相关内容