使用 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 项目命名空间中工作。
步骤
-
在
application.properties
配置文件中设置 Docker 构建策略quarkus.openshift.build-strategy=docker
-
可选:根据您的环境,在
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
的自定义 Dockerfilequarkus.openshift.jvm-dockerfile=src/main/resources/Dockerfile.custom-jvm
-
-
打包您的应用程序并将其部署到当前的 OpenShift 项目
./mvnw clean package -Dquarkus.openshift.deploy=true
验证
以下验证步骤使用 openshift-helloworld
示例应用程序。
-
显示与您的当前 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
-
要获取应用程序 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]
-
获取服务列表
oc get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE openshift-helloworld ClusterIP 172.30.64.57 <none> 80/TCP 14m
-
获取用于测试您的应用程序的 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 浏览器或终端,通过
curl
和oc 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
。