Chapter 1. Deploying a Serverless Quarkus Java application to OpenShift using the OpenShift extension
The traditional source-to-image (S2I) source workflow generates the deployable artifacts of your application inside OpenShift. The Quarkus OpenShift extension uses the S2I binary workflow to provide a more streamlined deployment process. Instead of building from the source, the extension uploads the JAR files from the local file system. As a result, the build process is up to ten times faster than the traditional S2I method. You can use the Quarkus OpenShift extension when developing locally as well as from a build server or continuous integration (CI) system to perform repeatable builds from source.
The following procedure demonstrates how to deploy a Serverless Quarkus Java application to OpenShift using the Quarkus OpenShift extension.
Prerequisites
- You have a Quarkus Maven project.
- OpenShift Serverless operator is installed.
- OpenShift Knative Serving is installed.
- You have access to a Red Hat OpenShift Container Platform cluster and the latest version of the OpenShift CLI (oc) is installed.
-
OpenJDK 11 is installed and the
JAVA_HOMEenvironment variable specifies the location of the Java SDK. - Apache Maven 3.6.2 or higher is installed. Maven is available from the Apache Maven Project website.
- For native compilation, a container environment like Podman or Docker is required.
-
The
knCLI tool is installed.
Procedure
- Change to the directory that contains your Quarkus project.
Add the OpenShift extension to an existing project:
./mvnw quarkus:add-extension -Dextensions="openshift"
./mvnw quarkus:add-extension -Dextensions="openshift"Copy to Clipboard Copied! Toggle word wrap Toggle overflow When you add the OpenShift extension, the script adds the following dependency to the
pom.xmlfile:<dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-openshift</artifactId> </dependency>
<dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-openshift</artifactId> </dependency>Copy to Clipboard Copied! Toggle word wrap Toggle overflow If you are using an untrusted certificate while in a development or testing environment, add the following line to the
src/main/resources/application.propertiesfile:quarkus.kubernetes-client.trust-certs=true
quarkus.kubernetes-client.trust-certs=trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow To direct OpenShift to use the Open JDK 11 Red Hat Enterprise Linux 8 image, add the following line to the
application.propertiesfile:quarkus.s2i.base-jvm-image=registry.access.redhat.com/ubi8/openjdk-11
quarkus.s2i.base-jvm-image=registry.access.redhat.com/ubi8/openjdk-11Copy to Clipboard Copied! Toggle word wrap Toggle overflow To direct OpenShift Serverless to pull your container image from the OpenShift internal registry, add the following line to the
application.propertiesfile:quarkus.container-image.registry=image-registry.openshift-image-registry.svc:5000
quarkus.container-image.registry=image-registry.openshift-image-registry.svc:5000Copy to Clipboard Copied! Toggle word wrap Toggle overflow To enable the creation of deployment descriptors for Knative Serving, add the following line to the
application.propertiesfile:quarkus.kubernetes.deployment-target=knative
quarkus.kubernetes.deployment-target=knativeCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
Save the changes to the
application.propertiesfile. Log in to the OpenShift CLI (oc):
oc login
oc loginCopy to Clipboard Copied! Toggle word wrap Toggle overflow To create a new OpenShift project, enter the following command where
<project_name>is the name of your new project:oc new-project <project_name>
oc new-project <project_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow NoteThe
<project_name>should be the same as theusernameof the host system otherwise Quarkus cannot pull the image from the image registry. If you set a different<project_name>, make sure to add the following line to theapplication.propertiesfile:quarkus.container-image.group=<project_name>
quarkus.container-image.group=<project_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow To deploy your project to OpenShift, enter the following command:
./mvnw clean package -Dquarkus.kubernetes.deploy=true
./mvnw clean package -Dquarkus.kubernetes.deploy=trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow To verify that the application was deployed correctly, run the following command:
kn service list
kn service listCopy to Clipboard Copied! Toggle word wrap Toggle overflow To view the full URL to the application, enter the following command where
<application_name>is the name of an application deployed in your OpenShift project:kn route describe <application_name> -o jsonpath='{.status.url}'kn route describe <application_name> -o jsonpath='{.status.url}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow