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_HOME
environment 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
kn
CLI 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"
When you add the OpenShift extension, the script adds the following dependency to the
pom.xml
file:<dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-openshift</artifactId> </dependency>
If you are using an untrusted certificate while in a development or testing environment, add the following line to the
src/main/resources/application.properties
file:quarkus.kubernetes-client.trust-certs=true
To direct OpenShift to use the Open JDK 11 Red Hat Enterprise Linux 8 image, add the following line to the
application.properties
file:quarkus.s2i.base-jvm-image=registry.access.redhat.com/ubi8/openjdk-11
To direct OpenShift Serverless to pull your container image from the OpenShift internal registry, add the following line to the
application.properties
file:quarkus.container-image.registry=image-registry.openshift-image-registry.svc:5000
To enable the creation of deployment descriptors for Knative Serving, add the following line to the
application.properties
file:quarkus.kubernetes.deployment-target=knative
-
Save the changes to the
application.properties
file. Log in to the OpenShift CLI (oc):
oc login
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>
NoteThe
<project_name>
should be the same as theusername
of 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.properties
file:quarkus.container-image.group=<project_name>
To deploy your project to OpenShift, enter the following command:
./mvnw clean package -Dquarkus.kubernetes.deploy=true
To verify that the application was deployed correctly, run the following command:
kn service list
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}'