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

Red Hat build of Quarkus 1.7

概要

本ガイドでは、Serverless Serving を使用して、Red Hat OpenShift Container Platform に 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 ツールがインストールされていること。

手順

  1. Quarkus プロジェクトが含まれるディレクトリーに移動します。
  2. OpenShift エクステンションを既存プロジェクトに追加します。

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

    OpenShift エクステンションを追加すると、スクリプトは以下の依存関係を pom.xml ファイルに追加します。

       <dependency>
    	<groupId>io.quarkus</groupId>
     	<artifactId>quarkus-openshift</artifactId>
       </dependency>
  3. 開発またはテスト環境内で、信頼されていない証明書を使用している場合は、以下の行を src/main/resources/application.properties ファイルに追加します。

    quarkus.kubernetes-client.trust-certs=true
  4. Open JDK 11 の Red Hat Enterprise Linux 8 イメージを使用するように OpenShift を設定するには、以下の行を application.properties ファイルに追加します。

    quarkus.s2i.base-jvm-image=registry.access.redhat.com/ubi8/openjdk-11
  5. OpenShift の内部レジストリーからコンテナーイメージをプルするように OpenShift Serverless を設定するには、以下の行を application.properties ファイルに追加します。

    quarkus.container-image.registry=image-registry.openshift-image-registry.svc:5000
  6. Knative Serving のデプロイメント記述子を作成できるようにするには、以下の行を application.properties ファイルに追加します。

    quarkus.kubernetes.deployment-target=knative
  7. 変更を application.properties ファイルに保存します。
  8. OpenShift CLI (oc) にログインします。

    oc login
  9. 新しい OpenShift プロジェクトを作成するには、以下のコマンドを実行します。このコマンドの <project_name> は、新規プロジェクトの名前に置き換えます。

    oc new-project <project_name>
    注記

    <project_name> は、ホストシステムの username と同じである必要があります。同じでない場合、Quarkus はイメージレジストリーからイメージをプルできません。別の <project_name> を設定する場合は、以下の行を application.properties ファイルに必ず追加します。

    quarkus.container-image.group=<project_name>
  10. プロジェクトを OpenShift にデプロイするには、以下のコマンドを入力します。

    ./mvnw clean package -Dquarkus.kubernetes.deploy=true
  11. アプリケーションが正常にデプロイされたことを確認するには、以下のコマンドを実行します。

    kn service list
  12. アプリケーションの完全な 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 ツールがインストールされていること。

手順

  1. Quarkus プロジェクトが含まれるディレクトリーに移動します。
  2. 以下のいずれかの方法を使用して、Linux 実行可能ファイルをビルドします。

    1. Docker を使用する場合

      ./mvnw package -Pnative -Dquarkus.native.container-build=true -Dquarkus.native.builder-image=registry.access.redhat.com/quarkus/mandrel-20-rhel8:20.3
    2. 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
  3. src/main/docker/Dockerfile.native ファイルを開き、<image_name> パラメーターおよび <version> パラメーターを設定します。

    1. Docker を使用する場合

      docker build -f src/main/docker/Dockerfile.native -t <image_name>:<version> .
    2. Podman を使用する場合

      podman build -f src/main/docker/Dockerfile.native -t <image_name>:<version>.
  4. CI 環境および OpenShift 環境がアクセスできるリポジトリーにコンテナーをプッシュします。ここで、<registry> はレジストリーの URL になります。

    1. Docker を使用する場合

      docker tag <image_name>:<version> <registry>/<image_name>:<version>
      docker push <registry>/<image_name>:<version>
    2. Podman を使用する場合

      podman tag <image_name>:<version> <registry>/<image_name>:<version>
      podman push <registry>/<image_name>:<version>
  5. OpenShift CLI (oc) にログインします。

    oc login
  6. 新しい OpenShift プロジェクトを作成するには、以下のコマンドを実行します。このコマンドの <project_name> は、新規プロジェクトの名前に置き換えます。

    oc new-project <project_name>
  7. OpenShift Serverless CLI (kn) を使用して、サーバーレスアプリケーションとしてコンテナーをデプロイするには、以下のコマンドを入力します。<service_name> は、お使いのサービスの名前に置き換えます。

    kn service create <service_name> --image REPOSITORY/<image_name>:<version>
  8. サービスの準備ができていることを確認するには、以下のコマンドを入力します。

    kn service list <service_name>

    サービスの準備ができている場合は、「READY」と呼ばれる列の出力に true と表示されます。

    注記

    イメージがプルダウンされて準備ができたときではなく、必要なコンポーネントが作成されるときに、kn service コマンドは true を返します。

第3章 その他のリソース

改訂日時: 2021-04-27 03:43:56 UTC

法律上の通知

Copyright © 2021 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.