JBoss EAP 8.0 が OpenShift上へのデプロイをいかに簡単にするか

Red Hat のソリューションアーキテクトの瀬戸です。

この記事はRed Hat Developerのブログ記事How JBoss EAP 8.0 makes deployment on OpenShift easier | Red Hat Developerを許可をうけて翻訳したものです。


最近リリースされたRed Hat JBoss Enterprise Application Platform (EAP) 8.0では、 Red Hat OpenShift上の JBoss EAP アプリケーションイメージのプロビジョニングと設定の方法に変更が導入されました。JBoss EAP Maven プラグインが採用されており、OpenShift 上での JBoss EAP の設定がより簡単かつ柔軟になる大幅な改善が行われています。

この記事ではJBoss EAP Maven プラグインを既存の JBoss EAP 8.0 アプリケーションに追加するために必要な手順を説明します。また、プラグインをローカルでテストし、OpenShift UI と Helm CLI の両方から Helm を使用してアプリケーションをビルドして OpenShift にデプロイします。

JBoss EAP Maven プラグインを使う事で得られるメリット

JBoss EAP Maven プラグインは次の機能を持っています。

  • wildfly-ee-galleon-packとeap-cloud-galleon-pack Galleon feature-packを使用し、サーバー設定ファイルをカスタマイズするためのレイヤーを選択します。
  • CLI スクリプト コマンドをサーバーに適用します。これらの CLI スクリプトはアプリケーションのソースコードの入ったリポジトリに簡単に追加できます。
  • サーバーにインストールを行うキーストアのファイルなどのファイルの追加をサポートします。

詳細についてはドキュメントを参照してください。実際のプロジェクトに適用するための動作するサンプルが欲しい場合は JBoss EAP 8.0 のクイックスタートを参照してください。

JBoss EAP 7.Xの時には、OpenShift 用のイメージをビルドするときにOpenShift ビルダーイメージが JBoss EAP サーバーインスタンスをプロビジョニングしていました。設定はランタイム変数、設定スニペット、および JBoss CLI スクリプトの組み合わせによって行われていました。

JBoss EAP 8.0 では、JBoss EAP Maven プラグインがサーバーをプロビジョニングし、Maven の実行中にパッケージ化されたアプリケーションをデプロイします。このビルドプロセスのすべての設定はMaven pom.xml ファイルで記載されます。これにより開発者と運用チームはローカル環境で EAPのプロビジョニング を制御およびテストできるようになるという大きなメリットが得られます。

JBoss EAP Maven プラグインはGalleonを使用してデプロイされたアプリケーションを動作させることのできる最小限の機能セットで設定された JBoss EAP サーバーをプロビジョニングします。 Galleon はMaven リポジトリにアクセスしながら動作するプロビジョニング ツールです。 Galleon はリリースされた JBoss EAP Maven アーティファクトを自動的に取得し、ユーザーの設定に従って JBoss EAP ベースのアプリケーションサーバーのソフトウェアディストリビューションを構成します。

前提条件

  • Helm CLI. Version 3.5+ (OpenShift Dev Console の代わりに Helm CLI を使用する場合にのみ必要です)
  • OpenShift cluster. Version 4.11+
  • Maven. Version 3.8.5+

訳注:

この記事の動作確認を訳者はWindows 11上でOpenShift Local 4.14.12を使用して行いました。自由に使えるOpenShift環境がなく、手元にインストールして試したい場合はOpenShift Local を使用する事ができます。 また、Helm CLIはWindowsでも動作します。

developers.redhat.com

訳注おわり


プロジェクトのセットアップ

シンプルな「hello world」JBoss EAP 8.0 アプリケーションから始めます。GitHubからソースをチェックアウトできます。チェックアウトしたフォルダで次のコマンドを実行することで、このプロジェクトをビルドしてデプロイする対象を生成できます。

mvn clean package

これでアプリケーションが ./target/helloworld.warに生成されます。このアプリケーションを JBoss EAP 8.0 でテストする場合は次の手順に従って実行できます。

  • ここからJBoss EAP 8.0 ディストリビューションをダウンロードします。
  • ディストリビューションをローカルフォルダ (例: ~/jboss-eap-8) に解凍、もしくはインストールします。
  • EAP_HOME 環境変数をインストール先に設定します。
export EAP_HOME=~/jboss-eap-8

※訳注: Windowsの場合はsetコマンドを使用するか、コントロールパネルから環境変数を設定してください。

  • 次のコマンドを使用して JBoss EAP 8.0 を起動します。
$EAP_HOME/bin/standalone.sh

※訳注: Windowsの場合は %EAP_HOME%\bin\standalone で起動できます。これ以降のコマンドも同様です。

  • 次のコマンドを実行して、コードを複製したフォルダからJBoss CLI を使用して EAP に接続します。
$EAP_HOME/bin/jboss-cli.sh --connect
  • JBoss CLI上からは以下のようにコマンドを実行することでデプロイできます。
[standalone@localhost:9990 /] deploy ./target/helloworld.war
  • これで、 http://localhost:8080/helloworld/HelloWorldにあるサンプル アプリケーションにアクセスできるようになります 。
  • JBoss EAP 8.0 サーバーをシャットダウンします。

OpenShift サポートの追加

OpenShift サポートを追加するためにJBoss EAP Maven プラグインをプロジェクトに追加してOpenShift用のプロファイルを作成します。pom.xml ファイルの<profiles>セクションに以下を追加します。

        <profile>
            <id>openshift</id>
            <build>
                <plugins>
                   <plugin>
                      <groupId>org.jboss.eap.plugins</groupId>
                      <artifactId>eap-maven-plugin</artifactId>
                      <version>1.0.0.Final-redhat-00014</version>
                         <configuration>
                            <channels>
                              <channel>
                                 <manifest>
                                    <groupId>org.jboss.eap.channels</groupId>
                                    <artifactId>eap-8.0</artifactId>
                                </manifest>
                              </channel>
                            </channels>
                            <feature-packs>
                                <feature-pack>
                                    <location>org.jboss.eap:wildfly-ee-galleon-pack</location>
                                </feature-pack>
                                <feature-pack>
                                    <location>org.jboss.eap.cloud:eap-cloud-galleon-pack</location>
                                </feature-pack>
                            </feature-packs>
                            <layers>
                                <layer>cloud-server</layer>
                            </layers>
                            <filename>ROOT.war</filename>
                        </configuration>
                        <executions>
                            <execution>
                                <goals>
                                    <goal>package</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>

このプロファイルは次のような意味を持ちます。

  • 「package」ゴールを持つ「openshift」プロファイルを作成します。
  • eap-maven-pluginプラグインを追加します。
  • 機能パックを使用して eap-maven-plugin を構成します。機能パックは ZIP アーカイブであり、通常はアーティファクト リポジトリ (Maven など) にデプロイされ、Galleon ツールで使用できます。これらの機能は、インストール構成の作成に使用できる事前定義された構成レイヤーで定義されます。機能パックのレイヤーを使用すると、EAP インスタンスの展開が可能になり、展開されたアプリケーションをサポートする最小限の機能が提供されます。このプロジェクトでは次の2つの機能パックを追加します。
    • org.jboss.eap:wildfly-ee-galleon-pack
      • wildfly-ee-galleon-pack には、JBoss EAP のインスタンスを構築するために必要な機能が含まれています。この機能パックには、いくつかのレイヤー (jaxrs-server および cloud-server など) が含まれています。
    • org.jboss.eap.cloud:eap-cloud-galleon-pack
      • org.jboss.eap.cloud:eap-cloud-galleon-pack Galleon 機能パックは、クラウド上で実行するように JBoss EAP サーバーを設定できるようにする追加機能をプロビジョニングします。
  • クラウドサーバー層の組み込み。クラウドサーバー層は、OpenShift にデプロイされたアプリケーションに最低限必要な層です。この層は、ヘルスやメトリクスなどのサブシステムを提供します。
  • ファイル名を ROOT.war に設定して、アプリケーションがルート コンテキストにデプロイされるようにしています。

JBoss EAP Maven プラグインのテスト

OpenShift プロファイルと eap-maven-plugin を使ったJBoss EAP 8.0 インスタンスのプロビジョニングをテストできます。次のコマンドを実行します。

mvn package -Popenshift

このコマンドは次のタスクを実行します。

  • /target/serverフォルダを作成してJBoss EAP のインスタンスをデプロイします。 JBoss EAP インスタンスにはpom.xml ファイルのセクションで定義された機能(この場合はクラウドサーバーレイヤー) のみが含まれます。
  • プロジェクトコードをパッケージ化してビルドしたファイルにROOT.warという名前を付けます。
  • /target/serverフォルダから JBoss EAP インスタンスを開始してROOT.warをデプロイします。

コマンドの出力は次のようになります。

[INFO] Deploying ROOT.war
[disconnected /] embed-server --server-config=standalone.xml
[standalone@embedded /] deploy  ROOT.war --name=ROOT.war --runtime-name=ROOT.war
[standalone@embedded /] stop-embedded-server

次のコマンドを実行してJBoss EAP Maven プラグインによってプロビジョニングされた JBoss EAP のインスタンスを実行できます。

./target/server/bin/standalone.sh

このコマンドは JBoss EAP 8.0 を起動します。ログにはいくつか重要な点が出力されています。

INFO [org.jboss.as.server] (Controller Boot Thread) WFLYSRV0010: Deployed "ROOT.war" (runtime-name : "ROOT.war")

パッケージ化されたアプリケーションは ROOT.war としてデプロイされています。これによりルート コンテキストで実行されます。

INFO [org.jboss.as] (Controller Boot Thread) WFLYSRV0054: Admin console is not enabled

管理コンソールは有効になっていません。OpenShift にデプロイされた JBoss EAP アプリケーションでは管理コンソールを有効にしないことを推奨されています。

http://localhost:8080に移動します (図 1)。

図1: localhost上のJBoss EAPでHello Worldが動いている

eap-maven-plugin が正しく設定されていることが確認できたので、 OpenShift へのデプロイに進みます。

OpenShift へのデプロイ

アプリケーションを OpenShift にデプロイするには、OpenShift UIか、Helm CLI ツールからHelm チャートを利用します。

まず、次の手順に従って Helmの設定を作成します:

  • eap8-on-ocp コードを複製したフォルダに「charts」というフォルダを作成します。
  • このフォルダにhelm.yaml という名前で次の内容のファイルを作成します。
build:
  uri: https://github.com/deewhyweb/eap8-on-ocp.git
  ref: 8.0.x
deploy:
  replicas: 1
  • この例では、eap-maven-plugin を使用するように更新されたソース コードを含む、事前に準備されたブランチを使用しています。この yaml ファイル内の情報を置き換えることによってあなたのアプリケーションの含まれたリポジトリを使用する事もできます。
  • あなたのリポジトリでビルドを正しく実行するには上で説明した pom.xmlに対する変更をプッシュする必要があります。
  • これでアプリケーションを OpenShift にデプロイする準備が整いました。

OpenShift UI を使用した Helm チャートのデプロイ

OpenShift UI に Helm チャートをデプロイするには、次の手順に従います。

  • OpenShift にログインします。
  • 開発者 UI を開きます。

※訳注: 必要に応じてデプロイを行うプロジェクトを作成してください。

  • 左側のメニューからHelmをクリックします。
  • 開発者カタログから Install a Helm Chart from the developer catalogをクリックします。これにより、 Helm Chartsカタログ ページが表示されます。 (図 2)
  • Filter by keywordフィールドに 「eap」と入力します。

図 2: OpenShift の Helm チャート カタログ

  • Helm チャートのリストからeap8を選択します。
  • Install Helm Chartをクリックします。
  • YAML view に切り替えます。
  • 図 3 に示すように charts/helm.yaml ファイルの内容を貼り付けます。
  • Installをクリックして Helm チャートをデプロイします。

図 3: Helm カタログから OpenShift に EAP Helm チャートをインストールする画面

Helm CLI を使用した Helm チャートのデプロイ

次にHelm CLIを使用してローカルからHelm チャートをデプロイしていきます。次の手順を実行します。

訳注:この手順ではローカルにHelm CLIとocコマンドがインストールされており、実行できる必要があります。コマンドラインでのOpenShift操作に慣れていない場合は読み飛ばしてください。

  • oc loginを使用してOpenShiftにログインします。
  • oc new-projectを使用してプロジェクトを作成します。
  • jboss-eap/eap8 Helm チャートを以下のコマンドで使用します。
helm install helloworld -f charts/helm.yaml --repo https://jbossas.github.io/eap-charts/ eap8
  • このコマンドを実行すると次のような内容が表示されます:
NAME: helloworld
LAST DEPLOYED: Fri Dec 16 12:52:27 2022
NAMESPACE: eap8-helm
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
  • バックグラウンドではEAP 8 アプリケーションがデプロイされています。ビルド状況を追跡するには、次のコマンドを実行します。(Ctrl-cで終了します。)
oc get build -w

(注:ビルドが完了するまでデプロイ中にErrImagePull とImagePullBackOffが報告されますが、問題ありません。ビルドが完了すると、イメージは自動的に展開されます。)

  • アプリケーションのデプロイ状況を追跡するには次のコマンドを実行します。(Ctrl-cで終了します。)
oc get deployment helloworld -w

アプリケーションのデプロイメントのテスト

OpenShiftのUI からは、OpenShiftのUIを使ってデプロイした場合とHelm CLIを使った場合の2つのビルドが実行されて完了していることが確認できます。その後、JBoss EAP インスタンスとデプロイされたアプリケーションを含むポッドがデプロイされます。 (図 4)

訳注: OpenShiftにUIからログインして左のメニューからTopologyを開いて、デプロイに使用したプロジェクトを選択してください。

図 4: OpenShift にデプロイされた JBoss EAP 8.0 アプリケーション

アプリケーションをテストするには、ルートアイコン*1をクリックします。OpenShift CLI を使用してルートからURLを確かめるには次のコマンドを入力します。

oc get routes

次のような出力が表示されます:

NAME         HOST/PORT                                                             PATH   SERVICES     PORT    TERMINATION     WILDCARD

helloworld   helloworld-eap8-helm.apps.cluster-xxx.xxx.hostname.com          helloworld   <all>   edge/Redirect   None

ブラウザから http:// + host*2 にアクセスしてください。

前にデプロイしたローカル ホストのインスタンスと同様にHello World!が表示されるはずです。アプリケーションは正常に構築され、OpenShift にデプロイされました。

要約

JBoss EAP 8.0 ではeap-maven-plugin を使用して OpenShift イメージ用の EAP をプロビジョニングおよび設定します。この記事ではeap-maven-plugin を既存の JBoss EAP 8.0 アプリケーションに追加する方法と利点を説明した後に、このプラグインを使用して JBoss EAP 8.0 サーバーのプロビジョニングをローカルでテストし、EAP 8 Helm チャートを使用してこのアプリケーションを OpenShift にデプロイしました。

*1:訳注: podの右上にある四角から飛び出している矢印のボタン

*2:訳注: 上の例だと http://helloworld-eap8-helm.apps.cluster-xxx.xxx.hostname.com OpenShiftの設定によってはhttpsの場合もあります。

* 各記事は著者の見解によるものでありその所属組織を代表する公式なものではありません。その内容については非公式見解を含みます。