Quarkus アプリケーションの OpenShift へのデプロイ

Red Hat build of Quarkus 1.11

概要

このガイドでは、Quarkus アプリケーションを OpenShift にデプロイする方法を説明します。

はじめに

アプリケーション開発者は、単一の Maven コマンドを使用して、Quarkus アプリケーションを OpenShift にデプロイできます。この機能は、Docker ビルドストラテジーおよび Source-to-Image (S2I) ストラテジーなど、複数のデプロイメントオプションをサポートする quarkus-openshift エクステンションによって提供されます。

Red Hat ビルドの Quarkus ドキュメントでは、Quarkus アプリケーションを実稼働環境にデプロイするための推奨されるワークフローを説明します。他のデプロイメントに関する詳細は、Quarkus コミュニティーのドキュメント を参照してください。

前提条件

  • OpenJDK (JDK) 11 がインストールされ、JAVA_HOME 環境変数が Java SDK の場所を指定するように設定されている。
  • Apache Maven 3.8.1 以降がインストールされている。
  • quarkus-openshift エクステンションが含まれる Quarkus Maven プロジェクトがある。

  • Red Hat OpenShift Container Platform クラスターにアクセスでき、最新バージョンの OpenShift CLI (oc) がインストールされている。

  • oc を使用して OpenShift にログインし、プロジェクトを選択している。

Red Hat ドキュメントへのフィードバック (英語のみ)

弊社の技術的な内容についてのフィードバックに感謝します。ご意見をお聞かせください。コメントの追加、Insights の提供、誤字の修正、および質問を行う必要がある場合は、ドキュメントで直接行うこともできます。

注記

Red Hat アカウントがあり、カスタマーポータルにログインしている必要があります。

カスタマーポータルからドキュメントのフィードバックを送信するには、以下の手順を実施します。

  1. Multi-page HTML 形式を選択します。
  2. ドキュメントの右上にある Feedback ボタンをクリックします。
  3. フィードバックを提供するテキストのセクションを強調表示します。
  4. ハイライトされたテキストの横にある Add Feedback ダイアログをクリックします。
  5. ページの右側のテキストボックスにフィードバックを入力し、Submit をクリックします。

フィードバックを送信すると、自動的に問題の追跡が作成されます。Submit をクリックすると表示されるリンクを開き、問題の監視を開始するか、さらにコメントを追加します。

貴重なフィードバックにご協力いただきありがとうございます。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。まずは、マスター (master)、スレーブ (slave)、ブラックリスト (blacklist)、ホワイトリスト (whitelist) の 4 つの用語の置き換えから始めます。この取り組みは膨大な作業を要するため、今後の複数のリリースで段階的に用語の置き換えを実施して参ります。詳細は、Red Hat CTO である Chris Wright のメッセージ をご覧ください。

第1章 OpenShift ビルドストラテジーおよび Quarkus

OpenShift Container Platform は、コンテナー化されたアプリケーションを開発し、実行するための Kubernetes ベースのプラットフォームです。セキュリティー上および便宜上、OpenShift はアップストリームの Kubernetes ディストリビューションでは利用できないさまざまなビルドストラテジーをサポートします。

OpenShift ビルドストラテジーの概要

Docker ビルド
このストラテジーは、OpenShift クラスター外のアーティファクト (JAR ファイルまたはネイティブ実行可能ファイル) をローカルまたは CI 環境のいずれかでビルドし、OpenShift ビルドシステムに Dockerfile と共に提供します。コンテナーは OpenShift クラスター内にビルドされ、イメージストリームとして提供されます。
注記

Red Hat ビルドの Quarkus 1.11 以降、OpenShift Docker ビルドストラテジーは、JVM 対象の Quarkus アプリケーションおよびネイティブ実行可能ファイルにコンパイルされた Quarkus アプリケーションをサポートする推奨されるビルドストラテジーです。ただし、後方互換性の理由から、S2I が引き続きデフォルトのデプロイメントストラテジーになります。quarkus.openshift.build-strategy プロパティーを使用して、デプロイメントストラテジーを設定できます。

Source to Image (S2I)
ビルドプロセスは OpenShift クラスター内で実行します。S2I を使用した JVM アプリケーションとしての Quarkus のデプロイは、完全にサポートされます。
バイナリー S2I
このストラテジーは、JAR ファイルを S2I ビルドプロセスへの入力として使用します。これにより、アプリケーションのビルドプロセスとデプロイメントが迅速化されます。

表1.1 Quarkus がサポートする OpenShift ビルドストラテジー

ビルドストラテジーQuarkus ツールのサポートJVM のサポートネイティブのサポートJVM Serverless のサポートネイティブ Serverless のサポート

Docker ビルド

はい

はい

はい

はい

はい

S2I バイナリー

はい

はい

いいえ

いいえ

いいえ

Source S2I

いいえ

はい

いいえ

いいえ

いいえ

第2章 Quarkus Openshift エクステンションの追加

アプリケーションを OpenShift クラスター内で使用するコンテナーイメージとしてビルドおよびデプロイできるように、quarkus-openshift エクステンションを依存関係として Quarkus プロジェクトに追加する必要があります。

OpenShift エクステンションは、イメージストリーム、ビルド設定、デプロイメント設定、サービス定義などの OpenShift リソースも生成します。Quarkus アプリケーションに quarkus-smallrye-health エクステンションが含まれる場合、OpenShift はヘルスエンドポイントにアクセスし、アプリケーションの liveness および readiness を確認することができます。

前提条件

手順

  1. Quarkus プロジェクトが含まれるディレクトリーに移動します。
  2. 以下の方法のいずれかを使用して、プロジェクトに quarkus-openshift エクステンションを追加します。

    1. quarkus-openshift エクステンションを pom.xml ファイルに追加します。

      pom.xml

      <dependency>
          <groupId>io.quarkus</groupId>
          <artifactId>quarkus-openshift</artifactId>
      </dependency>

    2. コマンドラインを使用して quarkus-openshift エクステンションを追加します。

      ./mvnw quarkus:add-extension -Dextensions="openshift"

第3章 Quarkus Java アプリケーションの OpenShift へのデプロイ

Quarkus OpenShift エクステンションを使用すると、Docker ビルドストラテジーを使用してアプリケーションを OpenShift にデプロイできます。コンテナーは OpenShift クラスター内にビルドされ、イメージストリームとして提供されます。

Quarkus プロジェクトには、事前に生成された Dockerfile と手順が含まれています。カスタム Dockerfile を使用する場合は、src/main/docker ディレクトリー、またはモジュール内の任意の場所にファイルを追加する必要があります。また、quarkus.openshift.jvm-dockerfile プロパティーを使用して Dockerfile へのパスを設定する必要があります。

前提条件

  • quarkus-openshift エクステンションが含まれる Quarkus Maven プロジェクトがある。
  • oc を使用して OpenShift にログインし、プロジェクトを選択している。

手順

  1. Quarkus プロジェクトが含まれるディレクトリーに移動します。
  2. application.properties ファイルで以下のプロパティーを設定します。

    1. Docker ビルドストラテジーを設定します。

      quarkus.openshift.build-strategy=docker
    2. (オプション) 信頼されていない証明書を使用している場合は、KubernetesClient を設定します。

      quarkus.kubernetes-client.trust-certs=true
    3. (オプション) サービスを公開して OpenShift ルートを作成します。

      quarkus.openshift.expose=true
    4. (オプション) カスタム Dockerfile へのパスを設定します。

      quarkus.openshift.jvm-dockerfile=<path_to_your_dockerfile>

      以下の例は、Dockerfile.custom-jvm へのパスを示しています。

      quarkus.openshift.jvm-dockerfile=src/main/resources/Dockerfile.custom-jvm
  3. Quarkus アプリケーションをパッケージ化し、現在の OpenShift プロジェクトにデプロイします。

    ./mvnw clean package -Dquarkus.kubernetes.deploy=true

検証

  1. 現在の OpenShift プロジェクトに関連付けられている Pod のリストを表示します。

    oc get pods
  2. アプリケーションの Pod のログ出力を取得するには、以下のコマンドを入力します。<pod_name> は、お使いのアプリケーションの名前の接頭辞が付いた最新の Pod の名前になります。

    oc logs -f <pod_name>

第4章 ネイティブ実行可能ファイルにコンパイルされた Quarkus アプリケーションのデプロイ

Docker ビルドストラテジーを使用して、ネイティブ Quarkus アプリケーションを OpenShift にデプロイできます。Linux X86_64 オペレーティングシステムをターゲットとするアプリケーション用にネイティブ実行可能ファイルを作成する必要があります。ホストのオペレーティングシステムがこれとは異なる場合は、Docker や Podman などのコンテナーランタイムを使用してネイティブ Linux 実行可能ファイルを作成する必要があります。

Quarkus プロジェクトには、事前に生成された Dockerfile と手順が含まれています。カスタム Dockerfile を使用する場合は、src/main/docker ディレクトリー、またはモジュール内の任意の場所にファイルを追加する必要があります。また、quarkus.openshift.native-dockerfile プロパティーを使用して Dockerfile へのパスを設定する必要があります。

前提条件

  • Podman や Docker などの Linux X86_64 オペレーティングシステムまたは OCI (Open Container Initiative) と互換性のあるコンテナーランタイム。
  • quarkus-openshift エクステンションが含まれる Quarkus Maven プロジェクトがある。
  • oc を使用して OpenShift にログインし、プロジェクトを選択している。

手順

  1. Quarkus プロジェクトが含まれるディレクトリーに移動します。
  2. application.properties ファイルで以下のプロパティーを設定します。

    1. Docker ビルドストラテジーを設定します。

      quarkus.openshift.build-strategy=docker
    2. コンテナーランタイムを設定します。

      quarkus.native.container-build=true
    3. (オプション) 信頼されていない証明書を使用している場合は、KubernetesClient を設定します。

      quarkus.kubernetes-client.trust-certs=true
    4. (オプション) サービスを公開して OpenShift ルートを作成します。

      quarkus.openshift.expose=true
    5. (オプション) カスタム Dockerfile へのパスを設定します。

      quarkus.openshift.native-dockerfile=<path_to_your_dockerfile>

      以下の例は、Dockerfile.custom-native へのパスを示しています。

      quarkus.openshift.jvm-dockerfile=src/main/docker/Dockerfile.custom-native
    6. (オプション) コンテナーエンジンを指定し、以下を実行します。

      • Podman を使用してネイティブ実行可能ファイルをビルドします。

        quarkus.native.container-runtime=podman
      • Docker を使用してネイティブ実行可能ファイルをビルドします。

        quarkus.native.container-runtime=docker
  3. ネイティブ実行可能ファイルをビルドし、アプリケーションをパッケージ化して OpenShift にデプロイします。

    ./mvnw clean package -Pnative -Dquarkus.kubernetes.deploy=true

検証

  1. 現在の OpenShift プロジェクトに関連付けられている Pod のリストを表示します。

    oc get pods
  2. アプリケーションの Pod のログ出力を取得するには、以下のコマンドを入力します。<pod_name> は、お使いのアプリケーションの名前の接頭辞が付いた最新の Pod の名前になります。

    oc logs -f <pod_name>

第5章 OpenShift Serverless サービスとしての Quarkus アプリケーションのデプロイ

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

Quarkus プロジェクトには、事前に生成された Dockerfile と手順が含まれています。カスタム Dockerfile を使用する場合は、src/main/docker ディレクトリー、またはモジュール内の任意の場所にファイルを追加する必要があります。さらに、JVM モードの quarkus.openshift.jvm-dockerfile プロパティーおよびネイティブモードの quarkus.openshift.native-dockerfile プロパティーを使用して、Dockerfile へのパスを設定する必要があります。

以下の手順では、Quarkus OpenShift エクステンションを使用して、Serverless Quarkus Java アプリケーションまたはネイティブ実行可能ファイルにコンパイルされた Serverless アプリケーションをデプロイする方法を説明します。

前提条件

  • quarkus-openshift エクステンションが含まれる Quarkus Maven プロジェクトがある。
  • oc を使用して OpenShift にログインし、プロジェクトを選択している。

  • OpenShift Serverless Operator がインストールされている。
  • OpenShift Knative Serving がインストールされ、確認されている。詳細は、Knative Serving のインストール を参照してください。
  • ネイティブコンパイルの場合は、Podman や Docker などの Linux X86_64 オペレーティングシステムまたは OCI (Open Container Initiative) と互換性のあるコンテナーランタイムが必要です。

手順

  1. Quarkus プロジェクトが含まれるディレクトリーに移動します。
  2. application.properties ファイルで以下のプロパティーを設定します。

    1. Knative をデプロイメントターゲットとして設定します。

      quarkus.kubernetes.deployment-target=knative
    2. Docker ビルドストラテジーを設定します。

      quarkus.openshift.build-strategy=docker
    3. OpenShift 内部レジストリーからコンテナーイメージをプルするように OpenShift Serverless に指示します。

      quarkus.container-image.registry=image-registry.openshift-image-registry.svc:5000
      注記

      OpenShift <project_name> がホストシステムの username と異なる場合は、コンテナーイメージのグループを設定します。設定しない場合は、Quarkus はイメージレジストリーからイメージをプルできません。

      quarkus.container-image.group=<project_name>
    4. (オプション) 信頼されていない証明書を使用している場合は、KubernetesClient を設定します。

      quarkus.kubernetes-client.trust-certs=true
    5. (オプション) サービスを公開して OpenShift ルートを作成します。

      quarkus.openshift.expose=true
    6. (オプション) カスタム Dockerfile へのパスを設定します。

      quarkus.openshift.jvm-dockerfile=<path_to_your_dockerfile>

      以下の例は、Dockerfile.custom-jvm へのパスを示しています。

      quarkus.openshift.jvm-dockerfile=src/main/resources/Dockerfile.custom-jvm
  3. (オプション) ネイティブ実行可能ファイルにコンパイルされた Serverless アプリケーションをデプロイするには、以下のプロパティーを設定する必要があります。

    1. コンテナーランタイムを設定します。

      quarkus.native.container-build=true
    2. コンテナーエンジンを指定します。

      • Podman を使用してネイティブ実行可能ファイルをビルドします。

        quarkus.native.container-runtime=podman
      • Docker を使用してネイティブ実行可能ファイルをビルドします。

        quarkus.native.container-runtime=docker
    3. (オプション) カスタム Dockerfile へのパスを設定します。

      quarkus.openshift.native-dockerfile=<path_to_your_dockerfile>
  4. 以下のオプションのいずれかを使用して、Serverless アプリケーションをパッケージ化して OpenShift にデプロイします。

    1. Quarkus Java アプリケーションをデプロイします。

      ./mvnw clean package -Dquarkus.kubernetes.deploy=true
    2. Quarkus ネイティブアプリケーションをデプロイします。

      ./mvnw clean package -Pnative -Dquarkus.kubernetes.deploy=true

検証

  1. 現在の OpenShift プロジェクトに関連付けられている Pod のリストを表示します。

    oc get pods
  2. アプリケーションの Pod のログ出力を取得するには、以下のコマンドを入力します。<pod_name> は、お使いのアプリケーションの名前の接頭辞が付いた最新の Pod の名前になります。

    oc logs -f <pod_name>

第6章 S2I を使用した OpenShift への Quarkus アプリケーションのデプロイ

Source-to-Image (S2I) メソッドを使用して、Quarkus アプリケーションを OpenShift にデプロイできます。S2I では、Git リポジトリーを使用するか、ビルド時にソースをアップロードして、ソースコードをビルドコンテナーに提供する必要があります。

重要

ネイティブ実行可能ファイルにコンパイルされた Quarkus アプリケーションをデプロイするには、Docker ビルドストラテジー を使用します。S2I はネイティブデプロイメントでサポートされる方法ではありません。

前提条件

  • quarkus-openshift エクステンションが含まれる Quarkus Maven プロジェクトがある。
  • Git リポジトリーで Quarkus Maven プロジェクトをホストしている。
  • oc を使用して OpenShift にログインし、プロジェクトを選択している。

手順

  1. Quarkus Maven プロジェクトが含まれるディレクトリーに移動します。
  2. pom.xml ファイルと同じレベルで、.s2i という名前の隠しディレクトリーを作成します。
  3. .s2i ディレクトリーに environment という名前のファイルを作成し、以下の内容を追加します。

    ARTIFACT_COPY_ARGS=-p -r lib/ *-runner.jar
  4. 変更をリモート Git リポジトリーにコミットし、プッシュします。
  5. サポートされる OpenShift イメージをインポートするには、以下のコマンドを入力します。

    oc import-image --confirm ubi8/openjdk-11 --from=registry.access.redhat.com/ubi8/openjdk-11
    注記

    IBM Z インフラストラクチャーにデプロイする場合は、oc import-image --confirm openj9/openj9-11-rhel8 --from=registry.redhat.io/openj9/openj9-11-rhel8 を入力します。

    このイメージの詳細は、Red Hat OpenJ9 11 Java Applications on RHEL8 ページを参照してください。

  6. OpenShift でプロジェクトをビルドするには、以下のコマンドを入力します。ここで、<git_path> は Quarkus プロジェクトをホストする Git リポジトリーへのパスで、<project_name> は作成した OpenShift プロジェクトになります。

    oc new-app ubi8/openjdk-11 <git_path> --name=<project_name>
    注記

    IBM Z インフラストラクチャーにデプロイする場合は、oc new-app openj9/openj9-11-rhel8 <git_path> --name=<project_name> と入力します。

    このコマンドを実行すると、プロジェクトのビルド、アプリケーションの作成、そして OpenShift サービスのデプロイが行われます。

  7. プロジェクトの更新バージョンをデプロイするには、更新を Git リポジトリーにプッシュしてから、以下のコマンドを入力します。

    oc start-build <project_name>

検証

  1. 現在の OpenShift プロジェクトに関連付けられている Pod のリストを表示します。

    oc get pods
  2. アプリケーションの Pod のログ出力を取得するには、以下のコマンドを入力します。<pod_name> は、お使いのアプリケーションの名前の接頭辞が付いた最新の Pod の名前になります。

    oc logs -f <pod_name>

第7章 OpenShift プロジェクトの namespace の確認

前提条件

  • Red Hat OpenShift Container Platform クラスターにアクセスでき、最新バージョンの OpenShift CLI (oc) がインストールされている。

手順

  1. OpenShift CLI (oc) にログインします。

    oc login
  2. 現在のプロジェクトスペースを表示します。

    oc project -q
  3. (オプション) 新しい OpenShift プロジェクトを作成します。

    oc new-project <project_name>

第8章 OpenShift 上のデプロイメントをカスタマイズするための Quarkus 設定プロパティー

任意の設定プロパティーを定義することで、OpenShift 上のデプロイメントをカスタマイズできます。applications.properties ファイルまたはコマンドラインを使用して Quarkus プロジェクトを設定できます。

表8.1 Quarkus 設定プロパティーおよびそのデフォルト値の表

プロパティー説明デフォルト

quarkus.container-image.group

コンテナーイメージグループ。OpenShift <project_name> がホストシステムのユーザー名と異なる場合は、設定する必要があります。

${user.name}

quarkus.container-image.registry

使用するコンテナーレジストリー

 

quarkus.kubernetes-client.trust-certs

Kubernetes クライアント証明書認証

 

quarkus.kubernetes.deployment-target

デプロイメントターゲットプラットフォーム。例: openshift または knative

 

quarkus.native.container-build

コンテナーランタイムを使用して、ネイティブ Linux 実行可能ファイルをビルドします。デフォルトで Docker が使用されます。

false

quarkus.native.container-runtime

イメージをビルドするために使用されるコンテナーランタイム。たとえば、Docker などがあります。

 

quarkus.openshift.build-strategy

デプロイメントストラテジー

s2i

quarkus.openshift.expose

Quarkus アプリケーションのルートを公開します。

false

quarkus.native.debug.enabled

デバッグを有効にし、別の .debug ファイルにデバッグシンボルを生成します。quarkus.native.container-build=true で使用すると、Red Hat ビルドの Quarkus は、ネイティブイメージからデバッグ情報を分割する objcopy ユーティリティーをインストールする binutils パッケージが含まれているため、Red Hat Enterprise Linux またはその他の Linux ディストリビューションのみをサポートします。

false

第9章 関連情報

改訂日時: 2023-05-16

法律上の通知

Copyright © 2023 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.