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 イメージを使用します。
前提条件
-
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 アプリケーションのビルドに関する説明は、『Quarkus スタートガイド』 を参照してください。
注記Quarkus Maven プロジェクトの完全なサンプルについては、Quarkus quickstart archive をダウンロードするか、
Quarkus Quickstarts
Git リポジトリーをクローンしてください。この例はgetting-started
ディレクトリーにあります。- Red Hat OpenShift Container Platform クラスターにアクセスでき、最新バージョンの OpenShift CLI (oc) がインストールされていること。oc のインストールに関する詳細は、『OpenShift Container Platform クラスターのインストールおよび設定』 ガイドの「CLI のインストール」のセクションを参照してください。
- OpenShift Serverless Operator がインストールされ、確認されていること。詳細は、Installing OpenShift Serverless ガイドを参照してください。
- OpenShift Knative Serving がインストールされ、確認されていること。詳細は、Installing OpenShift Serverless ガイドの Installing Knative Serving セクションを参照してください。
- ネイティブコンパイルの場合は、Podman または Docker などのコンテナー環境が必要。
-
kn
CLI ツールをインストールすること (オプション)。
現在、Red Hat ビルドの Quarkus では Knative Serving のみがサポートされます。現在、Knative Eventing はテクノロジープレビューとしてご利用いただけます。
多様性を受け入れるオープンソースの強化
Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。まずは、マスター (master)、スレーブ (slave)、ブラックリスト (blacklist)、ホワイトリスト (whitelist) の 4 つの用語の置き換えから始めます。この取り組みは膨大な作業を要するため、今後の複数のリリースで段階的に用語の置き換えを実施して参ります。詳細は、弊社 の CTO、Chris Wright のメッセージ を参照してください。
第1章 OpenShift エクステンションを使用した Serverless Quarkus Java アプリケーションの OpenShift へのデプロイ
従来の Source-to-Image (S2I) ソースワークフローは、OpenShift 内でアプリケーションのデプロイ可能なアーティファクトを生成します。Quarkus OpenShift エクステンションは、S2I バイナリーワークフローを使用して、より効率的なデプロイメントプロセスを提供します。ソースからビルドする代わりに、エクステンションはローカルファイルシステムから JAR ファイルをアップロードします。その結果、ビルドプロセスは従来の S2I 手法よりも最大で 10 倍速くなります。ローカルで開発する場合、およびビルドサーバーまたは継続的インテグレーション (CI) システムから開発する場合に、Quarkus OpenShift エクステンションを使用して、ソースから繰り返し可能なビルドを実行することができます。
以下の手順では、Quarkus OpenShift エクステンションを使用して、Serverless Quarkus Java アプリケーションを OpenShift にデプロイする方法を説明しています。
前提条件
- Quarkus Maven プロジェクトがあること。
- OpenShift Serverless Operator がインストールされていること。
- OpenShift Knative Serving がインストールされていること。
- Red Hat OpenShift Container Platform クラスターにアクセスでき、最新バージョンの OpenShift CLI (oc) がインストールされていること。
-
OpenJDK 11 がインストールされ、
JAVA_HOME
環境変数が Java SDK の場所を指定していること。 - Apache Maven 3.6.2 以降がインストールされていること。Maven は Apache Maven Project の Web サイトから入手できます。
- ネイティブコンパイルの場合は、Podman または Docker などのコンテナー環境が必要。
-
kn
CLI ツールがインストールされていること。
手順
- Quarkus プロジェクトが含まれるディレクトリーに移動します。
OpenShift エクステンションを既存プロジェクトに追加します。
./mvnw quarkus:add-extension -Dextensions="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 8 イメージを使用するように OpenShift を設定するには、以下の行を
application.properties
ファイルに追加します。quarkus.s2i.base-jvm-image=registry.access.redhat.com/ubi8/openjdk-11
OpenShift の内部レジストリーからコンテナーイメージをプルするように OpenShift Serverless を設定するには、以下の行を
application.properties
ファイルに追加します。quarkus.container-image.registry=image-registry.openshift-image-registry.svc:5000
Knative Serving のデプロイメント記述子を作成できるようにするには、以下の行を
application.properties
ファイルに追加します。quarkus.kubernetes.deployment-target=knative
-
変更を
application.properties
ファイルに保存します。 OpenShift CLI (oc) にログインします。
oc login
新しい OpenShift プロジェクトを作成するには、以下のコマンドを実行します。このコマンドの
<project_name>
は、新規プロジェクトの名前に置き換えます。oc new-project <project_name>
注記<project_name>
は、ホストシステムのusername
と同じである必要があります。同じでない場合、Quarkus はイメージレジストリーからイメージをプルできません。別の<project_name>
を設定する場合は、以下の行をapplication.properties
ファイルに必ず追加します。quarkus.container-image.group=<project_name>
プロジェクトを OpenShift にデプロイするには、以下のコマンドを入力します。
./mvnw clean package -Dquarkus.kubernetes.deploy=true
アプリケーションが正常にデプロイされたことを確認するには、以下のコマンドを実行します。
kn service list
アプリケーションの完全な URL を表示するには、以下のコマンドを入力します。ここで、
<application_name>
は OpenShift プロジェクトにデプロイされたアプリケーションの名前に置き換えます。kn route describe <application_name> -o jsonpath='{.status.url}'
第2章 サーバーレスアプリケーションとしての継続的インテグレーションでの Quarkus ネイティブアプリケーションのコンテナーイメージのデプロイ
ネイティブサーバーレスアプリケーションをデプロイする場合は、ネイティブビルド、コンテナービルド、およびデプロイメントの手順を別々にすることができます。以下の手順では、サーバーレスアプリケーションとして継続的インテグレーション (CI) で Quarkus ネイティブアプリケーションのコンテナーイメージをデプロイする方法を説明しています。
前提条件
- OpenShift Serverless Operator がインストールされていること。
- OpenShift Knative Serving がインストールされていること。
- ネイティブコンパイルの場合は、Podman または Docker などのコンテナー環境が必要。
-
kn
CLI ツールがインストールされていること。
手順
- Quarkus プロジェクトが含まれるディレクトリーに移動します。
以下のいずれかの方法を使用して、Linux 実行可能ファイルをビルドします。
Docker を使用する場合
./mvnw package -Pnative -Dquarkus.native.container-build=true -Dquarkus.native.builder-image=registry.access.redhat.com/quarkus/mandrel-20-rhel8:20.3
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
src/main/docker/Dockerfile.native
ファイルを開き、<image_name>
パラメーターおよび<version>
パラメーターを設定します。Docker を使用する場合
docker build -f src/main/docker/Dockerfile.native -t <image_name>:<version> .
Podman を使用する場合
podman build -f src/main/docker/Dockerfile.native -t <image_name>:<version>.
CI 環境および OpenShift 環境がアクセスできるリポジトリーにコンテナーをプッシュします。ここで、
<registry>
はレジストリーの URL になります。Docker を使用する場合
docker tag <image_name>:<version> <registry>/<image_name>:<version> docker push <registry>/<image_name>:<version>
Podman を使用する場合
podman tag <image_name>:<version> <registry>/<image_name>:<version> podman push <registry>/<image_name>:<version>
OpenShift CLI (oc) にログインします。
oc login
新しい OpenShift プロジェクトを作成するには、以下のコマンドを実行します。このコマンドの
<project_name>
は、新規プロジェクトの名前に置き換えます。oc new-project <project_name>
OpenShift Serverless CLI (kn) を使用して、サーバーレスアプリケーションとしてコンテナーをデプロイするには、以下のコマンドを入力します。
<service_name>
は、お使いのサービスの名前に置き換えます。kn service create <service_name> --image REPOSITORY/<image_name>:<version>
サービスの準備ができていることを確認するには、以下のコマンドを入力します。
kn service list <service_name>
サービスの準備ができている場合は、「READY」と呼ばれる列の出力に
true
と表示されます。注記イメージがプルダウンされて準備ができたときではなく、必要なコンポーネントが作成されるときに、
kn service
コマンドはtrue
を返します。
第3章 その他のリソース
- Maven を使用した Quarkus アプリケーションの作成に関する詳細は、『Apache Maven を使用した Quarkus アプリケーションの開発およびコンパイル』 を参照してください。
- Quarkus アプリケーションをネイティブ実行可能ファイルにコンパイルする方法や、ネイティブ実行可能ファイルのテストに関する詳細は、『Quarkus アプリケーションのネイティブ実行可能ファイルへのコンパイル』 を参照してください。
- Red Hat OpenShift Container Platform での Quarkus Maven アプリケーションのデプロイに関する詳細は、『Red Hat OpenShift Container Platform での Quarkus アプリケーションのデプロイ』 を参照してください。
改訂日時: 2021-04-27 03:43:56 UTC