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

  1. Change to the directory that contains your Quarkus project.
  2. 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>
  3. 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
  4. 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
  5. 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
  6. To enable the creation of deployment descriptors for Knative Serving, add the following line to the application.properties file:

    quarkus.kubernetes.deployment-target=knative
  7. Save the changes to the application.properties file.
  8. Log in to the OpenShift CLI (oc):

    oc login
  9. 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>
    Note

    The <project_name> should be the same as the username 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 the application.properties file:

    quarkus.container-image.group=<project_name>
  10. To deploy your project to OpenShift, enter the following command:

    ./mvnw clean package -Dquarkus.kubernetes.deploy=true
  11. To verify that the application was deployed correctly, run the following command:

    kn service list
  12. 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}'