S2Iを使用したQuarkusアプリケーションのOpenShiftへのデプロイ
Quarkus のアプリケーションを OpenShift にデプロイするには、Source-to-Image (S2I) メソッドを使用します。S2Iでは、Gitリポジトリを通して、あるいはビルド時にソースコードをアップロードして、ビルドコンテナにソースコードを提供する必要があります。
デプロイ手順は、Quarkus アプリケーションが使用する Java バージョンによって異なります。
Java 17 で Quarkus アプリケーションを OpenShift にデプロイします。
Java 17 を実行する Quarkus アプリケーションを OpenShift にデプロイするには、S2Iメソッドを使用します。
前提条件
-
Java {jdk-ver-other} で構築されたQuarkusアプリケーションがあること
-
オプション:Quarkusプロジェクトに
quarkus-openshift
エクステンションが含まれていること -
正しい OpenShift プロジェクトの名前空間で作業していること
-
プロジェクトがGitリポジトリにホストされていること
手順
-
pom.xml
を開き、Javaのバージョンを 17 に設定してください:<maven.compiler.source>17</maven.compiler.source> <maven.compiler.target>17</maven.compiler.target>
-
以下のコマンドを入力して、Java 17アプリケーションをパッケージ化します:
./mvnw clean package
-
pom.xml
ファイルと同じ階層に.s2i
というディレクトリを作成します。 -
.s2i
ディレクトリにenvironment
というファイルを作成し、以下の内容を追加します:MAVEN_S2I_ARTIFACT_DIRS=target/quarkus-app S2I_SOURCE_DEPLOYMENTS_FILTER=app lib quarkus quarkus-run.jar JAVA_OPTIONS=-Dquarkus.http.host=0.0.0.0 AB_JOLOKIA_OFF=true JAVA_APP_JAR=/deployments/quarkus-run.jar
-
変更をコミットして、リモートの Git リポジトリにプッシュします。
-
次のコマンドを入力して、サポートされている OpenShift イメージをインポートします:
oc import-image ubi9/openjdk-17 --from=registry.access.redhat.com/ubi9/openjdk-17 --confirm
-
OpenShiftのイメージレジストリを使用し、同じプロジェクト内のイメージストリームからプルしている場合、ポッドのサービスアカウントはすでに正しいパーミッションを持っている必要があります。
-
他の OpenShift プロジェクトや保護されたレジストリからイメージを引っ張ってくる場合は、追加の設定手順が必要になるかもしれません。
詳細は、 Red Hat Openshift Container Platform のドキュメントを参照してください。
-
-
プロジェクトをビルドし、アプリケーションを作成し、 OpenShift サービスをデプロイします:
oc new-app registry.access.redhat.com/ubi9/openjdk-17~<git_path> --name=<project_name>
-
<git_path>
は、QuarkusプロジェクトをホストしているGitリポジトリのパスに置き換えてください。 例えば、oc new-app registry.access.redhat.com/ubi9/openjdk-17~https://github.com/johndoe/code-with-quarkus.git --name=code-with-quarkus
です。Git リポジトリに SSH 鍵を設定していない場合は、Git のパスを指定する際に SSH URL ではなく HTTPS URL を使ってください。
-
<project_name>
をアプリケーション名に置き換えてください。
-
-
プロジェクトの更新版をデプロイするには、変更をGitリポジトリにプッシュしてから実行します:
oc start-build <project_name>
-
アプリケーションへのルートを公開するには、以下のコマンドを実行します:
oc expose svc <project_name>
Javaの 21 で Quarkus アプリケーションを OpenShift にデプロイします。
Java 21 を実行する Quarkus アプリケーションを OpenShift にデプロイするには、S2Iメソッドを使用します。
前提条件
-
オプション:Quarkus Mavenプロジェクトに
quarkus-openshift
エクステンションが含まれていること -
正しい OpenShift プロジェクトの名前空間で作業していること
-
プロジェクトがGitリポジトリにホストされていること
手順
-
pom.xml
、Javaのバージョンを21に設定します:<maven.compiler.source>21</maven.compiler.source> <maven.compiler.target>21</maven.compiler.target>
-
以下のコマンドを入力して、Java {jdk-ver-latest} アプリケーションをパッケージ化します:
./mvnw clean package
-
pom.xml
ファイルと同じ階層に.s2i
というディレクトリを作成します。 -
.s2i
ディレクトリにenvironment
というファイルを作成し、以下の内容を追加します:MAVEN_S2I_ARTIFACT_DIRS=target/quarkus-app S2I_SOURCE_DEPLOYMENTS_FILTER=app lib quarkus quarkus-run.jar JAVA_OPTIONS=-Dquarkus.http.host=0.0.0.0 AB_JOLOKIA_OFF=true JAVA_APP_JAR=/deployments/quarkus-run.jar
-
変更をコミットして、リモートの Git リポジトリにプッシュします。
-
次のコマンドを入力して、サポートされている OpenShift イメージをインポートします:
oc import-image ubi9/openjdk-21 --from=registry.access.redhat.com/ubi9/openjdk-21 --confirm
-
OpenShiftのイメージレジストリを使用し、同じプロジェクト内のイメージストリームからプルしている場合、ポッドのサービスアカウントはすでに正しいパーミッションを持っている必要があります。
-
他の OpenShift プロジェクトにまたがるイメージや、保護されたレジストリからイメージをプルする場合は、追加の設定手順が必要になる場合があります。 詳細については、 Red Hat Openshift Container Platform のドキュメントを参照してください。
-
IBM Zインフラストラクチャにデプロイする場合は、代わりに
oc import-image ubi9/openjdk-21 --from=registry.redhat.io/ubi9/openjdk-21 --confirm
を実行してください。 このイメージについては、 {runtimes-openjdk-long} 21 を参照してください。
-
-
プロジェクトをビルドし、アプリケーションを作成し、OpenShiftサービスをデプロイするには、以下のコマンドを入力します:
oc new-app registry.access.redhat.com/ubi8/openjdk-21~<git_path> --name=<project_name>
-
<git_path>
は、QuarkusプロジェクトをホストしているGitリポジトリのパスに置き換えてください。 例えば、oc new-app registry.access.redhat.com/ubi9/openjdk-21~https://github.com/johndoe/code-with-quarkus.git --name=code-with-quarkus
です。Git リポジトリに SSH 鍵を設定していない場合は、Git のパスを指定する際に SSH URL ではなく HTTPS URL を使ってください。
-
<project_name>
をアプリケーション名に置き換えてください。IBM Zインフラストラクチャにデプロイする場合は、代わりに
oc new-app ubi9/openjdk-21~<git_path> --name=<project_name>
を入力してください。
-
-
プロジェクトの更新版をデプロイするには、変更をGitリポジトリにプッシュしてから実行します:
oc start-build <project_name>
-
アプリケーションへのルートを公開するには、以下のコマンドを実行します:
oc expose svc <project_name>