第5章 OpenShift Serverless サービスとしてネイティブ実行可能ファイルにコンパイルされた Quarkus アプリケーションのデプロイ

アプリケーション開発者は、OpenShift Serverless Knative Serving を使用して、ネイティブ実行可能ファイルにコンパイルされた Quarkus アプリケーションを Red Hat OpenShift Container Platform にデプロイできます。

OpenShift Serverless Knative Serving を使用することで、読み込むサイズに応じてサービスをスケールアップまたはスケールダウンすることができます。現在リクエストされていないサービスをスケールダウンすることで、メモリー機能を向上させることができます。

注記

Quarkus をネイティブ実行可能ファイルとして、または OpenJDK を使用する Java アプリケーションとして実行することができます。ネイティブ実行可能ファイルの場合は、Red Hat UBI 8 minimal イメージを使用します。OpenJDK の場合は、Red Hat 8 UBI Java イメージを使用します。

5.1. サーバーレスアプリケーションとして、継続的インテグレーションで Quarkus ネイティブアプリケーションのコンテナーイメージをデプロイします。

ネイティブサーバーレスアプリケーションをデプロイする場合は、ネイティブビルド、コンテナービルド、およびデプロイメントの手順を別々にすることができます。以下の手順では、サーバーレスアプリケーションとして継続的インテグレーション (CI) で Quarkus ネイティブアプリケーションのコンテナーイメージをデプロイする方法を説明しています。

前提条件

  • OpenShift Serverless Operator がインストールされていること。
  • OpenShift Knative Serving がインストールされていること。
  • ネイティブコンパイルの場合は、Podman または Docker などのコンテナー環境が必要。
  • kn CLI ツールがインストールされていること。

手順

  1. Quarkus プロジェクトが含まれるディレクトリーに移動します。
  2. 以下のいずれかの方法を使用して、Linux 実行可能ファイルをビルドします。

    1. Docker を使用する場合

      ./mvnw package -Pnative -Dquarkus.native.container-build=true -Dquarkus.native.builder-image=registry.access.redhat.com/quarkus/mandrel-20-rhel8:20.3
    2. Podman を使用する場合

      ./mvnw package -Pnative -Dquarkus.native.container-build=true -Dquarkus.native.container-runtime=podman -Dquarkus.native.builder-image=registry.access.redhat.com/quarkus/mandrel-20-rhel8:20.3
  3. src/main/docker/Dockerfile.native ファイルを開き、<image_name> パラメーターおよび <version> パラメーターを設定します。

    1. Docker を使用する場合

      docker build -f src/main/docker/Dockerfile.native -t <image_name>:<version> .
    2. Podman を使用する場合

      podman build -f src/main/docker/Dockerfile.native -t <image_name>:<version>.
  4. CI 環境および OpenShift 環境がアクセスできるリポジトリーにコンテナーをプッシュします。ここで、<registry> はレジストリーの URL になります。

    1. Docker を使用する場合

      docker tag <image_name>:<version> <registry>/<image_name>:<version>
      docker push <registry>/<image_name>:<version>
    2. Podman を使用する場合

      podman tag <image_name>:<version> <registry>/<image_name>:<version>
      podman push <registry>/<image_name>:<version>
  5. OpenShift CLI (oc) にログインします。

    oc login
  6. 新しい OpenShift プロジェクトを作成するには、以下のコマンドを実行します。このコマンドの <project_name> は、新規プロジェクトの名前に置き換えます。

    oc new-project <project_name>
  7. OpenShift Serverless CLI (kn) を使用して、サーバーレスアプリケーションとしてコンテナーをデプロイするには、以下のコマンドを入力します。<service_name> は、お使いのサービスの名前に置き換えます。

    kn service create <service_name> --image REPOSITORY/<image_name>:<version>
  8. サービスの準備ができていることを確認するには、以下のコマンドを入力します。

    kn service list <service_name>

    サービスの準備ができている場合は、「READY」と呼ばれる列の出力に true と表示されます。

    注記

    イメージがプルダウンされて準備ができたときではなく、必要なコンポーネントが作成されるときに、kn service コマンドは true を返します。