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 プロジェクトがある。- Quarkus OpenShift エクステンションを追加するには、Quarkus Openshift エクステンションの追加 を参照してください。
Red Hat OpenShift Container Platform クラスターにアクセスでき、最新バージョンの OpenShift CLI (oc) がインストールされている。
- oc のインストールについての詳細は、OpenShift Container Platform クラスターのインストールおよび設定 を参照してください。
oc
を使用して OpenShift にログインし、プロジェクトを選択している。- OpenShift プロジェクトの namespace を確認するには、OpenShift プロジェクトの namespace の確認 を参照してください。
Red Hat ドキュメントへのフィードバック (英語のみ)
弊社の技術的な内容についてのフィードバックに感謝します。ご意見をお聞かせください。コメントの追加、Insights の提供、誤字の修正、および質問を行う必要がある場合は、ドキュメントで直接行うこともできます。
Red Hat アカウントがあり、カスタマーポータルにログインしている必要があります。
カスタマーポータルからドキュメントのフィードバックを送信するには、以下の手順を実施します。
- Multi-page HTML 形式を選択します。
- ドキュメントの右上にある Feedback ボタンをクリックします。
- フィードバックを提供するテキストのセクションを強調表示します。
- ハイライトされたテキストの横にある Add Feedback ダイアログをクリックします。
- ページの右側のテキストボックスにフィードバックを入力し、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 を確認することができます。
前提条件
Quarkus Maven プロジェクトがある。
- Maven を使用した Quarkus プロジェクトの作成方法に関する詳細は、Apache Maven を使用した Quarkus アプリケーションの開発およびコンパイル を参照してください。
手順
- Quarkus プロジェクトが含まれるディレクトリーに移動します。
以下の方法のいずれかを使用して、プロジェクトに
quarkus-openshift
エクステンションを追加します。quarkus-openshift
エクステンションをpom.xml
ファイルに追加します。pom.xml
<dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-openshift</artifactId> </dependency>
コマンドラインを使用して
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 にログインし、プロジェクトを選択している。- OpenShift プロジェクトの namespace を確認するには、OpenShift プロジェクトの namespace の確認 を参照してください。
手順
- Quarkus プロジェクトが含まれるディレクトリーに移動します。
application.properties
ファイルで以下のプロパティーを設定します。Docker ビルドストラテジーを設定します。
quarkus.openshift.build-strategy=docker
(オプション) 信頼されていない証明書を使用している場合は、
KubernetesClient
を設定します。quarkus.kubernetes-client.trust-certs=true
(オプション) サービスを公開して OpenShift ルートを作成します。
quarkus.openshift.expose=true
(オプション) カスタム Dockerfile へのパスを設定します。
quarkus.openshift.jvm-dockerfile=<path_to_your_dockerfile>
以下の例は、
Dockerfile.custom-jvm
へのパスを示しています。quarkus.openshift.jvm-dockerfile=src/main/resources/Dockerfile.custom-jvm
Quarkus アプリケーションをパッケージ化し、現在の OpenShift プロジェクトにデプロイします。
./mvnw clean package -Dquarkus.kubernetes.deploy=true
検証
現在の OpenShift プロジェクトに関連付けられている Pod のリストを表示します。
oc get pods
アプリケーションの 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 にログインし、プロジェクトを選択している。- OpenShift プロジェクトの namespace を確認するには、OpenShift プロジェクトの namespace の確認 を参照してください。
手順
- Quarkus プロジェクトが含まれるディレクトリーに移動します。
application.properties
ファイルで以下のプロパティーを設定します。Docker ビルドストラテジーを設定します。
quarkus.openshift.build-strategy=docker
コンテナーランタイムを設定します。
quarkus.native.container-build=true
(オプション) 信頼されていない証明書を使用している場合は、
KubernetesClient
を設定します。quarkus.kubernetes-client.trust-certs=true
(オプション) サービスを公開して OpenShift ルートを作成します。
quarkus.openshift.expose=true
(オプション) カスタム Dockerfile へのパスを設定します。
quarkus.openshift.native-dockerfile=<path_to_your_dockerfile>
以下の例は、
Dockerfile.custom-native
へのパスを示しています。quarkus.openshift.jvm-dockerfile=src/main/docker/Dockerfile.custom-native
(オプション) コンテナーエンジンを指定し、以下を実行します。
Podman を使用してネイティブ実行可能ファイルをビルドします。
quarkus.native.container-runtime=podman
Docker を使用してネイティブ実行可能ファイルをビルドします。
quarkus.native.container-runtime=docker
ネイティブ実行可能ファイルをビルドし、アプリケーションをパッケージ化して OpenShift にデプロイします。
./mvnw clean package -Pnative -Dquarkus.kubernetes.deploy=true
検証
現在の OpenShift プロジェクトに関連付けられている Pod のリストを表示します。
oc get pods
アプリケーションの 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 プロジェクトの namespace を確認するには、OpenShift プロジェクトの namespace の確認 を参照してください。
- OpenShift Serverless Operator がインストールされている。
- OpenShift Knative Serving がインストールされ、確認されている。詳細は、Knative Serving のインストール を参照してください。
- ネイティブコンパイルの場合は、Podman や Docker などの Linux X86_64 オペレーティングシステムまたは OCI (Open Container Initiative) と互換性のあるコンテナーランタイムが必要です。
手順
- Quarkus プロジェクトが含まれるディレクトリーに移動します。
application.properties
ファイルで以下のプロパティーを設定します。Knative をデプロイメントターゲットとして設定します。
quarkus.kubernetes.deployment-target=knative
Docker ビルドストラテジーを設定します。
quarkus.openshift.build-strategy=docker
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>
(オプション) 信頼されていない証明書を使用している場合は、
KubernetesClient
を設定します。quarkus.kubernetes-client.trust-certs=true
(オプション) サービスを公開して OpenShift ルートを作成します。
quarkus.openshift.expose=true
(オプション) カスタム Dockerfile へのパスを設定します。
quarkus.openshift.jvm-dockerfile=<path_to_your_dockerfile>
以下の例は、
Dockerfile.custom-jvm
へのパスを示しています。quarkus.openshift.jvm-dockerfile=src/main/resources/Dockerfile.custom-jvm
(オプション) ネイティブ実行可能ファイルにコンパイルされた Serverless アプリケーションをデプロイするには、以下のプロパティーを設定する必要があります。
コンテナーランタイムを設定します。
quarkus.native.container-build=true
コンテナーエンジンを指定します。
Podman を使用してネイティブ実行可能ファイルをビルドします。
quarkus.native.container-runtime=podman
Docker を使用してネイティブ実行可能ファイルをビルドします。
quarkus.native.container-runtime=docker
(オプション) カスタム Dockerfile へのパスを設定します。
quarkus.openshift.native-dockerfile=<path_to_your_dockerfile>
以下のオプションのいずれかを使用して、Serverless アプリケーションをパッケージ化して OpenShift にデプロイします。
Quarkus Java アプリケーションをデプロイします。
./mvnw clean package -Dquarkus.kubernetes.deploy=true
Quarkus ネイティブアプリケーションをデプロイします。
./mvnw clean package -Pnative -Dquarkus.kubernetes.deploy=true
検証
現在の OpenShift プロジェクトに関連付けられている Pod のリストを表示します。
oc get pods
アプリケーションの 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 にログインし、プロジェクトを選択している。- OpenShift プロジェクトの namespace を確認するには、OpenShift プロジェクトの namespace の確認 を参照してください。
手順
- Quarkus Maven プロジェクトが含まれるディレクトリーに移動します。
-
pom.xml
ファイルと同じレベルで、.s2i
という名前の隠しディレクトリーを作成します。 .s2i
ディレクトリーにenvironment
という名前のファイルを作成し、以下の内容を追加します。ARTIFACT_COPY_ARGS=-p -r lib/ *-runner.jar
- 変更をリモート Git リポジトリーにコミットし、プッシュします。
サポートされる 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 ページを参照してください。
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 サービスのデプロイが行われます。
プロジェクトの更新バージョンをデプロイするには、更新を Git リポジトリーにプッシュしてから、以下のコマンドを入力します。
oc start-build <project_name>
検証
現在の OpenShift プロジェクトに関連付けられている Pod のリストを表示します。
oc get pods
アプリケーションの Pod のログ出力を取得するには、以下のコマンドを入力します。
<pod_name>
は、お使いのアプリケーションの名前の接頭辞が付いた最新の Pod の名前になります。oc logs -f <pod_name>
第7章 OpenShift プロジェクトの namespace の確認
前提条件
- Red Hat OpenShift Container Platform クラスターにアクセスでき、最新バージョンの OpenShift CLI (oc) がインストールされている。
手順
OpenShift CLI (oc) にログインします。
oc login
現在のプロジェクトスペースを表示します。
oc project -q
(オプション) 新しい OpenShift プロジェクトを作成します。
oc new-project <project_name>
第8章 OpenShift 上のデプロイメントをカスタマイズするための Quarkus 設定プロパティー
任意の設定プロパティーを定義することで、OpenShift 上のデプロイメントをカスタマイズできます。applications.properties
ファイルまたはコマンドラインを使用して Quarkus プロジェクトを設定できます。
表8.1 Quarkus 設定プロパティーおよびそのデフォルト値の表
プロパティー | 説明 | デフォルト |
---|---|---|
|
コンテナーイメージグループ。OpenShift |
|
| 使用するコンテナーレジストリー | |
| Kubernetes クライアント証明書認証 | |
|
デプロイメントターゲットプラットフォーム。例: | |
| コンテナーランタイムを使用して、ネイティブ Linux 実行可能ファイルをビルドします。デフォルトで Docker が使用されます。 |
|
| イメージをビルドするために使用されるコンテナーランタイム。たとえば、Docker などがあります。 | |
| デプロイメントストラテジー |
|
| Quarkus アプリケーションのルートを公開します。 |
|
|
デバッグを有効にし、別の .debug ファイルにデバッグシンボルを生成します。 |
|
第9章 関連情報
改訂日時: 2023-05-16