Azure Red Hat OpenShift クラスターに、Open Liberty/WebSphere Liberty を使用する Java アプリケーションをデプロイする

このガイドでは、Open Liberty/WebSphere Liberty ランタイムで、Java、Java EE、Jakarta EE、または MicroProfile アプリケーションを実行する方法について説明します。 次に、Open Liberty Operator を使用して、コンテナ化されたアプリケーションを Azure Red Hat OpenShift 4 クラスターにデプロイする方法について説明します。 この記事では、Liberty アプリケーションの準備、アプリケーションの Docker イメージの構築、コンテナ化されたアプリケーションの Azure Red Hat OpenShift 4 クラスターでの実行について説明します。 Open Liberty の詳細については、Open Liberty プロジェクトのページを参照してください。 WebSphere Liberty の詳細については、「WebSphere Liberty の製品ページ」を参照してください。

この記事は、Azure Red Hat OpenShift 4 クラスターで Open/WebSphere Liberty を実行するためのステップバイステップの手動ガイダンスです。 Azure Red Hat OpenShift 4 クラスターへの取り組みを加速させるより自動化されたソリューションについては、「Azure Red Hat OpenShift に IBM WebSphere Liberty と Open Liberty をデプロイする」を参照してください

この記事は、デプロイをすばやく行うのに役立ちます。 運用環境に移行する前に、Tuning Liberty について調べる必要があります。

重要

Azure Red Hat OpenShift は、統合されたサポート エクスペリエンスを提供するために Red Hat と Microsoft によって共同で設計、運用、サポートされていますが、Azure Red Hat OpenShift 上で実行するソフトウェア (この記事で説明されているものを含む) には、独自のサポートおよびライセンス条項が適用されます。 Azure Red Hat OpenShift のサポートの詳細については、「Azure Red Hat OpenShift 4 のサポート ライフサイクル」を参照してください。 この記事で説明されているソフトウェアのサポートの詳細については、記事に記載されているそのソフトウェアのメイン ページを参照してください。

前提条件

Note

OpenShift クラスターを作成して実行するには、Azure Red Hat OpenShift に少なくとも 40 コアが必要です。 新しい Azure サブスクリプションの既定の Azure リソース クォータは、この要件を満たしていません。 リソースの制限の引き上げを依頼するには、「標準クォータ:VM シリーズでの制限の引き上げ」を参照してください。 試用版サブスクリプションはクォータ引き上げの対象ではないことに注意してください。クォータ引き上げを要求する前に、従量課金制のサブスクリプションにアップグレードしてください。

このガイドを正しく使用するには、以下の前提条件を満たす必要があります。

  1. Unix のようなオペレーティング システム (Ubuntu、macOS など) がインストールされているローカル マシンを準備します。

  2. Java SE Version 17 以降の実装 (Eclipse Open J9 など) をインストールします。

  3. Maven 3.5.0 以上をインストールします。

  4. お使いの OS 用の Docker をインストールします。

  5. Azure CLI 2.0.75 以降をインストールします。

  6. envsubst がオペレーティング システムに事前にインストールされていないかどうかを調べてインストールします。

  7. このサンプルのコードをローカル システムにクローンします。 サンプルは GitHub にあります。

  8. Azure Red Hat OpenShift 4 クラスターの作成に関するページの手順に従います。

    "Red Hat プル シークレットを取得する" 手順は省略可能のラベルが付いていますが、この記事には必須です。 プル シークレットを使用すると、Azure Red Hat OpenShift クラスターで、Open Liberty オペレーターを見つけることができます。

    クラスターでメモリを集中的に使用するアプリケーションを実行する予定の場合は、--worker-vm-size パラメーターを使用して、ワーカー ノードにとって適切な仮想マシン サイズを指定します。 たとえば Standard_E4s_v3 は、クラスターに Elasticsearch オペレーターをインストールするための仮想マシンの最小サイズです。 詳細については、以下を参照してください:

  9. Azure Red Hat OpenShift 4 クラスターへの接続に関するページの手順に従って、クラスターに接続します。

    • この記事の後半で oc コマンドを使用するため、「OpenShift CLI をインストールする」の手順に従ってください。
    • クラスター コンソールの URL を書き留めます。 https://console-openshift-console.apps.<random>.<region>.aroapp.io/ のようになります。
    • kubeadmin の資格情報を書き留めます。
    • 必ず、kubeadmin の資格情報を使用して、「OpenShift CLI を使用して接続する」の手順に従ってください。

Open Liberty OpenShift オペレーターをインストールする

クラスターを作成して接続したら、Open Liberty オペレーターをインストールします。 Open Liberty オペレーターのメイン開始ページは、GitHub にあります。

  1. kubeadmin の資格情報を使用して、ブラウザーから OpenShift Web コンソールにサインインします。

  2. [オペレーター]>[オペレーター ハブ] と移動して、Open Liberty を検索します。

  3. 検索結果から [Open Liberty] を選択します。

  4. [インストール] を選択します。

  5. ページの [オペレーターのインストール] で、[更新プログラム チャネル] [v1.2][インストールモード][クラスター上のすべての名前空間 (デフォルト)][更新承認][自動] をオンにします。

    Open Liberty Operator 用のオペレーターのサブスクリプションの作成のスクリーンショット。

  6. インストール を選択し、インストールが完了するまで 1 ~ 2 分待ちます。

  7. Open Liberty オペレーターが正常にインストールされ、使用できる状態になっていることを確認します。 そうでない場合は、問題を診断して解決してから続行してください。

    Open Liberty オペレーターがインストールされたことを示すインストール済みのオペレーター。

Java アプリ用の OpenShift 名前空間を作成する

次の手順を使用して、アプリで使用する OpenShift 名前空間を作成します。

  1. kubeadmin の資格情報を使用して、ブラウザーから OpenShift Web コンソールにサインインしていることを確認します。

  2. [管理]>[名前空間]>[名前空間の作成] と移動します。

  3. 次に示すように、[名前]open-liberty-demo を入力し、[作成] を選択します。

    名前空間の作成のスクリーンショット。

Azure Database for MySQL の作成

次の手順を使用して、アプリで使用する Azure Database for MySQL を設定します。 アプリケーションにデータベースが必要ない場合は、このセクションをスキップできます。

  1. 「クイック スタート: Azure portalを使用してAzure Database for MySQL - フレキシブル サーバーを作成する」の手順を実行して、Azure Database for MySQL フレキシブル サーバーを作成します。 データベースを作成した後、このドキュメントに戻ります。

    Note

    [基本] 手順で、サーバー名.mysql.database.azure.com[サーバー管理者ログイン][パスワード] をメモします。

  2. データベースが作成されたら、your database>の [ネットワーク]を開きます。

    1. [パブリック アクセス] で、[パブリック IP アドレスを使用してインターネット経由でこのリソースへのパブリック アクセスを許可する] が選択されていることを確認します。
    2. [Azure 内の任意の Azure サービスにこのサーバーへのパブリック アクセスを許可する]を選択します。
    3. クライアント IPv4 アドレスがファイアウォール規則の許可リストにあることを確認します。

    mysql データベース ネットワークを構成する画面のスクリーンショット。

  3. your database> を開き、[接続]>[選択][アプリから接続]>[JDBC] の順に選択します。 データベース サーバーのアドレスに続き、ポート番号をメモします。 たとえば、次の例のポート番号は 3306 です。

    String url="jdbc:mysql://<Server name>.mysql.database.azure.com:3306/{your_database}?useSSL=true";myDbConn=DriverManager.getConnection(url, "<Server admin username>", "{your_password}");
    
  4. your database> を開き[データベース]>[選択][追加] の順に選択します。 [名前] の値を入力し、[保存] を選択して新しいデータベースを作成します。 このデータベースは、ユーザーとしてスキームの種類を持ち、後でアプリケーションに使用されます。

    Note

    作成した [名前] を書き留めます。

Liberty アプリケーションを準備する

このガイドでは、例として Java EE 8 アプリケーションを使用します。 Open Liberty は Java EE 8 フル プロファイル互換サーバーであるため、このアプリケーションを簡単に実行できます。 Open Liberty は Jakarta EE 8 フル プロファイル互換でもあります。

Open Liberty でアプリケーションを実行する

Open Liberty でアプリケーションを実行するには、Liberty Maven プラグインで、デプロイのためにアプリケーションをパッケージ化できるように、Open Liberty サーバー構成ファイルを作成する必要があります。 アプリケーションを OpenShift にデプロイするためには、Liberty Maven プラグインは必要ありません。 ただし、この例では、それを Open Liberty の開発者 (dev) モードで使用します。 開発者モードでは、アプリケーションをローカルで簡単に実行できます。 liberty-maven-plugin の詳細については、「Building a web application with Maven」(Maven での Web アプリケーションのビルド) を参照してください。

このセクションの手順に従って、この記事で後で使うサンプル アプリケーションを準備します。 これらの手順では、Maven と liberty-maven-plugin を使用します。

アプリケーションをチェックアウトする

このガイドのサンプル コードをクローンします。 サンプルは GitHub にあります。

git clone https://github.com/Azure-Samples/open-liberty-on-aro.git
cd open-liberty-on-aro
git checkout 20231026

HEAD がデタッチされた状態であることを示すメッセージが表示された場合、このメッセージは無視しても問題ありません。 これは、タグをチェックアウトしたという意味です。

リポジトリにはいくつかのサンプルがあります。 open-liberty-on-aro/3-integration/connect-db/mysql を使用します。 アプリケーションのファイル構造を次に示します。

open-liberty-on-aro/3-integration/connect-db/mysql
├─ src/main/
│  ├─ aro/
│  │  ├─ db-secret.yaml
│  │  ├─ openlibertyapplication.yaml
│  ├─ liberty/config/
│  │  ├─ server.xml
│  ├─ java/
│  ├─ resources/
│  ├─ webapp/
├─ Dockerfile
├─ Dockerfile-wlp
├─ pom.xml

javaresources、および webapp ディレクトリには、サンプル アプリケーションのソース コードが含まれています。 このコードでは、jdbc/JavaEECafeDB という名前のデータ ソースを宣言して使用します。

aro ディレクトリには、2 つのデプロイ ファイルを配置しました。 db-secret.xml は、DB 接続資格情報を使用してシークレットを作成するために使用されます。 openlibertyapplication.yaml ファイルは、アプリケーション イメージをデプロイするために使用されます。

ルート ディレクトリに、2 つの Dockerfile を配置しました。 DockerfileDockerfile-wlp はローカル デバッグと Azure Red Hat OpenShift デプロイのイメージ構築に使用され、Open Liberty and WebSphere Liberty は個別で動作します、

liberty/config ディレクトリでは、server.xml を使用して、Open Liberty および WebSphere Liberty クラスターの DB 接続を構成します。

プロジェクトをビルドする

これで必要なプロパティが収集されたので、アプリケーションをビルドできます。 プロジェクトの POM ファイルにより、環境から多くのプロパティが読み取られます。

cd <path-to-your-repo>/open-liberty-on-aro/3-integration/connect-db/mysql

# The following variables are used for deployment file generation
export DB_SERVER_NAME=<Server name>.mysql.database.azure.com
export DB_PORT_NUMBER=3306
export DB_NAME=<Database name>
export DB_USER=<Server admin username>
export DB_PASSWORD=<Server admin password>
export NAMESPACE=open-liberty-demo

mvn clean install

アプリケーションをローカルでテストする

Azure の複雑さに対処する前に、liberty:devc コマンドを使用してプロジェクトを実行し、ローカルでテストします。 liberty:devc の詳細については、Liberty プラグインのドキュメントを参照してください。

  1. ローカル Docker 環境をまだ起動していない場合は、起動します。 この手順は、ホスト オペレーティング システムによって異なります。

  2. liberty:devc モードでアプリケーションを起動する

    cd <path-to-your-repo>/open-liberty-on-aro/3-integration/connect-db/mysql
    
    # If you are running with Open Liberty
    mvn liberty:devc -DcontainerRunOpts="-e DB_SERVER_NAME=${DB_SERVER_NAME} -e DB_PORT_NUMBER=${DB_PORT_NUMBER} -e DB_NAME=${DB_NAME} -e DB_USER=${DB_USER} -e DB_PASSWORD=${DB_PASSWORD}" -Dcontainerfile=Dockerfile
    
    # If you are running with WebSphere Liberty
    mvn liberty:devc -DcontainerRunOpts="-e DB_SERVER_NAME=${DB_SERVER_NAME} -e DB_PORT_NUMBER=${DB_PORT_NUMBER} -e DB_NAME=${DB_NAME} -e DB_USER=${DB_USER} -e DB_PASSWORD=${DB_PASSWORD}" -Dcontainerfile=Dockerfile-wlp
    
  3. アプリケーションが想定どおりに動作することを確認します。 成功すると、コマンドの出力に [INFO] [AUDIT] CWWKZ0003I: The application javaee-cafe updated in 1.930 seconds. のようなメッセージが表示されます。 ブラウザーで https://localhost:9443/ にアクセスし、アプリケーションがアクセス可能で、すべての機能が動作していることを確認します。

  4. Ctrl+C を押して、liberty:devc モードを停止します。

アプリケーション イメージを準備する

Azure Red Hat OpenShift 4 クラスターに Liberty アプリケーションをデプロイして実行するには、Open Liberty コンテナー イメージ または WebSphere Liberty コンテナー イメージを使用して、アプリケーションを Docker イメージとしてコンテナー化します。

以下の手順を完了してアプリケーション イメージをビルドします。

アプリケーションをビルドし、イメージストリームにプッシュする

Liberty Docker コンテナーで既にアプリを正常に実行したので、次のコマンドを実行して、クラスター上でイメージをリモートでビルドします。

  1. kubeadmin の資格情報を使用して OpenShift CLI に既にサインインしていることを確認します。

  2. ソース ディレクトリと Dockerfile を指定します。

    cd <path-to-your-repo>/open-liberty-on-aro/3-integration/connect-db/mysql
    
    # Fetch maven artifactId as image name, maven build version as image version
    export IMAGE_NAME=$(mvn -q -Dexec.executable=echo -Dexec.args='${project.artifactId}' --non-recursive exec:exec)
    export IMAGE_VERSION=$(mvn -q -Dexec.executable=echo -Dexec.args='${project.version}' --non-recursive exec:exec)
    
    # If you are building with Open Liberty base image, the existing Dockerfile is ready for you
    
    # If you are building with WebSphere Liberty base image, uncomment and execute the following two commands to rename Dockerfile-wlp to Dockerfile
    # mv Dockerfile Dockerfile.backup
    # mv Dockerfile-wlp Dockerfile
    
  3. プロジェクトを "open-liberty-demo" に変更する

    oc project open-liberty-demo
    
  4. イメージ ストリームを作成します。

    oc create imagestream ${IMAGE_NAME}
    
  5. ビルド出力のイメージ ストリーム タグを指定するビルド構成を作成します。

    oc new-build --name ${IMAGE_NAME}-config --binary --strategy docker --to ${IMAGE_NAME}:${IMAGE_VERSION}
    
  6. ビルドを開始して、ローカルコンテンツ、コンテナー化、出力を、前に指定したイメージ ストリーム タグにアップロードします。

    oc start-build ${IMAGE_NAME}-config --from-dir . --follow
    

Azure Red Hat OpenShift 4 クラスターにアプリケーションをデプロイする

これで、以前の前提条件の作業時に作成した Azure Red Hat OpenShift 4 クラスターに、サンプルの Liberty アプリケーションをデプロイできるようになりました。

Web コンソールからアプリケーションをデプロイする

Open Liberty Operator を使用して Liberty アプリケーションを管理するため、OpenLibertyApplication のタイプの、カスタム リソース定義のインスタンスを作成する必要があります。 その後は、デプロイに必要な OpenShift リソースの管理全般が、Operator によって処理されます。

  1. kubeadmin の資格情報を使用して、ブラウザーから OpenShift Web コンソールにサインインします。

  2. [ホーム] を展開し、[プロジェクト]>[open-liberty-demo] と選択します。

  3. [オペレーター]>[インストール済みオペレーター] と移動します。

  4. ページの中央で、[Open Liberty] を選択します。

  5. [指定 API] で、[OpenLibertyApplication] を選択します。 ユーザー インターフェイス内の項目のナビゲーションは、使用中のテクノロジの実際の包含階層を反映しています。

    Azure Red Hat OpenShift Java Containment の図。

  6. [OpenLibertyApplication の作成] を選択します。

  7. [構成経由元] に対して [YAML ビュー] を選択します。

  8. 生成された yaml を、<path-to-repo>/3-integration/connect-db/mysql/target/openlibertyapplication.yaml にある yaml に置き換えます。

  9. [作成] を選択します OpenLibertyApplications の一覧に戻ります。

  10. [Workloads]\(ワークロード\)>[Secrets]\(シークレット\) に移動します。

  11. YAML で [作成]> を選択します。

  12. 生成された yaml を、<path-to-repo>/3-integration/connect-db/mysql/target/db-secret.yaml にある yaml に置き換えます。

  13. [作成] を選択します これでシークレットの詳細ページに戻ります。

  14. [オペレーター]>[インストール済みオペレーター]>[Open Liberty]>[OpenLibertyApplication] の順に選択します。

  15. [javaee-cafe-mysql] を選びます。

  16. ページの中央で、[リソース] を選択します。

  17. テーブルで、[Kind]\(種類\)[Route]\(ルート\) である javaee-cafe-simple のリンクを選びます。

  18. 表示されるページで、[場所] の下のリンクを選択します。

ブラウザーでアプリケーションのホーム ページが開かれていることがわかります。

Web コンソールからアプリケーションを削除する

アプリケーションの操作を終えたら、以下の手順に従って、Open Shift からアプリケーションを削除します。

  1. 左側のナビゲーション ウィンドウで、[オペレーター] のエントリを展開します。
  2. [インストール済みオペレーター] を選択します。
  3. [Open Liberty] を選択します。
  4. ページの中央で、[OpenLibertyApplication] を選択します。
  5. javaee-cafe-mysql の場合は、縦の省略記号 (3 つの垂直ドット) を選択してから、[OpenLibertyApplication を削除] を選択します。
  6. [削除] を選択して、アプリケーションを削除します。

Open Shift からシークレットを削除するには、次の手順を実行します。

  1. [Workloads]\(ワークロード\)>[Secrets]\(シークレット\) に移動します。
  2. db-secret-mysql を選択します。
  3. [アクション]>[シークレットの削除] の順に選択します。
  4. [削除] を選択して、シークレットを削除します。

リソースをクリーンアップする

チュートリアル: Azure Red Hat OpenShift 4 クラスターを削除する」の手順に従って、Azure Red Hat OpenShift クラスターを削除します。

次のステップ

このガイドでは、以下の方法について学習しました。

  • Liberty アプリケーションを準備する
  • アプリケーション イメージをビルドする
  • コンテナ化されたアプリケーションを GUI と CLI を使用して Azure Red Hat OpenShift 4 クラスターで実行する

このガイドで使用された以下の参考資料から、より多くのことを学習できます。