Red Hat OpenShift Container Platform での Quarkus アプリケーションのデプロイ
概要
前書き
アプリケーション開発者は、1 つのビルドコマンドで Apache Maven および quarkus-openshift
エクステンションを使用して、または従来の Source-to-Image (S2I) 手法を使用して、Red Hat OpenShift Container Platform に Quarkus アプリケーションをデプロイすることできます。どちらの手法を使用しても、作成されるイメージは完全にサポートされます。開発サポートの対象となるビルドプロセスおよびツールの詳細は、開発サポートの対象範囲 のページを参照してください。
前提条件
-
OpenJDK 11 がインストールされ、
JAVA_HOME
環境変数が Java SDK の場所を指定していること。Red Hat ビルドの Open JDK は、Red Hat カスタマーポータルの Software Downloads ページから入手可能です (ログインが必要です)。 - Apache Maven 3.6.2 以降がインストールされていること。Maven は Apache Maven Project の Web サイトから入手できます。
Quarkus Maven プロジェクトがあること。Maven を使用した簡単な Quarkus アプリケーションのビルドに関する説明は、『Red Hat ビルドの Quarkus のスタートガイド』 を参照してください。
注記Quarkus Maven プロジェクトの完全なサンプルについては、Quarkus quickstart archive をダウンロードするか、
Quarkus Quickstarts
Git リポジトリーをクローンしてください。この例はgetting-started
ディレクトリーにあります。- Red Hat OpenShift Container Platform クラスターにアクセスでき、最新バージョンの OpenShift CLI (oc) がインストールされていること。oc のインストールに関する詳細は、『OpenShift Container Platform クラスターのインストールおよび設定』 ガイドを参照してください。
第1章 Red Hat ビルドの Quarkus
Red Hat ビルドの Quarkus は、コンテナーおよび Red Hat OpenShift Container Platform と使用するために最適化された Kubernetes ネイティブ Java スタックです。Quarkus は、Eclipse MicroProfile、Apache Kafka、RESTEasy (JAX-RS)、Hibernate ORM (JPA)、Spring、Infinispan、Apache Camel などの一般的な Java 標準、フレームワーク、およびライブラリーと連携するように設計されています。
Quarkus のディペンデンシーインジェクション (依存性の注入) ソリューションは、CDI (コンテキストとディペンデンシーインジェクション) をベースとし、エクステンションフレームワークを備えているので、機能の拡張、およびフレームワークの設定、起動、アプリケーションへの統合が可能です。
Quarkus は、コンテナーファーストという手法で Java アプリケーションをビルドします。この手法により、Java で書かれたマイクロサービスベースのアプリケーションのビルドが大幅に容易になるほか、これらのアプリケーションがサーバーレスコンピューティングフレームワークで実行している関数を呼び出すことができるようになります。これにより、Quarkus アプリケーションのメモリーフットプリントは小さくなり、起動時間は高速化されます。
第2章 Red Hat OpenShift Container Platform
OpenShift Container Platform は、コンテナー化されたアプリケーションを開発し、実行するための Kubernetes ベースのプラットフォームです。アプリケーションおよびアプリケーションをサポートするデータセンターが、わずかなシステムとアプリケーションから、数百万ものクライアントに対応する数千ものシステムへと拡張できるように設計されています。
OpenShift は、アプリケーションのコンテナーイメージをビルドするための 2 つのワークフロー (ソースワークフローとバイナリーワークフロー) をサポートします。どちらのワークフローも Source-to-Image (S2I) 機能をベースとしており、両方のワークフローはソースワークフローを使用して S2I ビルドに依存します。主な違いは、ソースワークフローは OpenShift 内でアプリケーションのデプロイ可能なアーティファクトを生成し、バイナリーワークフローは OpenShift 外でこれらのバイナリーアーティファクトを生成する点です。いずれも OpenShift 内でアプリケーションコンテナーイメージをビルドします。バイナリーワークフローは、コンテナーイメージを生成する OpenShift S2I ビルドのソースとしてアプリケーションバイナリーを提供します。
第3章 Quarkus OpenShift エクステンションを使用した OpenShift への Quarkus アプリケーションのデプロイ
従来の Source-to-Image (S2I) ソースワークフローは、OpenShift 内でアプリケーションのデプロイ可能なアーティファクトを生成します。Quarkus OpenShift エクステンションは、S2I バイナリーワークフローを使用して、より効率的なデプロイメントプロセスを提供します。ソースからビルドする代わりに、エクステンションはローカルファイルシステムから JAR ファイルをアップロードします。その結果、ビルドプロセスは従来の S2I 手法よりも最大で 10 倍速くなります。ローカルで開発する場合、およびビルドサーバーまたは継続的インテグレーション (CI) システムから開発する場合に、Quarkus OpenShift エクステンションを使用して、ソースから繰り返し可能なビルドを実行することができます。
Quarkus OpenShift エクステンションは、開発およびテストの目的でのみ使用してください。実稼働環境では、「4章S2I を使用した OpenShift での Quarkus アプリケーションのデプロイ」で説明されている従来の S2I 手法の使用を検討してください。
手順
- Quarkus Maven プロジェクトが含まれるディレクトリーに移動します。
OpenShift エクステンションを既存プロジェクトに追加するには、以下のコマンドを入力します。
./mvnw quarkus:add-extension -Dextensions="openshift"
注記新規プロジェクトの作成時に
-Dextensions="openshift"
引数を含めて、Quarkus OpenShift エクステンションを追加することができます。OpenShift エクステンションを追加すると、スクリプトは以下の依存関係を
pom.xml
ファイルに追加します。<dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-openshift</artifactId> </dependency>
信頼されていない証明書を使用している場合は、
src/main/resources/application.properties
ファイルに以下の行を追加します。quarkus.kubernetes-client.trust-certs=true
Open JDK 11 の Red Hat Enterprise Linux 7 イメージを使用するように OpenShift を設定するには、以下の行を
application.properties
ファイルに追加します。quarkus.s2i.base-jvm-image=registry.access.redhat.com/openjdk/openjdk-11-rhel7
注記IBM Z インフラストラクチャーにデプロイする場合は、
application.properties
ファイルにquarkus.s2i.base-jvm-image=registry.access.redhat.com/openj9/openj9-11-rhel8
を追加します。OpenShift ルートを作成するには、以下の行を
application.properties
ファイルに追加します。quarkus.openshift.expose=true
-
変更を
application.properties
ファイルに保存します。 OpenShift CLI (oc) にログインします。
oc login
新しい OpenShift プロジェクトを作成するには、以下のコマンドを実行します。このコマンドの
PROJECT_NAME
は、新規プロジェクトの名前に置き換えます。oc new-project PROJECT_NAME
プロジェクトを OpenShift にデプロイするには、Quarkus Maven プロジェクトディレクトリーに以下のコマンドを入力します。
./mvnw clean package -Dquarkus.kubernetes.deploy=true
OpenShift プロジェクトでデプロイされたすべてのアプリケーションの名前およびルートを表示するには、以下のコマンドを入力します。
oc get route
アプリケーションの完全な URL を表示するには、以下のコマンドを入力します。ここで、
APPLICATION_NAME
は OpenShift プロジェクトにデプロイされたアプリケーションの名前になります。export URL="http://$(oc get route APPLICATION_NAME -o jsonpath='{.spec.host}')" echo "Application URL: $URL" curl $URL/hello
ルートの
hello
エンドポイントに HTTP 要求を作成するには、以下のコマンドを入力します。curl $URL/hello
第4章 S2I を使用した OpenShift での Quarkus アプリケーションのデプロイ
従来の Source-to-Image (S2I) 手法は、Red Hat OpenShift Container Platform でのアプリケーションのデプロイにおける推奨される方法として、広く使用されています。S2I では、Git リポジトリーを使用するか、ビルド時にソースをアップロードして、ソースコードをビルドコンテナーに提供する必要があります。この手法を使用して、実稼働環境に Quarkus アプリケーションをデプロイします。
前提条件
- Git リポジトリーでホストされる Quarkus Maven プロジェクトがあること。
手順
- Quarkus Maven プロジェクトが含まれるディレクトリーに移動します。
-
pom.xml
ファイルと同じレベルで、.s2i
という名前の隠しディレクトリーを作成します。 .s2i
ディレクトリーにenvironment
という名前のファイルを作成し、以下の内容を追加します。ARTIFACT_COPY_ARGS=-p -r lib/ *-runner.jar
- 変更をリモート Git リポジトリーにコミットし、プッシュします。
OpenShift CLI (oc) にログインします。
oc login
新しい OpenShift プロジェクトを作成するには、以下のコマンドを実行します。このコマンドの
PROJECT_NAME
は、新規プロジェクトの名前に置き換えます。oc new-project PROJECT_NAME
サポートされる OpenShift イメージをインポートするには、以下のコマンドを入力します。
oc import-image --confirm openjdk/openjdk-11-rhel7 --from=registry.access.redhat.com/openjdk/openjdk-11-rhel7
注記IBM Z インフラストラクチャーにデプロイする場合は、
oc import-image --confirm openj9/openj9-11-rhel8 --from=registry.access.redhat.com/openj9/openj9-11-rhel8
を入力します。このイメージの詳細は、Red Hat OpenJDK 11 Java Applications ページを参照してください。
OpenShift でプロジェクトをビルドするには、以下のコマンドを入力します。
GIT_PATH
は Quarkus プロジェクトをホストする Git リポジトリーへのパス、PROJECT_NAME
は作成した OpenShift プロジェクトに置き換えます。oc new-app openjdk-11-rhel7 GIT_PATH --name=PROJECT_NAME
注記IBM Z インフラストラクチャーにデプロイする場合は、
oc new-app openj9/openj9-11-rhel8 GIT_PATH --name=PROJECT_NAME
を入力します。このコマンドを実行すると、プロジェクトのビルド、アプリケーションの作成、そして OpenShift サービスのデプロイが行われます。
OpenShift ルートを作成するには、以下のコマンドを入力します。
oc expose service/PROJECT_NAME
新規ルートを表示するには、以下のコマンドを入力します。このコマンドの
APPLICATION_NAME
は、OpenShift プロジェクトにデプロイされたアプリケーションの名前に置き換えます。export URL="http://$(oc get route APPLICATION_NAME -o jsonpath='{.spec.host}}')" echo "Application URL: $URL"
ルートの
hello
エンドポイントに HTTP 要求を作成するには、以下のコマンドを入力します。curl $URL/hello
- アプリケーションを使用するには、前のコマンドで返された URL を Web ブラウザーで入力します。
プロジェクトの更新バージョンをデプロイするには、更新を Git リポジトリーにプッシュしてから、以下のコマンドを入力します。
oc start-build PROJECT_NAME
- ビルドの完了後にブラウザーページを更新し、変更を確認します。
改訂日時: 2020-11-18 01:18:31 UTC