JBoss EAP for OpenShift Container Platform のスタートガイド


Red Hat JBoss Enterprise Application Platform 7.4

Red Hat JBoss Enterprise Application Platform for OpenShift での開発ガイド

Red Hat Customer Content Services

概要

Red Hat JBoss Enterprise Application Platform for OpenShift の使用ガイド

JBoss EAP ドキュメントへのフィードバック (英語のみ)

エラーを報告したり、ドキュメントを改善したりするには、Red Hat Jira アカウントにログインし、課題を送信してください。Red Hat Jira アカウントをお持ちでない場合は、アカウントを作成するように求められます。

手順

  1. このリンクをクリック してチケットを作成します。
  2. ドキュメント URLセクション番号課題の説明 を記入してください。
  3. Summary に課題の簡単な説明を入力します。
  4. Description に課題や機能拡張の詳細な説明を入力します。問題があるドキュメントのセクションへの URL を含めてください。
  5. Submit をクリックすると、課題が作成され、適切なドキュメントチームに転送されます。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。まずは、マスター (master)、スレーブ (slave)、ブラックリスト (blacklist)、ホワイトリスト (whitelist) の 4 つの用語の置き換えから始めます。この取り組みは膨大な作業を要するため、今後の複数のリリースで段階的に用語の置き換えを実施して参ります。詳細は、Red Hat CTO である Chris Wright のメッセージ をご覧ください。

第1章 はじめに

1.1. Red Hat JBoss Enterprise Application Platform (JBoss EAP) とは

Red Hat JBoss Enterprise Application Platform 7.4 (JBoss EAP) は、オープン標準に構築されたミドルウェアプラットフォームで、Jakarta EE 8 仕様に準拠します。JBoss EAP は高可用性クラスターリング、メッセージング、分散キャッシングなどの機能の事前設定オプションを提供します。必要時のみにサービスを有効にできるモジュラー構造が含まれるため、起動速度が改善されます。

web ベースの管理コンソールと管理コマンドラインインターフェイス (CLI) により、XML 設定ファイルを編集する必要がなく、タスクをスクリプト化および自動化する機能が追加されます。さらに、JBoss EAP には、セキュアでスケーラブルな Jakarta EE アプリケーションの迅速な開発、デプロイ、および実行を可能にする API と開発フレームワークが含まれています。JBoss EAP 7.4 は Web Profile と Full Platform 仕様 の Jakarta EE 8 対応実装です。

1.2. OpenShift での JBoss EAP の仕組み

Red Hat は、OpenShift と使用するために設計された JBoss EAP のコンテナー化イメージを提供します。このイメージを使用すると、開発者はハイブリッド環境全体にデプロイされたアプリケーションを迅速かつ簡単にビルド、スケール、およびテストできます。

1.3. 比較: JBoss EAP および JBoss EAP for OpenShift

JBoss EAP 製品と JBoss EAP for OpenShift イメージを比較すると、顕著な違いがいくつかあります。以下の表は、これらの違いを説明し、JBoss EAP for OpenShift の現在のバージョンに含まれる機能またはサポートされる機能を示します。

Expand
表1.1 JBoss EAP と JBoss EAP for OpenShift の違い
JBoss EAP の機能JBoss EAP for OpenShift での状態説明

JBoss EAP 管理コンソール

含まれない

本リリースの JBoss EAP for OpenShift には JBoss EAP 管理コンソールは含まれません。

JBoss EAP 管理 CLI

非推奨

JBoss EAP 管理 CLI は、コンテナー化環境で実行されている JBoss EAP との使用が推奨されません。管理 CLI を使用して実行中のコンテナーで変更した設定内容は、コンテナーの再起動時に失われます。管理 CLI はトラブルシューティングの目的で Pod 内からアクセスできます

管理対象ドメイン

サポート対象外

JBoss EAP 管理対象ドメインはサポートされませんが、アプリケーションの作成および配布は OpenShift 上のコンテナーで管理されます。

デフォルトのルートページ

無効

デフォルトのルートページは無効になっていますが、独自のアプリケーションを ROOT.war としてルートコンテキストにデプロイできます。

リモートメッセージング

サポート対象

inter-Pod およびリモートメッセージングの Red Hat AMQ はサポートされます。ActiveMQ Artemis は、JBoss EAP インスタンスとの単一 Pod 内のメッセージングに対してのみサポートされ、Red Hat AMQ が存在しない場合のみ有効になります。

トランザクションリカバリー

一部サポート対象

EAP オペレーターは、OpenShift 4 におけるトランザクションリカバリーについて、テストおよびサポート対象の唯一のオプションです。EAP オペレーターを使用したトランザクションの回復の詳細は、EAP Operator for Safe Transaction Recovery を参照してください。

一部のシナリオはサポートされていません。サポートされていないシナリオの詳細は、サポートされないトランザクションリカバリーのシナリオ を参照してください。

組み込みメッセージングブローカー

非推奨

OpenShift コンテナーでの組み込みメッセージングブローカーの使用は非推奨となりました。組み込みブローカーのサポートは今後のリリースで削除されます。

コンテナーが組み込みメッセージングブローカーを使用するよう設定され、リモートブローカーが設定されていない場合は、警告がログに記録されます。

コンテナー設定にメッセージング宛先が含まれていない場合は、DISABLE_EMBEDDED_JMS_BROKER 環境変数を true に設定して、埋め込みメッセージングブローカーを設定する機能を無効にします。

1.4. バージョンの互換性とサポート

JBoss EAP for OpenShift は、OpenJDK 8 および OpenJDK 11 のイメージを提供します。

各イメージの 2 つのバリアントとして、S2I ビルダーイメージとランタイムイメージを使用できます。S2I ビルダーイメージには、S2I ビルド時に必要なツールを持つ完全な JBoss EAP サーバーが含まれます。ランタイムイメージには JBoss EAP の実行に必要な依存関係が含まれていますが、サーバーは含まれません。サーバーは、チェーンビルド時にランタイムイメージでインストールされます。

以下の変更は、JBoss EAP 7.4 for OpenShift のイメージに適用されました。

  • デフォルトのドライバーとモジュールは削除されます。
  • My SQL と Postgre SQL のテンプレートが削除されました。これらの機能は、カスタムレイヤーでプロビジョニングできます。
  • Hawkular エージェントはこれらのイメージでアクティブではありません。設定されている場合は無視されます。
  • データソース ExampleDS は、コンテナーの起動時にデフォルトで追加されなくなりました。デフォルトのデータソースが必要な場合は、値が true (ENABLE_GENERATE_DEFAULT_DATASOURCE=true) の環境変数 ENABLE_GENERATE_DEFAULT_DATASOURCE を使用してこれを追加します。
注記

次の検出メカニズムプロトコルは廃止され、他のプロトコルに置き換えられました。

  • openshift.DNS_PING プロトコルは非推奨となり、dns.DNS_PING プロトコルに置き換えられました。カスタマイズした standalone-openshift.xml ファイルで openshift.DNS_PING プロトコルを参照している場合は、プロトコルを dns.DNS_PING プロトコルに置き換えてください。
  • openshift.KUBE_PING 検索メカニズムプロトコルは非推奨となり、kubernetes.KUBE_PING プロトコルに置き換えられました。
Open JDK イメージでサポートされているアーキテクチャー

Open JDK イメージはいくつかのアーキテクチャーをサポートしています。この情報は、次の表に要約されています。

  1. OpenJDK イメージおよびアーキテクチャー
Expand

JDK (OS)

アーキテクチャーのサポート

Red Hat エコシステムカタログ

OpenJDK8 (RHEL 7)

x86_64

ビルダーイメージ および ランタイムイメージ

OpenJDK11 (RHEL 8)

x86_64、IBMZ、および IBM Power

ビルダーイメージ および ランタイムイメージ

JBoss EAP for OpenShift は頻繁に更新されます。そのため、イメージのどのバージョンが OpenShift のどのバージョンと互換性があるかを理解することが重要になります。

1.4.1. OpenShift 4.x サポート

OpenShift 4.1 の変更は Jolokia へのアクセスに影響します。Open Java Console は OpenShift 4.x Web コンソールで利用できなくなりました。

以前のリリースの OpenShift では、プロキシー化された特定の kube-apiserver 要求が認証され、クラスターに渡されていました。この動作は安全ではないと見なされているため、この方法での Jolokia へのアクセスはサポート対象外になりました。

OpenShift コンソールのコードベースの変更により、Open Java Console へのリンクが利用できなくなりました。

1.4.2. IBM Z サポート

libartemis-native の s390x バリアントはイメージに含まれません。そのため、AIO に関連するいかなる設定も考慮されません。

  • journal-type: journal-typeASYNCIO に設定しても効果はありません。この属性の値は、起動時に NIO にデフォルト設定されます。
  • journal-max-io: この属性は影響を受けません。
  • journal-store-enable-async-io: この属性は影響を受けません。

1.4.3. OpenShift での JBoss EAP 7.1 から JBoss EAP 7.4 へのアップグレード

OpenShift において JBoss EAP 7.1 でインストールされたファイル standalone-openshift.xml は、JBoss EAP 7.4 以降と互換性がありません。OpenShift 用の JBoss EAP 7.4 以降のコンテナーを起動するには、JBoss EAP 7.1 でインストールされた standalone-openshift.xml ファイルを変更する必要があります。

1.5. デプロイメントのオプション

以下のオプションのいずれかを使用して、JBoss EAP Java アプリケーションを OpenShift にデプロイできます。

  • JBoss EAP for OpenShift テンプレート。
  • EAP オペレーターは JBoss EAP 固有のコントローラーです。これは、OpenShift ユーザーの代わりに複雑なステートフルアプリケーションのインスタンスの作成、設定、管理を行うために OpenShift API を拡張します。

    注記

    EAP オペレーターは、OpenShift 4 以降のバージョンでのみサポートされます。

第2章 JBoss EAP for OpenShift イメージでの Java アプリケーションのビルドおよび実行

以下のワークフローでは、Source-to-Image (S2I) プロセスを使用して JBoss EAP for OpenShift イメージ上で Java アプリケーションをビルドおよび実行します。

たとえば、この手順では kitchensink クイックスタートが使用されます。これは、Jakarta Server Faces、Jakarta Contexts and Dependency Injection、Jakarta Enterprise Beans、Jakarta Persistence、および Jakarta Bean Validation を使用して Jakarta EE の web 対応データベースアプリケーションを実行します。詳細は、JBoss EAP 7 に同梱される kitchensink クイックスタートを参照してください。

2.1. 前提条件

OpenShift インスタンスがインストールされ、操作可能になっています。OpenShift インスタンスのインストールと設定の詳細については、OpenShift Container Platform 入門ガイド を参照してください。

2.2. アプリケーションのデプロイメントに向けた OpenShift の準備

  1. oc login コマンドを使用して、OpenShift インスタンスにログインします。
  2. OpenShift で新しいプロジェクトを作成します。

    プロジェクトでは、1 つのユーザーグループが他のグループとは別にコンテンツを整理および管理することができます。以下のコマンドを使用すると OpenShift でプロジェクトを作成できます。

    $ oc new-project <project_name>
    Copy to Clipboard Toggle word wrap

    たとえば、以下のコマンドを使用して、kitchensink クイックスタートで eap-demo という名前の新規プロジェクトを作成します。

    $ oc new-project eap-demo
    Copy to Clipboard Toggle word wrap
  3. 任意の手順 : キーストアおよびシークレットを作成します。

    注記

    OpenShift プロジェクトで HTTPS 対応の機能を使用する場合、キーストアとシークレットの作成が必要になります。たとえば、eap74-https-s2i テンプレートを使用している場合、キーストアとシークレットを作成する必要があります。

    kitchensink クイックスタートのこのワークフローは、HTTPS テンプレートを使用しないため、キーストアとシークレットは必要ありません。

    1. キーストアを作成します。

      警告

      以下のコマンドは自己署名証明書を生成しますが、本番環境では信用性が確認された認証局 (CA) から購入した独自の SSL 証明書を SSL で暗号化された接続 (HTTPS) に使用することが推奨されます。

      以下のように、Java keytool コマンドを使用して、キーストアを生成することができます。

      $ keytool -genkey -keyalg RSA -alias <alias_name> -keystore <keystore_filename.jks> -validity 360 -keysize 2048
      Copy to Clipboard Toggle word wrap

      たとえば、kitchensink クイックスタートでは、以下のコマンドを使用してキーストアを生成します。

      $ keytool -genkey -keyalg RSA -alias eapdemo-selfsigned -keystore keystore.jks -validity 360 -keysize 2048
      Copy to Clipboard Toggle word wrap
    2. キーストアからシークレットを作成します。

      以下のコマンドを使用して、作成したキーストアからシークレットを作成します。

      $ oc create secret generic <secret_name> --from-file=<keystore_filename.jks>
      Copy to Clipboard Toggle word wrap

      たとえば、kitchensink クイックスタートでは、以下のコマンドを使用してシークレットを作成します。

      $ oc create secret generic eap7-app-secret --from-file=keystore.jks
      Copy to Clipboard Toggle word wrap

2.3. Red Hat コンテナーレジストリーへの認証の設定

JBoss EAP for OpenShift イメージをインポートおよび使用する前に、最初に Red Hat コンテナーレジストリーへの認証を設定する必要があります。

Red Hat は、レジストリーサービスアカウントを使用して認証トークンを作成し、Red Hat コンテナーレジストリーへのアクセスを設定することを推奨します。こうすると、お持ちの Red Hat アカウントのユーザー名やパスワードを OpenShift 設定に使用または保存する必要がありません。

  1. Red Hat カスタマーポータルの手順にしたがって、レジストリーサービスアカウントを使用して認証トークンを作成します
  2. トークンの OpenShift シークレットが含まれる YAML ファイルをダウンロードします。YAML ファイルは、トークンの Token Information ページの OpenShift Secret タブからダウンロードできます。
  3. ダウンロードした YAML ファイルを使用して、OpenShift プロジェクトの認証トークンシークレットを作成します。

    oc create -f 1234567_myserviceaccount-secret.yaml
    Copy to Clipboard Toggle word wrap
  4. 例のコマンドを使用して、OpenShift プロジェクトのシークレットを設定します。シークレット名は前のステップで作成したシークレットの名前に置き換えてください。

    oc secrets link default 1234567-myserviceaccount-pull-secret --for=pull
    oc secrets link builder 1234567-myserviceaccount-pull-secret --for=pull
    Copy to Clipboard Toggle word wrap

セキュリティー保護されたレジストリーへのアクセス設定方法 については、OpenShift ドキュメントを参照してください。

Red Hat コンテナーレジストリーへの認証の設定 に関する詳細は、Red Hat カスタマーポータルを参照してください。

2.4. 最新の JBoss EAP for OpenShift イメージストリームおよびテンプレートのインポート

JDK の最新の JBoss EAP for OpenShift イメージストリームおよびテンプレートを OpenShift プロジェクトの namespace にインポートする必要があります。

注記

カスタマーポータルの認証情報を使用して Red Hat Container Registry にログインし、JBoss EAP イメージストリームおよびテンプレートをインポートします。詳細は、Red Hat コンテナーレジストリーの認証 を参照してください。

JDK 8 の import コマンド
oc replace -f \
https://raw.githubusercontent.com/jboss-container-images/jboss-eap-openshift-templates/eap74/eap74-openjdk8-image-stream.json
Copy to Clipboard Toggle word wrap

このコマンドは以下のイメージストリームおよびテンプレートをインポートします。

  • JDK 8 ビルダーイメージストリーム: jboss-eap74-openjdk8-openshift
  • JDK 8 ランタイムイメージストリーム: jboss-eap74-openjdk8-runtime-openshift
注記

OpenShift 3 を使用して初めて EAP 7.4 ImageStream を作成する場合は、oc replace の代わりに次のコマンドを実行します。

oc create -f https://raw.githubusercontent.com/jboss-container-images/jboss-eap-openshift-templates/eap74/eap74-openjdk8-image-stream.json
Copy to Clipboard Toggle word wrap
JDK 11 の import コマンド
oc replace -f \
https://raw.githubusercontent.com/jboss-container-images/jboss-eap-openshift-templates/eap74/eap74-openjdk11-image-stream.json
Copy to Clipboard Toggle word wrap

このコマンドは以下のイメージストリームおよびテンプレートをインポートします。

  • JDK 11 ビルダーイメージストリーム: jboss-eap74-openjdk11-openshift
  • JDK 11 ランタイムイメージストリーム: jboss-eap74-openjdk11-runtime-openshift
テンプレートの import コマンド
for resource in \
  eap74-amq-persistent-s2i.json \
  eap74-amq-s2i.json \
  eap74-basic-s2i.json \
  eap74-https-s2i.json \
  eap74-sso-s2i.json

do
  oc replace -f \
https://raw.githubusercontent.com/jboss-container-images/jboss-eap-openshift-templates/eap74/templates/${resource}
done
Copy to Clipboard Toggle word wrap

このコマンドは、コマンドで指定されたすべてのテンプレートをインポートします。

注記

上記のコマンドを使用してインポートされた JBoss EAP イメージストリームおよびテンプレートは、OpenShift プロジェクト内のみで利用できます。

一般的な openshift namespace にアクセスできる管理者権限を持っている場合、すべてのプロジェクトがイメージストリームおよびテンプレートにアクセスできるようにするには、コマンドの oc replace 行に -n openshift を追加します。以下に例を示します。

...
oc replace -n openshift -f \
...
Copy to Clipboard Toggle word wrap

cluster-samples-operator を使用する場合は、クラスターサンプルオペレーターの設定についての OpenShift ドキュメントを参照してください。クラスターサンプルオペレーターの設定の詳細は、サンプルオペレーターの設定 を参照してください。

2.5. JBoss EAP S2I (Source-to-Image) アプリケーションの OpenShift へのデプロイ

イメージおよびテンプレートのインポート後に、アプリケーションを OpenShift にデプロイできます。

前提条件

オプション: テンプレートは、多くのテンプレートパラメーターにデフォルト値を指定でき、一部またはすべてのデフォルトをオーバーライドする必要がある場合があります。パラメーターのリストやデフォルト値などのテンプレートの情報を表示するには、コマンド oc describe template TEMPLATE_NAME を使用します。

手順

  1. JBoss EAP for OpenShift イメージと Java アプリケーションのソースコードを使用して、新しい OpenShift アプリケーションを作成します。S2I ビルド用に提供される JBoss EAP for OpenShift テンプレートのいずれかを使用できます。トリムされたサーバーのプロビジョニングも選択できます。

    たとえば、JDK 8 ビルダーイメージを使用して kitchensink クイックスタートをディプロイするには、アプリケーションのデプロイメントに向けた OpenShift の準備 で GitHub の kitchensink ソースコードを使用して作成した eap-demo プロジェクトに eap74-basic-s2i テンプレートを使用します。このクイックスタートはトリム機能に対応していません。

    oc new-app --template=eap74-basic-s2i \ 
    1
    
     -p IMAGE_STREAM_NAMESPACE=eap-demo \ 
    2
    
     -p EAP_IMAGE_NAME=jboss-eap74-openjdk8-openshift:7.4.0 \ 
    3
    
     -p EAP_RUNTIME_IMAGE_NAME=jboss-eap74-openjdk8-runtime-openshift:7.4.0 \ 
    4
    
     -p SOURCE_REPOSITORY_URL=https://github.com/jboss-developer/jboss-eap-quickstarts \ 
    5
    
     -p SOURCE_REPOSITORY_REF=7.4.x \ 
    6
    
     -p CONTEXT_DIR=kitchensink 
    7
    Copy to Clipboard Toggle word wrap
    1
    使用するテンプレート。
    2
    最新のイメージとテンプレートは、プロジェクトの namespace にインポートされたため、イメージストリームが見つかる場所の namespace を指定する必要があります。通常はプロジェクトの名前になります。
    3
    JDK8 の EAP ビルダーイメージストリームの名前。
    4
    JDK8 の EAP ランタイムイメージストリームの名前。
    5
    アプリケーションのソースコードが含まれるリポジトリーの URL。
    6
    ソースコードに使用する Git リポジトリー参照。Git ブランチやタグ参照にすることができます。
    7
    ビルドするソースリポジトリー内のディレクトリー。

    別の例として、JDK 11 ランタイムイメージを使用し、JBoss EAP をトリムして helloworld-html5 クイックスタートをデプロイするには jaxrs-server レイヤーのみを含め、以下のコマンドを入力します。このコマンドは、GitHub の helloworld-html5 ソースコードとともに アプリケーションのデプロイメントに向けた OpenShift の準備 で作成した、eap-demo プロジェクトで eap74-basic-s2i テンプレートを使用します。

    oc new-app --template=eap74-basic-s2i \ 
    1
    
     -p IMAGE_STREAM_NAMESPACE=eap-demo \ 
    2
    
     -p EAP_IMAGE_NAME=jboss-eap74-openjdk11-openshift:7.4.0 \ 
    3
    
     -p EAP_RUNTIME_IMAGE_NAME=jboss-eap74-openjdk11-runtime-openshift:7.4.0 \ 
    4
    
     -p SOURCE_REPOSITORY_URL=https://github.com/jboss-developer/jboss-eap-quickstarts \ 
    5
    
     -p SOURCE_REPOSITORY_REF=7.4.x \ 
    6
    
     -p GALLEON_PROVISION_LAYERS=jaxrs-server \ 
    7
    
     -p CONTEXT_DIR=helloworld-html5 
    8
    Copy to Clipboard Toggle word wrap
    1
    使用するテンプレート。
    2
    最新のイメージとテンプレートは、プロジェクトの namespace にインポートされたため、イメージストリームが見つかる場所の namespace を指定する必要があります。通常はプロジェクトの名前になります。
    3
    JDK11 の EAP ビルダーイメージストリームの名前。
    4
    JDK11 の EAP ランタイムイメージストリームの名前。
    5
    アプリケーションのソースコードが含まれるリポジトリーの URL。
    6
    ソースコードに使用する Git リポジトリー参照。Git ブランチやタグ参照にすることができます。
    7
    jaxrs-server レイヤーのみを持つトリムされたサーバーをプロビジョニングします。
    8
    ビルドするソースリポジトリー内のディレクトリー。
    注記

    新しい OpenShift アプリケーションを作成するときに、環境変数を設定 することもあります。

    たとえば、eap74-https-s2i などの HTTPS テンプレートを使用している場合は、必要な HTTPS 環境変数 である HTTPS_NAMEHTTPS_PASSWORD、および HTTPS_KEYSTORE を指定し、キーストアの詳細と一致するようにする必要があります。

    注記

    テンプレートで AMQ が使用される場合は、AMQ_IMAGE_NAME パラメーターに適切な値を含める必要があります。

    テンプレートが SSO を使用する場合は、適切な値を指定して SSO_IMAGE_NAME パラメーターを含める必要があります。

  2. ビルド設定の名前を取得します。

    $ oc get bc -o name
    Copy to Clipboard Toggle word wrap
  3. 取得したビルド設定の名前を使用し、Maven のビルドの進捗を表示します。

    $ oc logs -f buildconfig/BUILD_CONFIG_NAME
    Copy to Clipboard Toggle word wrap

    たとえば、kitchensink クイックスタートでは、以下のコマンドで Maven ビルドの進捗を表示します。

    $ oc logs -f buildconfig/eap-app
    Copy to Clipboard Toggle word wrap

2.6. デプロイメント後のタスク

アプリケーションによっては、OpenShift アプリケーションのビルドおよびデプロイ後に一部のタスクを実行する必要がある場合があります。これには、サービスを公開して OpenShift の外部からアプリケーションを閲覧可能にする作業や、アプリケーションを特定数のレプリカにスケーリングする作業などが含まれることがあります。

  1. 以下のコマンドを使用してアプリケーションのサービス名を取得します。

    $ oc get service
    Copy to Clipboard Toggle word wrap
  2. メインサービスをルートとして公開し、OpenShift 外部からアプリケーションにアクセスできるようにします。たとえば、kitchensink クイックスタートでは、以下のコマンドを使用して必要なサービスとポートを公開します。

    $ oc expose service/eap-app --port=8080
    Copy to Clipboard Toggle word wrap
    注記

    テンプレートを使用してアプリケーションを作成した場合は、ルートがすでに存在することがあります。存在する場合は次のステップに進みます。

  3. ルートの URL を取得します。

    $ oc get route
    Copy to Clipboard Toggle word wrap
  4. この URL を使用して web ブラウザーでアプリケーションにアクセスします。URL は前のコマンド出力にある HOST/PORT フィールドの値になります。

    アプリケーションが JBoss EAP ルートコンテキストを使用しない場合、アプリケーションのコンテキストを URL に追加します。たとえば、kitchensink クイックスタートでは、URL は http://HOST_PORT_VALUE/kitchensink/ のようになります。

  5. 任意で、以下のコマンドを実行してアプリケーションインスタンスをスケールアップすることもできます。これは、レプリカの数を 3 に増やします。

    $ oc scale deploymentconfig DEPLOYMENTCONFIG_NAME --replicas=3
    Copy to Clipboard Toggle word wrap

    たとえば、kitchensink クイックスタートでは、以下のコマンドを使用してアプリケーションをスケールアップします。

    $ oc scale deploymentconfig eap-app --replicas=3
    Copy to Clipboard Toggle word wrap

2.7. JBoss EAP for OpenShift でのチェーンビルドのサポート

JBoss EAP for OpenShift は OpenShift でのチェーンビルドをサポートします。

JBoss EAP for OpenShift テンプレートはチェーンビルドを採用しています。これらのテンプレートを使用する場合は、ビルドの結果は以下のようになります。

  • [application name]-build-artifacts という名前の中間イメージ
  • 最終的なイメージ [アプリケーション名]

チェーンビルドの詳細は、OpenShift ドキュメントを参照してください。

第3章 Helm チャートを使用した OpenShift への JBoss EAP 7 アプリケーションのデプロイ

Helm チャートを使用することで、JBoss EAP 7 で Jakarta EE アプリケーションを OpenShift にデプロイして、実行できます。Helm は、アプリケーションやサービスの OpenShift Container Platform クラスターへのデプロイメントを単純化するソフトウェアパッケージマネージャーです。Helm はチャートというパッケージ形式を使用します。Helm チャートは、OpenShift Container Platform リソースを記述するファイルのコレクションです。以下の手順では、OpenShift Container Platform Web コンソールで Helm チャートを使用して Jakarta EE アプリケーションをデプロイおよび実行する方法を示しています。

重要

この機能はテクノロジープレビューとしてのみ提供されます。テクノロジープレビューの機能は本番環境での使用はサポートされず、今後大きな変更がある場合があります。テクノロジープレビュー機能のサポート範囲は、Red Hat カスタマーポータルの テクノロジープレビュー機能のサポート範囲 を参照してください。

3.1. 前提条件

注記
  • OpenShift Sandbox を使用して、OpenShift Container Platform 上で JBoss EAP アプリケーションをデプロイして実行することもできます。これは期間限定で利用できるトライアルサンドボックスです。
  • このドキュメントでは、サンプルの Jakarta EE アプリケーションを使用します。同じ手順を使用して、独自の Jakarta EE アプリケーションをデプロイできます。詳細は、https://github.com/jboss-eap-up-and-running/eap7-getting-started を参照してください。

3.2. Helm を使用した JBoss EAP EAP 7 アプリケーションの作成

OpenShift Web コンソールで Helm チャートを使用して JBoss EAP 7 アプリケーションを作成できます。

手順

  1. メインナビゲーションで、ドロップダウンメニューをクリックして、Developer を選択します。
  2. ナビゲーションメニューで Add をクリックします。

    Add ページが開きます。

  3. Add ページで、Helm Chart をクリックします。
  4. Helm Charts カタログで、JBoss EAP 7.4 を検索します。
  5. JBoss EAP 7.4 Helm チャートタイルをクリックします。

    サイドパネルには、JBoss EAP 7 Helm チャートに関する情報が表示されます。

  6. Install Helm Chart をクリックします。

    一部のフォームセクションはデフォルトで折りたたまれています。> をクリックしてデプロイし、内容を表示します。

    注記

    続行するためにこれらのセクションを更新する必要はありません。

    構築およびデプロイしている Jakarta EE アプリケーションの詳細は、build.uri フィールドに指定されます。

    build:
      uri: https://github.com/jboss-eap-up-and-running/eap7-getting-started
    Copy to Clipboard Toggle word wrap
    注記

    別のアプリケーションを構築している場合は、そのアプリケーションの Git リポジトリーを指すようにこの uri フィールドを変更する必要があります。

  7. Install をクリックして、Helm チャートを使用して JBoss EAP 7 アプリケーションを作成します。

検証

  • Helm リリースは、JBoss EAP アイコンと eap74 テキストを含む破線のボックスで表されます。このコンテンツは破線のボックスの外側に配置されます。このデプロイメントは、テキスト D eap74 を使用して、ダッシュボックス内の円で表示されます。

    • eap74 Helm Release が表示されていることを確認します。
    • eap74 デプロイメントが表示されていることを確認します。

3.3. Helm リリースの表示

Helm チャートを使用して JBoss EAP 7 アプリケーションを正常に作成したら、Helm リリースに関連するすべての情報を表示できます。

前提条件

手順

  1. ナビゲーションメニューで、Helm をクリックします。
  2. eap74 Helm リリース をクリックします。

    Helm Release details ページが開きます。インストールした Helm リリースに関連するすべての情報が表示されます。

  3. Resources タブをクリックします。この Helm リリースで作成されたすべてのリソースがリストされます。

検証

  • Helm リリース eap74 の横に Deployed ラベルが表示されていることを確認します。

3.4. 関連するコードの表示

Helm チャートを使用して JBoss EAP 7 アプリケーションを正常に作成したら、関連するコードを表示できます。

前提条件

手順

  1. ナビゲーションメニューで、Topology をクリックします。

    トポロジービュー では、eap74 デプロイメントの右下隅にコードアイコンが表示されます。

    このアイコンは、関連するコードの Git リポジトリーを表すか、適切な operator がインストールされている場合は、IDE で関連するコードを表示します。

  2. 表示されているアイコンが CodeReady Workspaces または Eclipse Che の場合は、それをクリックして関連するコードを IDE に表示します。それ以外の場合は、クリックして関連する Git リポジトリーに移動します。

検証

  • アプリケーションに関連付けられたコードが Git リポジトリーまたは IDE で表示されることを確認します。

3.5. ビルドステータスの表示

Helm チャートを使用して JBoss EAP 7 アプリケーションを正常に作成したら、ビルドステータスを表示できます。

前提条件

手順

  1. ナビゲーションメニューで、トポロジー をクリックします。
  2. Topology ビューで、D eap74 アイコンをクリックします。

    サイドパネルが開き、アプリケーションに関する詳細情報が表示されます。

  3. サイドパネルで、Resources タブをクリックします。Builds セクションには、アプリケーションのビルドに関連するすべての詳細が表示されます。
注記

JBoss EAP 7 アプリケーションは 2 つのステップで構築されます。

  • 最初のビルド設定 eap74-build-artifacts は Jakarta EE アプリケーションをコンパイルおよびパッケージ化し、JBoss EAP サーバーを作成します。アプリケーションはこの JBoss EAP サーバー上で実行されます。

ビルドが完了するまでに数分かかる場合があります。ビルドは PendingRunning、および Complete などのさまざまな状態になります。ビルドの状態は、関連するメッセージによって示されます。

ビルドが完了すると、チェックマークと次のメッセージが表示されます。Build #1 was complete

  • 2 番目のビルド設定 eap74 は、アプリケーションの実行に必要なもののみを含むランタイムイメージに Jakarta EE デプロイメントと JBoss EAP サーバーを配置します。

2 番目のビルドが完了すると、チェックマークと次のメッセージが表示されます: Build #2 was completed

  • 最初のビルドが完了すると、2 番目のビルドが開始されます。

検証

  • eap74-build-artifactseap74 の 2 つのビルドが完了していることを確認します。

    • eap74-build-artifacts ビルド設定は、Build #1 was complete というメッセージが表示されます。
    • eap74 ビルド設定に対して Build #2 was complete というメッセージが表示されます。

3.6. Pod のステータスの表示

Helm チャートを使用して JBoss EAP 7 アプリケーションを正常に作成したら、Pod のステータスを表示できます。

前提条件

手順

  1. ナビゲーションメニューで、Topology をクリックします。
  2. Topology ビューで、D eap74 をクリックします。

    サイドパネルが開き、アプリケーションに関する詳細情報が表示されます。

  3. 詳細タブで Pod の上にマウスを置くと、ツールチップで Pod のステータスが表示されます。

    • Pod の数は Pod の円の内側に表示されます。
    • Pod の円の色は Pod のステータスを示します。Light blue = PendingBlue = Not ReadyDark blue = Running

      注記

      Topology ビューでは、D eap74 デプロイメントアイコンの外側の黒い円も Pod のステータスを示します。

検証

  • Pod の円内のテキストに 1 pod が表示されていることを確認します。
  • Pod の円の上にカーソルを置くと、その円に 1 Running と表示されることを確認します。

3.7. JBoss EAP 7 アプリケーションの実行

Helm を使用して JBoss EAP 7 アプリケーションを正常に作成および構築したら、それにアクセスできるようになります。

前提条件

手順

  • Topology view で、右上隅にある外部リンクアイコンをクリックして URL を開き、別のブラウザーウィンドウでアプリケーションを実行します。

    注記

    このアクションにより、Web ブラウザーウィンドウに URL が開きます。

検証

  • Red Hat OpenShift 上のアプリケーション JBoss EAP 7 が別のブラウザーウィンドウで開くことを確認します。

第4章 Java アプリケーションに対して JBoss EAP for OpenShift イメージを設定

JBoss EAP for OpenShift のイメージは、Java アプリケーションとの基本的な使用に対して事前設定されています。しかし、JBoss EAP インスタンスをイメージ内部で設定できます。OpenShift S2I プロセスをアプリケーションテンプレートパラメーターと環境変数とともに使用する方法が推奨されます。

重要

コンテナーが再起動または終了すると、実行中のコンテナーで変更された設定内容はすべて失われます。

これには、add-user.sh や管理 CLI などの、従来の JBoss EAP インストールに含まれるスクリプトを使用して変更された設定が含まれます。

OpenShift S2I プロセスをアプリケーションテンプレートパラメーターと環境変数とともに使用して、JBoss EAP for OpenShift イメージ内部の JBoss EAP インスタンスの設定を変更することが強く推奨されます。

4.1. JBoss EAP for OpenShift の S2I プロセスの仕組み

JBoss EAP の S2I プロセスを示すフローチャート:

  1. pom.xml ファイルがソースコードリポジトリーにある場合、S2I ビルダーイメージは Maven ビルドプロセスを開始します。Maven ビルドは $MAVEN_ARGS の内容を使用します。

    pom.xml ファイルがソースコードリポジトリーにない場合、S2I ビルダーイメージはバイナリータイプのビルドを開始します。

    カスタム Maven 引数またはオプションを追加するには、$MAVEN_ARGS_APPEND を使用します。$MAVEN_ARGS_APPEND 変数は、$MAVEN_ARGS にオプションを追加します。

    デフォルトでは、OpenShift プロファイルは Maven の package ゴールを使用します。これには、テストをスキップするシステムプロパティー (-DskipTests) や Red Hat GA リポジトリーを有効にするシステムプロパティー (-Dcom.redhat.xpaas.repo) が含まれます。

    成功した Maven ビルドの結果は、JBoss EAP for OpenShift イメージ内の EAP_HOME/standalone/deployments/ ディレクトリーにコピーされます。これには、$ARTIFACT_DIR 環境変数によって指定されたソースリポジトリーからの JAR、WAR、および EAR ファイルがすべて含まれます。$ARTIFACT_DIR のデフォルト値は Maven のターゲットディレクトリーです。

    注記

    JBoss EAP for OpenShift イメージのプロキシーの背後で Maven を使用するには、$HTTP_PROXY_HOST および $HTTP_PROXY_PORT 環境変数を設定します。任意で、$HTTP_PROXY_USERNAME$HTTP_PROXY_PASSWORD、および $HTTP_PROXY_NONPROXYHOSTS 変数を設定することもできます。

  2. modules ソースリポジトリーディレクトリーのすべてのファイルは、JBoss EAP for OpenShift イメージ内の EAP_HOME/modules/ ディレクトリーにコピーされます。
  3. configuration ソースリポジトリーディレクトリーのすべてのファイルは、JBoss EAP for OpenShift イメージ内の EAP_HOME/standalone/configuration/ ディレクトリーにコピーされます。カスタムの JBoss EAP 設定ファイルを使用する場合は、ファイル名を standalone-openshift.xml にする必要があります。

関連情報

4.2. 環境変数を使用した JBoss EAP for OpenShift の設定

JBoss EAP for OpenShift イメージを設定する方法として、環境変数の使用が推奨されます。アプリケーションコンテナーおよびビルドコンテナーに 環境変数を指定 する方法については、OpenShift ドキュメントを参照してください。

たとえば、OpenShift アプリケーションの作成時に、環境変数を使用して JBoss EAP インスタンスの管理ユーザー名およびパスワードを設定することができます。

oc new-app --template=eap74-basic-s2i \
 -p IMAGE_STREAM_NAMESPACE=eap-demo \
 -p SOURCE_REPOSITORY_URL=https://github.com/jboss-developer/jboss-eap-quickstarts \
 -p SOURCE_REPOSITORY_REF=7.4.x \
 -p CONTEXT_DIR=kitchensink \
 -e ADMIN_USERNAME=myspecialuser \
 -e ADMIN_PASSWORD=myspecialp@ssw0rd
Copy to Clipboard Toggle word wrap

JBoss EAP for OpenShift イメージの利用可能な環境変数は、参考情報 のリストを参照してください。

4.2.1. JVM のメモリー設定

OpenShift EAP イメージには、現在の環境に基づいてデフォルトの JVM メモリー設定を自動的に計算するメカニズムがあります。ただし、環境変数を使用して JVM メモリーを設定することも可能です。

4.2.1.1. JVM のデフォルトメモリー設定

現在のコンテナーに対してメモリー制限が定義されており、この制限が利用可能なメモリーの合計よりも小さい場合、デフォルトの JVM メモリー設定は自動的に算出されます。それ以外の場合、デフォルトの JVM メモリー設定は、イメージのベースサーバーとして使用される EAP バージョンの standalone.conf ファイルで定義されます。

コンテナーのメモリー制限は、/sys/fs/cgroup/memory/memory.limit_in_bytes ファイルから取得されます。利用可能なメモリーの合計は、/proc/meminfo コマンドで取得されます。

メモリー設定が自動的に算出されると、以下の式が使用されます。

  • 最大ヒープサイズ (-Xmx): ユーザーメモリーの 50%
  • 初期ヒープサイズ (-Xms): 計算済み最大ヒープサイズの 25%。

たとえば、定義したメモリー制限が 1 GB で、この制限が /proc/meminfo に示されている利用可能なメモリー合計よりも低い場合、そのメモリー設定は -Xms128m -Xmx512 になります。

以下の環境変数を使用して、自動的に計算された JVM 設定を変更できます。これらの変数は、デフォルトメモリーサイズが自動的に算出される場合にのみ使用されることに注意してください (つまり、有効なコンテナーのメモリー制限が定義されているとき)。

  • JAVA_MAX_MEM_RATIO
  • JAVA_INITIAL_MEM_RATIO
  • JAVA_MAX_INITIAL_MEM

以下の 2 つの環境変数の値を 0 に設定すると、メモリーの自動計算を無効にできます。

  • JAVA_INITIAL_MEM_RATIO
  • JAVA_MAX_MEM_RATIO
4.2.1.2. JVM ガベージコレクションの設定

OpenShift の EAP イメージには、コレクションとガべージコレクションロギングの両方の設定が含まれます。

ガベージコレクションの設定

-XX:+UseParallelOldGC -XX:MinHeapFreeRatio=10 -XX:MaxHeapFreeRatio=20 -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90 -XX:+ExitOnOutOfMemoryError

Java 8 のガベージコレクションのロギング設定 (非モジュール JVM)

-verbose:gc -Xloggc:/opt/eap/standalone/log/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=3M -XX:-TraceClassUnloading

Java 11 (modular JVM) のガベージコレクションのロギング設定

-Xlog:gc*:file=/opt/eap/standalone/log/gc.log:time,uptimemillis:filecount=5,filesize=3M

4.2.1.3. デフォルト設定のリソース制限

これが設定されている場合には、追加のデフォルト設定がイメージに含まれます。

-XX:ParallelGCThreads={core-limit} -Djava.util.concurrent.ForkJoinPool.common.parallelism={core-limit} -XX:CICompilerCount=2

{core-limit} の値は、JAVA_CORE_LIMIT 環境変数を使用するか、コンテナーによる CPU コア制限で定義されます。

CICompilerCount の値は常に 2 に固定されます。

4.2.1.4. JVM 環境変数

これらの環境変数を使用して、EAP for OpenShift イメージで JVM を設定します。

Expand
表4.1 JVM 環境変数
変数名デフォルト値JVM の設定説明

JAVA_OPTS

-verbose:class

デフォルトなし

multiple

java コマンドに渡す JVM オプション。

JAVA_OPTS_APPEND を使用して追加の JVM 設定を設定します。JAVA_OPTS を使用すると、一部の未設定のデフォルト値がサーバー JVM 設定に追加されません。これらの設定は、明示的に追加する必要があります。

JAVA_OPTS を使用すると、コンテナースクリプトによりデフォルトで追加された特定の設定が無効になります。無効な設定には以下が含まれます。

  • -XX:MetaspaceSize=96M
  • -Djava.net.preferIPv4Stack=true
  • -Djboss.modules.system.pkgs=jdk.nashorn.api,com.sun.crypto.provider
  • -Djava.awt.headless=true

さらに、自動メモリー計算が有効になっていない場合、初期 Java メモリー (-Xms) および最大 Java メモリー (-Xmx) は定義されません。

JAVA_OPTS を使用して追加設定を行う場合は、これらのデフォルトを追加します。

JAVA_OPTS_APPEND

-Dsome.property=value

デフォルトなし

Multiple

JAVA_OPTS で生成されたオプションに追加するユーザー指定の Java オプション。

JAVA_MAX_MEM_RATIO

50

50

-Xmx

-Xmx オプションが JAVA_OPTS に指定されていない場合には、この変数を使用します。この変数の値は、コンテナーの制限に基づいてデフォルトの最大ヒープメモリーサイズを算出するために使用されます。この変数がメモリー制限なしで、コンテナー内で使用される場合、この変数の効果はありません。この変数がメモリー制約のあるコンテナーで使用されると、-Xmx の値はコンテナーで使用できるメモリーの指定の比率に設定されます。デフォルト値の 50 は、利用可能なメモリーの 50% が上限として使用されることを意味します。最大メモリーの計算を省略するには、この変数の値を 0 に設定します。JAVA_OPTS には、-Xmx オプションは追加されません。

JAVA_INITIAL_MEM_RATIO

25

25

-Xms

この変数は、-Xms オプションが JAVA_OPTS で指定されていない場合に使用します。この変数の値は、最大ヒープメモリーサイズを基にしたデフォルトの初期ヒープメモリーサイズの算出に使用されます。この変数がメモリー制限なしで、コンテナー内で使用される場合、この変数の効果はありません。この変数がメモリー制約のあるコンテナーで使用されている場合、-Xms の値が Xmx メモリーの指定比に設定されます。デフォルト値の 25 は、初期ヒープサイズとして最大メモリーの 25% が使用されることを意味します。初期メモリーの計算を省略するには、この変数の値を 0 に設定します。JAVA_OPTS には -Xms オプションは追加されません。

JAVA_MAX_INITIAL_MEM

4096

4096

-Xms

この変数は、-Xms オプションが JAVA_OPTS で指定されていない場合に使用します。この変数の値は、初期メモリーヒープの最大サイズの算出に使用されます。この値はメガバイト (MB) で示されます。この変数がメモリー制限なしで、コンテナー内で使用される場合、この変数の効果はありません。この変数がメモリー制約のあるコンテナーで使用されると、-Xms の値は、その変数で指定された値に設定されます。デフォルト値 4096 では、初期ヒープの最大値が 4096 MB を超えることはありません。

JAVA_DIAGNOSTICS

true

false (無効)

この設定は、コンテナーが使用する JDK によって異なります。

  • OpenJDK8: -XX:NativeMemoryTracking=summary -XX:+PrintGC -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UnlockDiagnosticVMOptions
  • OpenJDK11: -Xlog:gc:utctime -XX:NativeMemoryTracking=summary

この変数の値を true に設定すると、イベントの発生時に、標準出力に診断情報が含まれます。JAVA_DIAGNOSTICS が既に true として定義されている環境で、この値が true に定義されていると、診断が依然として含まれます。

DEBUG

true

false

-agentlib:jdwp=transport=dt_socket,address=$DEBUG_PORT,server=y,suspend=n

リモートデバッグを有効にします。

DEBUG_PORT

8787

8787

-agentlib:jdwp=transport=dt_socket,address=$DEBUG_PORT,server=y,suspend=n

デバッグに使用するポートを指定します。

JAVA_CORE_LIMIT

 

未定義

-XX:parallelGCThreads -Djava.util.concurrent.ForkJoinPool.common.parallelism -XX:CICompilerCount

コア数におけるユーザー定義の制限。コンテナーが制限の制約を報告する場合、JVM 設定の値はコンテナーのコア制限に制限されます。-XXCICompilerCount の値は、常に 2 です。デフォルトでは、この変数は未定義です。この場合、制限がコンテナーに定義されていなければ、JVM 設定は設定されません。

GC_MIN_HEAP_FREE_RATIO

20

10

-XX:MinHeapFreeRatio

拡大を回避するためのガベージコレクション後のヒープ解放の最小パーセンテージ。

GC_MAX_HEAP_FREE_RATIO

40

20

-XX:MaxHeapFreeRatio

縮小を回避するためのガベージコレクション後のヒープ解放の最大パーセンテージ。

GC_TIME_RATIO

4

4

-XX:GCTimeRatio

ガべージコレクションで費やした時間と、それ以外で費やされる時間の比率を指定します (アプリケーション実行にかかった時間など)。

GC_ADAPTIVE_SIZE_POLICY_WEIGHT

90

90

-XX:AdaptiveSizePolicyWeight

現在のガベージコレクション時間と以前のガベージコレクション時間に指定される重み。

GC_METASPACE_SIZE

20

96

-XX:MetaspaceSize

初期メタスペースのサイズ。

GC_MAX_METASPACE_SIZE

100

256

-XX:MaxMetaspaceSize

最大メタスペースサイズ。

GC_CONTAINER_OPTIONS

-XX:+UseG1GC

-XX:-UseParallelOldGC

-XX:-UseParallelOldGC

使用する Java ガベージコレクションを指定します。この変数の値は、必要なガベージコレクションを指定するための JRE コマンドラインオプションである必要があります。JRE コマンドはデフォルトをオーバーライドします。

以下の環境変数が非推奨になりました。

  • JAVA_OPTIONS: JAVA_OPTS を使用します。
  • INITIAL_HEAP_PERCENT: JAVA_INITIAL_MEM_RATIO を使用します。
  • CONTAINER_HEAP_PERCENT: JAVA_MAX_MEM_RATIO を使用します。

4.3. ビルド拡張およびプロジェクトアーティファクト

JBoss EAP for OpenShift イメージは、さまざまなアーティファクトを使用して OpenShift のデータベースサポートを拡張します。これらのアーティファクトは異なるメカニズムを介してビルドイメージに含まれます。

重要

Red Hat が提供する内部データソースドライバーを JBoss EAP for OpenShift イメージと使用する場合のサポートは、非推奨になりました。Red Hat では、データベースベンダーから取得した JDBC ドライバーを JBoss EAP アプリケーションに使用することをお勧めします。

以下の内部データソースは、JBoss EAP for OpenShift イメージでは提供されないようになりました。

  • MySQL
  • PostgreSQL

ドライバーのインストールに関する詳細は、モジュール、ドライバー、および汎用デプロイメント を参照してください。

JBoss EAP で JDBC ドライバーを設定するための詳細は、設定ガイドJDBC ドライバー を参照してください。

プロビジョニングされたサーバーに追加する場合は、カスタムレイヤーを作成してこれらのドライバーおよびデータソースをインストールすることもできます。

4.3.1. S2I アーティファクト

S2I アーティファクトには、モジュール、ドライバー、およびデプロイメントに必要な設定インフラストラクチャーを提供する追加の汎用デプロイメントが含まれます。この設定は S2I プロセスの間にイメージに組み込まれるため、データソースと関連するリソースアダプターのみをランタイムに設定する必要があります。

S2I プロセスを指示してカスタム Maven アーティファクトリーポジトリーミラーを利用する方法の追加情報は アーティファクトリーポジトリーミラー を参照してください。

4.3.1.1. モジュール、ドライバー、および汎用デプロイメント

JBoss EAP for OpenShift イメージにこれらの S2I アーティファクトが含まれるようにする方法はいくつかあります。

  1. アプリケーションソースデプロイメントディレクトリーにアーティファクトが含まれるようにします。アーティファクトはビルド中にダウンロードされ、イメージにインジェクトされます。これは、JBoss EAP for OpenShift イメージでアプリケーションをデプロイするのと似ています。
  2. CUSTOM_INSTALL_DIRECTORIES 環境変数が含まれるようにします。これは、S2I プロセス中にイメージのアーティファクトのインストールおよび設定に使用されるディレクトリーのコンマ区切りリストです。S2I プロセスにこの情報が含まれるようにする方法は 2 つあります。

    • 指定されたインストールディレクトリーの install.sh スクリプト。インストールスクリプトは S2I プロセス中に実行され、問題なく動作します。

      install.sh スクリプトの例

      #!/bin/bash
      
      injected_dir=$1
      source /usr/local/s2i/install-common.sh
      install_deployments ${injected_dir}/injected-deployments.war
      install_modules ${injected_dir}/modules
      configure_drivers ${injected_dir}/drivers.env
      Copy to Clipboard Toggle word wrap

      install.sh スクリプトは、install-common.sh によって提供される API を使用してベースイメージをカスタマイズします。install-common.sh には、モジュール、ドライバー、および汎用デプロイメントをインストールおよび設定するために install.sh スクリプトによって使用される関数が含まれます。

      install-common.sh 内に含まれる関数は次のとおりです。

      • install_modules
      • configure_drivers
      • install_deployments

        モジュール

        モジュールは、クラスローディングおよび依存関係管理に使用されるクラスの論理グループです。モジュールは、アプリケーションサーバーの EAP_HOME/modules/ ディレクトリーに定義されます。各モジュールは、EAP_HOME/modules/org/apache/ のようにサブディレクトリーとして存在します。各モジュールのディレクトリーには、デフォルトが main であるスロットサブディレクトリーが含まれ、module.xml 設定ファイルと必要な JAR ファイルすべてが含まれます。

        MySQL および PostgreSQL JDBC ドライバーの module.xml ファイルの設定に関する詳細は、JBoss EAP 設定ガイドの データソース設定の例 を参照してください。

        PostgreSQL データソースの module.xml ファイルの例

        <?xml version="1.0" encoding="UTF-8"?>
        <module xmlns="urn:jboss:module:1.0" name="org.postgresql">
        <resources>
        <resource-root path="postgresql-jdbc.jar"/>
        </resources>
        <dependencies>
        <module name="javax.api"/>
        <module name="javax.transaction.api"/>
        </dependencies>
        </module>
        Copy to Clipboard Toggle word wrap

        MySQL Connect/J 8 データソースの module.xml ファイルの例

        <?xml version="1.0" encoding="UTF-8"?>
        <module xmlns="urn:jboss:module:1.0" name="com.mysql">
        <resources>
        <resource-root path="mysql-connector-java-8.0.Z.jar" />
        </resources>
        <dependencies>
        <module name="javax.api"/>
        <module name="javax.transaction.api"/>
        </dependencies>
        </module>
        Copy to Clipboard Toggle word wrap

        注記

        mysql-connector-java-8.0.Z.jar の.Z はダウンロードした JAR ファイルのバージョンを示します。ファイル名は変更できますが、名前は module.xml ファイルの名前に一致する必要があります。

        install.shinstall_modules 関数は、module.xml とともに該当の JAR ファイルを JBoss EAP の modules ディレクトリーにコピーします。

        ドライバー

        ドライバーはモジュールとしてインストールされます。ドライバーは configure_drivers 関数によって install.sh に設定されます。 この設定プロパティーは ランタイムアーティファクト 環境ファイルに定義されます。

        データソースドライバーの追加

        MySQL および PostgreSQL データソースは、事前に設定された内部データソースとして提供されなくなりました。これらのドライバーをモジュールとしてインストールできます。モジュール、ドライバー、および汎用デプロイメント の説明を参照してください。これらの JDBC ドライバーは、JBoss EAP アプリケーションのデータベースベンダーから取得できます。

        インストールする各データソースの drivers.env ファイルを作成します。

        MySQL データソースの drivers.env ファイルの例

        #DRIVER
        DRIVERS=MYSQL
        MYSQL_DRIVER_NAME=mysql
        MYSQL_DRIVER_MODULE=org.mysql
        MYSQL_DRIVER_CLASS=com.mysql.cj.jdbc.Driver
        MYSQL_XA_DATASOURCE_CLASS=com.mysql.cj.jdbc.MysqlXADataSource
        Copy to Clipboard Toggle word wrap

        PostgreSQL データソースの drivers.env ファイルの例

        #DRIVER
        DRIVERS=POSTGRES
        POSTGRES_DRIVER_NAME=postgresql
        POSTGRES_DRIVER_MODULE=org.postgresql
        POSTGRES_DRIVER_CLASS=org.postgresql.Driver
        POSTGRES_XA_DATASOURCE_CLASS=org.postgresql.xa.PGXADataSource
        Copy to Clipboard Toggle word wrap

        MySQL や PostgreSQL など、さまざまなドライバーのダウンロード場所に関する情報は、設定ガイドの JDBC ドライバーのダウンロード場所 を参照してください。

汎用デプロイメント

JAR、WAR、RAR、EAR などのデプロイ可能なアーカイブファイルは、install-common.sh の API によって提供される install_deployments を使用して、インジェクトされたイメージからデプロイすることができます。

  • CUSTOM_INSTALL_DIRECTORIES 環境変数が宣言されていても、カスタムインストールディレクトリーに install.sh スクリプトがない場合、以下のアーティファクトディレクトリーがビルドイメージの該当する場所にコピーされます。

    • $JBOSS_HOME/modules/ にコピーされる modules/*
    • configuration/*$JBOSS_HOME/standalone/configuration にコピーされます。
    • deployments/*$JBOSS_HOME/standalone/deployments にコピーされます。

    これは install.sh の代替方法と比べ基本的な設定方法となります。 アーティファクトが適切に構築される必要があります。

4.3.2. ランタイムアーティファクト

4.3.2.1. データソース

データソースには、以下の 2 つのタイプがあります。

  1. 内部データソース。これらのデータソースは OpenShift で実行されますが、デフォルトでは Red Hat レジストリーまたは OpenShift リポジトリーでは使用できません。これらのデータソースの設定は、OpenShift Secret に追加された環境ファイルによって提供されます。
  2. 外部データソース。これらのデータソースは OpenShift 上では動作しません。外部データソースの設定は、OpenShift のシークレットに追加された環境ファイルによって提供されます。
注記

OpenShift シークレットの作成と設定の詳細は、シークレット を参照してください。

ソースプロジェクトの設定ディレクトリーなどのディレクトリーにデータソース環境ファイルを作成できます。次の例は、サンプルのデータソース環境ファイルの内容を示しています。

例: データソース環境ファイル

DB_SERVICE_PREFIX_MAPPING=PostgresXA-POSTGRES=DS1
DS1_JNDI=java:jboss/datasources/pgds
DS1_DRIVER=postgresql-42.2.5.jar
DS1_USERNAME=postgres
DS1_PASSWORD=postgres
DS1_MAX_POOL_SIZE=20
DS1_MIN_POOL_SIZE=20
DS1_CONNECTION_CHECKER=org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker
DS1_EXCEPTION_SORTER=org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter
Copy to Clipboard Toggle word wrap

DB_SERVICE_PREFIX_MAPPING プロパティーは、データソースプロパティー接頭辞のコンマ区切りリストです。これらの接頭辞は、データソースのすべてのプロパティーに追加されます。複数のデータソースを 1 つの環境ファイルに含むことができます。また、各データソースを個別の環境ファイルに提供することもできます。

データソースには、接続プール固有のプロパティーとデータベースドライバー固有のプロパティーの 2 種類のプロパティーが含まれます。接続プール固有のプロパティーはデータソースへの接続を生成します。データベースドライバー固有のプロパティーはデータソースのドライバーを決定し、ドライバー S2I アーティファクトとして設定されます。

上記の例では、DS1 はデータソース接頭辞です。CONNECTION_CHECKER はデータベースの接続の検証に使用される接続チェッカークラスを指定し、EXCEPTION_SORTER は致命的なデータベース接続例外検出に使用される例外ソータークラスを指定します。

データソース環境ファイルは、プロジェクトの OpenShift シークレットに追加されます。これらの環境ファイルは、ENV_FILES 環境プロパティーを使用して、テンプレート内で呼び出されます。 この環境プロパティーの値は、以下のような完全修飾環境ファイルのコンマ区切りリストです。

{
    “Name”: “ENV_FILES”,
    “Value”: “/etc/extensions/datasources1.env,/etc/extensions/datasources2.env”
}
Copy to Clipboard Toggle word wrap
4.3.2.2. リソースアダプター

リソースアダプターの設定は、OpenShift のシークレットに追加された環境ファイルによって提供されます。

Expand
表4.2 リソースアダプタープロパティー
属性説明

PREFIX_ID

サーバー設定ファイルに指定されたリソースアダプターの識別子。

PREFIX_ARCHIVE

リソースアダプターアーカイブ。

PREFIX_MODULE_SLOT

module.xml 設定ファイルと必要な JAR ファイルがすべて含まれるスロットサブディレクトリー。

PREFIX_MODULE_ID

オブジェクトファクトリー Java クラスをロードできる JBoss モジュール ID。

PREFIX_CONNECTION_CLASS

管理された接続ファクトリーまたは管理オブジェクトの完全修飾クラス名。

PREFIX_CONNECTION_JNDI

接続ファクトリーの JNDI 名。

PREFIX_PROPERTY_ParentDirectory

データファイルが格納されるディレクトリー。

PREFIX_PROPERTY_AllowParentPaths

AllowParentPathsfalse に設定して、パスの .. を許可しないようにします。これにより、親ディレクトリーに含まれていないファイルを要求しないようにします。

PREFIX_POOL_MAX_SIZE

プールの最大接続数。各サブプールではこの値を超える接続は作成されません。

PREFIX_POOL_MIN_SIZE

プールの最小接続数。

PREFIX_POOL_PREFILL

プールをプレフィルすべきかどうかを指定します。値の変更後にサーバーを再起動する必要があります。

PREFIX_POOL_FLUSH_STRATEGY

エラーの場合にプールがどのようにフラッシュされるか。有効な値は FailingConnectionOnly (デフォルト)、IdleConnections、および EntirePool です。

RESOURCE_ADAPTERS プロパティーは、リソースアダプタープロパティー接頭辞のコンマ区切りリストです。接頭辞はそのリソースアダプターのすべてのプロパティーに追加されます。複数のリソースアダプターを 1 つの環境ファイルに含めることができます。以下の例では、MYRA がリソースアダプターの接尾辞として使用されます。各リソースアダプターを個別の環境ファイルに提供することもできます。

例: リソースアダプター環境ファイル

#RESOURCE_ADAPTER
RESOURCE_ADAPTERS=MYRA
MYRA_ID=myra
MYRA_ARCHIVE=myra.rar
MYRA_CONNECTION_CLASS=org.javaee7.jca.connector.simple.connector.outbound.MyManagedConnectionFactory
MYRA_CONNECTION_JNDI=java:/eis/MySimpleMFC
Copy to Clipboard Toggle word wrap

リソースアダプター環境ファイルは、プロジェクト namespace の OpenShift シークレットに追加されます。これらの環境ファイルは、ENV_FILES 環境プロパティーを使用して、テンプレート内で呼び出されます。 この環境プロパティーの値は、以下のような完全修飾環境ファイルのコンマ区切りリストです。

{
    "Name": "ENV_FILES",
    "Value": "/etc/extensions/resourceadapter1.env,/etc/extensions/resourceadapter2.env"
}
Copy to Clipboard Toggle word wrap

4.4. OpenShift での JBoss EAP テンプレートの使用の結果

JBoss EAP テンプレートを使用してアプリケーションをコンパイルする場合は、以下のイメージが生成されることがあります。

最終イメージ [application name] の作成前に [application name]-build-artifacts という名前の中間イメージが生成されることがあります。

[application name]-build-artifacts イメージは、アプリケーションがデプロイされた後に削除できます。

4.5. Red Hat JBoss Enterprise Application Platform for OpenShift Images の SSO 設定

Red Hat JBoss Enterprise Application Platform for OpenShift イメージでは、SSO はレガシー security サブシステムを使用するように設定されます。

これらのイメージでは、環境変数 SSO_FORCE_LEGACY_SECURITYtrue に設定されます。

SSO セキュリティーに elytron サブシステムを使用する場合は、SSO_FORCE_LEGACY_SECURITY 環境変数の値を false に更新します。

4.6. デフォルトデータソース

データソース ExampleDS は JBoss EAP 7.4 では使用できません。

一部のクイックスタートには、以下のデータソースが必要です。

  • cmt
  • thread-racing

お客様が開発したアプリケーションでも、ExampleDS のデータソースが必要になる場合があります。

デフォルトのデータソースが必要な場合は、GENERATE_DEFAULT_DATASOURCE 環境変数を使用して、JBoss EAP サーバーのプロビジョニング時にこれを含めます。

ENABLE_GENERATE_DEFAULT_DATASOURCE=true
Copy to Clipboard Toggle word wrap

第5章 JBoss EAP for OpenShift の機能調整

JBoss EAP を含むイメージを構築しているとき、イメージに含める JBoss EAP の機能とサブシステムを制御できます。

S2I イメージに含まれるデフォルトの JBoss EAP サーバーには、完全なサーバーおよびすべての機能が含まれます。プロビジョニングしたサーバーに含まれる機能を調整したいこともあります。たとえば、プロビジョニングされたサーバーのセキュリティーの露出を低減させたり、マイクロサービスのコンテナーにより適切になるように、メモリーフットプリントを低減させる必要がある場合があります。

5.1. カスタム JBoss EAP サーバーのプロビジョニング

調整した機能を備えたカスタムサーバーをプロビジョニングするに は、S2I ビルドフェーズで Galleon_provision_LAYERS 環境変数を渡します。

環境変数の値は、サーバーのビルドにプロビジョニングするコンマ区切りのレイヤーの一覧です。

たとえば、環境変数を GALLEON_PROVISION_LAYERS=jaxrs-server として指定すると、JBoss EAP サーバーは以下の機能を備えた状態でプロビジョニングされます。

  • サーブレットコンテナー
  • データソースを設定する機能
  • jaxrsweldjpa サブシステム
  • Red Hat SSO 統合

5.2. 利用可能な JBoss EAP レイヤー

Red Hat は、OpenShift での JBoss EAP サーバーのプロビジョニングをカスタマイズできるように 6 つの層を提供しています。

3 つの層は、コア機能を提供するベースレイヤーです。デコレーターは、ベースレイヤーを強化するデコレーター層です。

プロビジョニング層では、以下の Jakarta EE 仕様はサポートされません。

  • Jakarta Server Faces 2.3
  • Jakarta Enterprise Beans 3.2
  • Jakarta XML Web Services 2.3

5.2.1. ベースレイヤー

各ベースレイヤーには、典型的なサーバーユーザーケースのコア機能が含まれています。

datasources-web-server

このレイヤーには、サーブレットコンテナーが含まれ、データソースを設定する機能が含まれます。

以下は、datasources-web-server にデフォルトで含まれている JBoss EAP サブシステムです。

  • core-management
  • datasources
  • deployment-scanner
  • ee
  • elytron
  • io
  • jca
  • jmx
  • logging
  • 命名
  • request-controller
  • security-manager
  • transactions
  • undertow

このレイヤーでは、以下の Jakarta EE 仕様がサポートされます。

  • Jakarta JSON Processing 1.1
  • Jakarta JSON Binding 1.0
  • Jakarta Servlet 4.0
  • Jakarta Expression Language 3.0
  • Jakarta Server Pages 2.3
  • Jakarta Standard Tag Library 1.2
  • Jakarta Concurrency 1.1
  • Jakarta Annotations 1.3
  • Jakarta XML Binding 2.3
  • Jakarta Debugging Support for Other Languages 1.0
  • Jakarta Transactions 1.3
  • Jakarta Connectors 1.7
jaxrs-server

このレイヤーは、以下の JBoss EAP サブシステムを使用して datasources-web-server レイヤーを強化します。

  • jaxrs
  • weld
  • jpa

このレイヤーは、コンテナーに Infinispan ベースのセカンドレベルのエンティティーキャッシングをローカルに追加します。

以下の Jakarta EE 仕様は、datasources-web-server レイヤーでサポートされるものに加え、このレイヤーでサポートされています。

  • Jakarta Contexts and Dependency Injection 2.0
  • Jakarta Bean Validation 2.0
  • Jakarta Interceptors 1.2
  • Jakarta RESTful Web Services 2.1
  • Jakarta Persistence 2.2
cloud-server

このレイヤーは、以下の JBoss EAP サブシステムを使用して jaxrs-server レイヤーを強化します。

  • resource-adapters
  • messaging-activemq (組み込みメッセージではなく、リモートブラオーカーメッセージング)

このレイヤーは、以下の observability 機能も jaxrs-server レイヤーに追加します。

  • Health サブシステム
  • Metrics サブシステム

以下の Jakarta EE 仕様は、jaxrs-server レイヤーでサポートされるものに加え、このレイヤーでサポートされています。

  • Jakarta Security 1.0

5.2.2. デコレーターレイヤー

デコレーターレイヤーは単独で使用されません。ベースレイヤーで 1 つ以上のデコレーターレイヤーを設定するとで、追加機能を利用できます。

sso

このデコレーターレイヤーは、プロビジョニングしたサーバーに Red Hat Single Sign-On 統合を追加します。

observability

このデコレーターレイヤーは、プロビジョニングしたサーバーに以下の observability 機能を追加します。

  • Health サブシステム
  • Metrics サブシステム
注記

このレイヤーは、cloud-server レイヤーに組み込まれています。このレイヤーは cloud-server レイヤーに追加する必要はありません。

web-clustering

このレイヤーは、埋め込み Infinispan ベースの Web セッションクラスターリングをプロビジョニングされたサーバーに追加します。

5.3. JBoss EAP でのユーザー開発レイヤーのプロビジョニング

Red Hat から利用可能なレイヤーのプロビジョニングを行うに加え、開発するカスタムレイヤーをプロビジョニングできます。

手順

  1. Galleon Maven プラグインを使用してカスタムレイヤーを構築します。

    詳細は、Maven プロジェクトの準備 を参照してください。

  2. アクセス可能な Maven リポジトリーにカスタムレイヤーをデプロイします。
  3. カスタム Galleon 機能パック環境変数を使用して、S2I イメージビルドプロセス中に Galleon 機能パックとレイヤーをカスタマイズできます。

    Galleon 機能パックとレイヤーのカスタマイズの詳細は、S2I ビルド中におけるカスタム Galleon 機能パックの使用 を参照してください。

  4. オプション: ユーザー定義のレイヤーとサポートされる JBoss EAP レイヤーを参照するカスタムプロビジョニングファイルを作成し、これをアプリケーションディレクトリーに保存します。

    カスタムプロビジョニングファイルの作成に関する詳細は、JBoss EAP のカスタムプロビジョニングファイル を参照してください。

  5. S2I プロセスを実行して、OpenShift で JBoss EAP サーバーをプロビジョニングします。

    詳細は、S2I ビルド中におけるカスタム Galleon 機能パックをの使用 を参照してください。

5.3.1. JBoss EAP のカスタム Galleon レイヤーのビルドと使用

カスタム Galleon レイヤーは、JBoss EAP 7.4 Beta で実行するように設計された Galleon 機能パック内にパッケージ化されています。

Openshift では、JBoss EAP 7.4 サーバー用の MariaDB ドライバーやデータソースなどをプロビジョニングするためのレイヤーを含む Galleon 機能パックをビルドして使用できます。レイヤーには、サーバーにインストールされているコンテンツが含まれています。レイヤーは、サーバーの XML 設定ファイルを更新し、コンテンツをサーバーのインストールに追加できます。

このセクションでは、JBoss EAP 7.4 サーバーに MariaDB ドライバーとデータソースをプロビジョニングするためのレイヤーを含む Galleon フィーチャーパックを OpenShift で構築して使用する方法について説明します。

5.3.1.1. Maven プロジェクトの準備

Galleon 機能パックは、Maven を使用して作成されます。この手順には、新しい Maven プロジェクトを作成する手順が含まれています。

手順

  1. 新しい Maven プロジェクトを作成するには、次のコマンドを実行します。

    mvn archetype:generate -DarchetypeGroupId=org.codehaus.mojo.archetypes -DarchetypeArtifactId=pom-root -DgroupId=org.example.mariadb -DartifactId=mariadb-galleon-pack -DinteractiveMode=false
    Copy to Clipboard Toggle word wrap
  2. ディレクトリー mariadb-galleon-pack で、pom.xml ファイルを更新して Red Hat Maven リポジトリーを含めます。

    <repositories>
      <repository>
        <id>redhat-ga</id>
        <name>Redhat GA</name>
        <url>https://maven.repository.redhat.com/ga/</url>
      </repository>
    </repositories>
    Copy to Clipboard Toggle word wrap
  3. pom.xml ファイルを更新して、EAP Galleon 機能パックと MariaDB ドライバーへの依存関係を追加します。

    <dependencies>
      <dependency>
        <groupId>org.jboss.eap</groupId>
        <artifactId>wildfly-ee-galleon-pack</artifactId>
        <version>7.4.4.GA-redhat-00011</version>
        <type>zip</type>
      </dependency>
      <dependency>
         <groupId>org.mariadb.jdbc</groupId>
         <artifactId>mariadb-java-client</artifactId>
         <version>3.0.5</version>
      </dependency>
    </dependencies>
    Copy to Clipboard Toggle word wrap
  4. pom.xml ファイルを更新して、Galeon 機能パックのビルドに使用される Maven プラグインを含めます。

    <build>            
        <plugins>
             <plugin>
                 <groupId>org.wildfly.galleon-plugins</groupId>
                 <artifactId>wildfly-galleon-maven-plugin</artifactId>
                 <version>5.2.11.Final</version>
                 <executions>
                     <execution>
                         <id>mariadb-galleon-pack-build</id>
                         <goals>
                             <goal>build-user-feature-pack</goal>
                         </goals>
                         <phase>compile</phase>
                     </execution>
                 </executions>
             </plugin>
        </plugins>
    </build>
    Copy to Clipboard Toggle word wrap
5.3.1.2. 機能パックコンテンツの追加

この手順は、カスタム Galleon 機能パック (MariaDB ドライバーとデータソースレイヤーを含む機能パックなど) にレイヤーを追加するのに役立ちます。

前提条件

手順

  1. カスタム機能パック Maven プロジェクト内に src/main/resources ディレクトリーを作成します。Maven プロジェクトの準備 を参照してください。このディレクトリーは、機能パックのコンテンツを含むルートディレクトリーです。
  2. ディレクトリー src/main/resources/modules/org/mariadb/jdbc/main を 作成します。
  3. main ディレクトリーに、次の内容の module.xml という名前のファイルを作成します。

    <?xml version="1.0" encoding="UTF-8"?>
    <module name="org.mariadb.jdbc" xmlns="urn:jboss:module:1.8">
       <resources>
           <artifact name="${org.mariadb.jdbc:mariadb-java-client}"/> 
    1
    
       </resources>
       <dependencies> 
    2
    
           <module name="javax.api"/>
           <module name="javax.transaction.api"/>
       </dependencies>
    </module>
    Copy to Clipboard Toggle word wrap
    1
    MariaDB ドライバーの groupIdartifactId。プロビジョニング時に、実際のドライバー JAR ファイルがインストールされます。ドライバーのバージョンは、pom.xml ファイルから参照されます。
    2
    MariaDB ドライバーの JBoss Modules モジュールの依存関係。
  4. ディレクトリー src/main/resources/layers/standalone/を 作成します。これは、ガレオン機能パックが定義しているすべてのレイヤーのルートディレクトリーです。
  5. ディレクトリー src/main/resources/layers/standalone/mariadb-driver を 作成します。
  6. mariadb-driver ディレクトリーで、次の内容で layer-spec.xml ファイルを作成します。

    <?xml version="1.0" ?>
    <layer-spec xmlns="urn:jboss:galleon:layer-spec:1.0" name="mariadb-driver">
     <feature spec="subsystem.datasources"> 
    1
    
           <feature spec="subsystem.datasources.jdbc-driver">
                 <param name="driver-name" value="mariadb"/>
                 <param name="jdbc-driver" value="mariadb"/>
                 <param name="driver-xa-datasource-class-name" value="org.mariadb.jdbc.MariaDbDataSource"/>
                 <param name="driver-module-name" value="org.mariadb.jdbc"/>
           </feature>
     </feature>
     <packages> 
    2
    
           <package name="org.mariadb.jdbc"/>
     </packages>
    </layer-spec>
    Copy to Clipboard Toggle word wrap
    1
    モジュール org.mariadb.jdbc によって実装された MariaDB という名前の JDBC ドライバーを使用して、datasources サブシステムの設定を更新します。
    2
    レイヤーのプロビジョニング時にインストールされるドライバークラスを含む JBoss Modules モジュール。

    mariadb-driver レイヤーは、JBoss Modules モジュールによって実装された JDBC ドライバーの設定で datasources サブシステムを更新します。

  7. ディレクトリー src/main/resources/layers/standalone/mariadb-datasource を作成します。
  8. mariadb-datasource ディレクトリーで、次の内容で layer-spec.xml ファイルを作成します。

    <?xml version="1.0" ?>
    <layer-spec xmlns="urn:jboss:galleon:layer-spec:1.0" name="mariadb-datasource">
    <dependencies>
         <layer name="mariadb-driver"/> 
    1
    
    </dependencies>
        
    <feature spec="subsystem.datasources.data-source"> 
    2
    
           <param name="data-source" value="MariaDBDS"/>
           <param name="jndi-name" value="java:jboss/datasources/${env.MARIADB_DATASOURCE:MariaDBDS}"/>
           <param name="connection-url" value="jdbc:mariadb://${env.MARIADB_HOST:localhost}:${env.MARIADB_PORT:3306}/${env.MARIADB_DATABASE}"/> 
    3
    
           <param name="driver-name" value="mariadb"/>
           <param name="user-name" value="${env.MARIADB_USER}"/>
    4
    
           <param name="password" value="${env.MARIADB_PASSWORD}"/>
    </feature>
    </layer-spec>
    Copy to Clipboard Toggle word wrap
    1
    この依存関係により、データソースがプロビジョニングされるときに MariaDB ドライバーのプロビジョニングが強制されます。レイヤーが依存するすべてのレイヤーは、そのレイヤーがプロビジョニングされるときに自動的にプロビジョニングされます。
    2
    MariaDBDS という名前のデータソースを使用してデータソースサブシステム設定を更新します。
    3
    データソースの名前、ホスト、ポート、およびデータベースの値は、サーバーの起動時に設定される環境変数 MARIADB_DATASOURCEMARIADB_HOSTMARIADB_PORT、および MARIADB_DATABASE から解決されます。
    4
    ユーザー名とパスワードの値は、環境変数 MARIADB_USER および MARIADB_PASSWORD から解決されます。
  9. 次のコマンドを実行して、Galeon 機能パックをビルドします。

    mvn clean install
    Copy to Clipboard Toggle word wrap

    ファイル target/mariadb-galleon-pack-1.0-SNAPSHOT.zip が作成されます。

5.3.1.3. S2I ビルド中にカスタム Galleon 機能パックを使用する

カスタム機能パックは、OpenShift S2I ビルド中に発生する Maven ビルドで使用できるようにする必要があります。これは通常、カスタム機能パックをアーティファクトとして (例: org.example.mariadb:mariadb-galleon-pack:1.0-SNAPSHOT) アクセス可能な Maven リポジトリーにデプロイすることによって実現されます。

導入前に機能パックをテストするには、ローカルで構築された Galleon 機能パックを利用できるようにする EAP S2I ビルダーイメージ機能を使用できます。次の手順例を使用して、PostgreSQL ドライバーの代わりに MariaDB ドライバーを使用して todo-backend EAP クイックスタートをカスタマイズします。

注記

前提条件

  • OpenShift コマンドラインがインストールされている
  • OpenShift クラスターにログインしている 
  • クラスターに JBoss EAP OpenShift イメージがインストールされている
  • Red Hat Container レジストリーへのアクセスを設定しました。詳細については、Red Hat Container Registry を参照してください。
  • カスタムガレオン機能パックを作成しました。詳細は、Maven プロジェクトの準備 を参照してください。

手順

  1. 次のコマンドを実行して、MariaDB データベースを開始します。

    oc new-app -e MYSQL_USER=admin -e MYSQL_PASSWORD=admin -e MYSQL_DATABASE=mariadb registry.redhat.io/rhscl/mariadb-101-rhel7
    Copy to Clipboard Toggle word wrap

    OpenShift サービス mariadb-101-rhel7 が作成され、開始されます。

  2. Maven プロジェクトディレクトリー mariadb-galleon-pack 内で次のコマンドを実行して、カスタム機能パック Maven ビルドによって生成された機能パック ZIP アーカイブからシークレットを作成します。

    oc create secret generic mariadb-galleon-pack --from-file=target/mariadb-galleon-pack-1.0-SNAPSHOT.zip
    Copy to Clipboard Toggle word wrap

    秘密の mariadb-galleon-pack が作成されます。S2I ビルドを開始するときに、このシークレットを使用してフィーチャーパックの .zip ファイルを Pod にマウントし、サーバーのプロビジョニングフェーズでファイルを使用できるようにします。

  3. 新しい OpenShift ビルドを作成して、Galleon でトリミングされたサーバー内で実行される todo-backend クイックスタートデプロイメントを含むアプリケーションイメージをビルドするには、次のコマンドを実行します。

    oc new-build jboss-eap74-openjdk11-openshift:latest~https://github.com/jboss-developer/jboss-eap-quickstarts#EAP_7.4.0.GA \
    --context-dir=todo-backend \
    --env=GALLEON_PROVISION_FEATURE_PACKS="org.example.mariadb:mariadb-galleon-pack:1.0-SNAPSHOT" \ 
    1
    
    --env=GALLEON_PROVISION_LAYERS="jaxrs-server,mariadb-datasource" \ 
    2
    
    --env=GALLEON_CUSTOM_FEATURE_PACKS_MAVEN_REPO="/tmp/repo" \ 
    3
    
    --env=MAVEN_ARGS_APPEND="-Dcom.redhat.xpaas.repo.jbossorg" \
    --build-secret=mariadb-galleon-pack:/tmp/repo/org/example/mariadb/mariadb-galleon-pack/1.0-SNAPSHOT \ 
    4
    
    --name=todos-app-build
    Copy to Clipboard Toggle word wrap
    1
    機能パックの Maven 座標のコンマ区切りリストを含むカスタム機能パック環境変数 (groupId:artifactId:version など)。
    2
    サーバーのプロビジョニングに使用される Galleon レイヤーのセット。jaxrs-server は基本サーバー層で、mariadb-datasource は MariaDB ドライバーと新しいデータソースをサーバーインストールにもたらすカスタム層です。
    3
    MariaDB 機能パックを含むイメージ内のローカル Maven リポジトリーの場所。このリポジトリーは、イメージ内にシークレットをマウントするときに設定されます。
    4
    mariadb-galleon-pack シークレットは、/tmp/repo/org/example/mariadb/mariadb-galleon-pack/1.0-SNAPSHOT ディレクトリーにマウントされます。
  4. 作成した OpenShift ビルドから新しいビルドを開始するには、次のコマンドを実行します。

    oc start-build todos-app-build
    Copy to Clipboard Toggle word wrap

    コマンドが正常に実行されると、イメージ todos-app-build が作成されます。

  5. 新しいデプロイメントを作成するには、次のコマンドを実行して、実行中の MariaDB データベースにデータソースをバインドするために必要な環境変数を指定します。

    oc new-app --name=todos-app todos-app-build \
    --env=MARIADB_PORT=3306 \
    --env=MARIADB_USER=admin \
    --env=MARIADB_PASSWORD=admin \
    --env=MARIADB_HOST=mariadb-101-rhel7 \
    --env=MARIADB_DATABASE=mariadb  \
    --env=MARIADB_DATASOURCE=ToDos 
    1
    Copy to Clipboard Toggle word wrap
    1
    クイックスタートでは、データソースの名前が ToDos であることを想定しています。
    注記

    カスタム Galleon 機能パック環境変数の詳細は、カスタム Galleon 機能パック環境変数 を参照してください。

  6. todos-app アプリケーションを公開するには、次のコマンドを実行します。

    oc expose svc/todos-app
    Copy to Clipboard Toggle word wrap
  7. 新しいタスクを作成するには、次のコマンドを実行します。

    curl -X POST http://$(oc get route todos-app --template='{{ .spec.host }}') \
       -H 'Content-Type: application/json' \
       -d '{"title":"todo1"}'
    Copy to Clipboard Toggle word wrap
  8. タスクのリストにアクセスするには、次のコマンドを実行します。

    curl http://$(oc get route todos-app --template='{{ .spec.host }}')
    Copy to Clipboard Toggle word wrap

    追加されたタスクがブラウザーに表示されます。

5.3.1.4. JBoss EAP のカスタムプロビジョニングファイル

カスタムプロビジョニングファイルは、galleon サブディレクトリーに保存されている provisioning.xml というファイル名の XML ファイルです。

Provisioning.xml ファイルの使用は、GALLEON_PROVISION_FEATURE_PACKS および GALLEON_PROVISION_LAYERS 環境変数を使用する代わりに使用できます。S2I ビルド中に、provisioning.xml ファイルを使用してカスタム EAP サーバーをプロビジョニングします。

重要

GALLEON_PROVISION_LAYERS 環境変数を使用する場合は、カスタムプロビジョニングファイルを作成しないでください。この環境変数は、ファイルを無視するように S2I ビルドプロセスを設定するためです。

以下のコードは、カスタムプロビジョニングファイルを示しています。

<?xml version="1.0" ?>
<installation xmlns="urn:jboss:galleon:provisioning:3.0">
    <feature-pack location="eap-s2i@maven(org.jboss.universe:s2i-universe)">
1

        <default-configs inherit="false"/>
2

        <packages inherit="false"/>
3

    </feature-pack>
    <feature-pack location="org.example.mariadb:mariadb-galleon-pack:1.0-SNAPSHOT">
4

        <default-configs inherit="false"/>
        <packages inherit="false"/>
    </feature-pack>
    <config model="standalone" name="standalone.xml">
5

        <layers>
            <include name="jaxrs-server"/>
            <include name="mariadb-datasource"/>
        </layers>
    </config>
    <options>
6

        <option name="optional-packages" value="passive+"/>
    </options>
</installation>
Copy to Clipboard Toggle word wrap
1
この要素は、現在の eap-s2i feature-pack をプロビジョニングするようにプロビジョニングプロセスに指示します。ビルダーイメージには単一の機能パックのみが含まれていることに注意してください。
2
この要素は、デフォルト設定を除外するようにプロビジョニングプロセスに指示します。
3
この要素は、デフォルトパッケージを除外するようにプロビジョニングプロセスに指示します。
4
この要素は、プロビジョニングプロセスに org.example.mariadb:mariadb-galleon-pack:1.0-SNAPSHOT フィーチャーパックをプロビジョニングするように指示します。子要素は、デフォルトの設定およびデフォルトパッケージを除外するようプロセスに指示します。
5
この要素は、カスタムスタンドアロン設定を作成するようにプロビジョニングプロセスに指示します。この設定には、jaxrs-server 基本レイヤーと org.example.mariadb:mariadb-galleon-pack:1.0-SNAPSHOT フィーチャーパックの mariadb-datasource カスタムレイヤーが含まれています。
6
この要素は、JBoss EAP モジュールのプロビジョニングを最適化するようプロビジョニングプロセスに指示します。

関連情報

5.3.2. 高度な環境変数を使用して Galleon を設定

高度なカスタム Galleon 機能パック環境変数を使用して、S2I イメージビルドプロセス中にカスタム Galleon 機能パックとレイヤーを保存する場所をカスタマイズできます。これらの高度なカスタム Galleon 機能パック環境変数は次のとおりです。

  • GALLEON_DIR=<path>: これは、デフォルトの <project_root_dir>/galleon ディレクトリーパスを <project_root_dir>/<GALLEON_DIR> に上書きします。
  • GALLEON_CUSTOM_FEATURE_PACKS_MAVEN_REPO = <path>。これは、<project root dir>/galleon/repository ディレクトリーパスを、Maven ローカルリポジトリーキャッシュディレクトリーへの絶対パスでオーバーライドします。このリポジトリーには、カスタム Galleon 機能パックが含まれています。

Galleon 機能パックのアーカイブファイルは、Maven ローカルキャッシュファイルシステム設定に準拠したサブディレクトリー内に配置する必要があります。たとえば、path-to-repository/org/examples/my-feature-pack/1.0.0.Final/my-feature-pack-1.0.0.Final.zip パス内の org.examples:my-feature-pack:1.0.0.Final 機能パックを見つけます。

<project_root>/<GALLEON_DIR> ディレクトリーに settings.xml ファイルを作成することにより、Maven プロジェクト設定を設定できます。GALLEON_DIR のデフォルト値は <project_root_dir>/galleon です。Maven はこのファイルを使用して、アプリケーション用のカスタム Galleon 機能パックをプロビジョニングします。settings.xml ファイルを作成しない場合、Maven は S2I イメージによって作成されたデフォルトの settings.xml ファイルを使用します。

重要

S2I ビルダーイメージはローカル Maven リポジトリーの場所を指定するため、settings.xml ファイルでローカル Maven リポジトリーの場所を指定しないでください。S2I ビルダーイメージは、S2I ビルドプロセス中にこの場所を使用します。

関連情報

5.3.3. カスタム Galleon feature-pack 環境変数

以下のカスタム Galleon 機能パック環境変数のいずれかを使用して、JBoss EAP S2I イメージの使用方法をカスタマイズできます。

Expand
表5.1 カスタム Galleon 機能パック環境変数の説明
環境変数説明

GALLEON_DIR=<path>

ここで、<path> は、アプリケーションプロジェクトの root ディレクトリーに相対的なディレクトリーです。<path> ディレクトリーには、settings.xml ファイルやローカル Maven リポジトリーキャッシュなどのオプションの Galleon カスタムコンテンツが含まれています。このキャッシュには、カスタム Galleon 機能パックが含まれています。

デフォルトのディレクトリーは galleon です。

GALLEON_CUSTOM_FEATURE_PACKS_MAVEN_REPO=<path>

<path> は、カスタム feature-packs を含む Maven ローカルリポジトリーディレクトリーの絶対パスです。ディレクトリーのデフォルトは galleon/repository に設定されます。

GALLEON_PROVISION_FEATURE_PACKS=<list_of_galleon_feature_packs>

<list_of_galleon_feature_packs> は、Maven コーディネートによって識別されるカスタム Galleon feature-packs のコンマ区切りリストです。一覧表示されている feature-packs は、ビルダーイメージにある JBoss EAP 7.4 サーバーのバージョンと互換性がある必要があります。

GALLEON_PROVISION_LAYERS 環境変数を使用して、サーバーのカスタム feature-packs によって定義された Galleon レイヤーを設定できます。

第6章 トラブルシューティング

6.1. Pod 再起動のトラブルシューティング

Pod は、さまざまな理由で再起動します。しかし、JBoss EAP Pod の再起動の一般的な原因には OpenShift リソース制約 (特にメモリー不足の問題) が含まれる場合があります。OpenShift Pod エビクション の詳細は、OpenShift ドキュメントを参照してくださ e い。

デフォルトでは、JBoss EAP for OpenShift テンプレートは、メモリー不足などの問題が発生すると影響を受けるコンテナーを自動的に再起動するよう設定されています。以下の手順は、メモリー不足やその他の Pod 再起動の問題を診断し、トラブルシューティングを行うのに役立ちます。

  1. 問題のある Pod の名前を取得します。

    以下のコマンドを使用すると、Pod の名前と、各 Pod が再起動した回数を確認することができます。

    $ oc get pods
    Copy to Clipboard Toggle word wrap
  2. Pod が再起動した理由を診断するには、前の Pod の JBoss EAP ログまたは OpenShift イベントを調べます。

    1. 前の Pod の JBoss EAP ログを表示するには、以下のコマンドを使用します。

      oc logs --previous POD_NAME
      Copy to Clipboard Toggle word wrap
    2. OpenShift イベントを表示するには、以下のコマンドを使用します。

      $ oc get events
      Copy to Clipboard Toggle word wrap
  3. リソースの問題により Pod が再起動される場合は、OpenShift Pod 設定を変更して、その リソース要求および制限 を引き上げることができます。Pod コンピュートリソースの設定 についての詳細は、OpenShift ドキュメントを参照してください。

6.2. JBoss EAP 管理 CLI を使用したトラブルシューティング

JBoss EAP 管理コンソールである EAP_HOME/bin/jboss-cli.sh は、トラブルシューティングの目的でコンテナー内からアクセスすることができます。

重要

JBoss EAP 管理 CLI を使用して、実行中の Pod の設定を変更することは推奨されません。管理 CLI を使用して実行中のコンテナーで変更した設定内容は、コンテナーの再起動時に失われます。

JBoss EAP for OpenShift の設定を変更する場合は Java アプリケーションに対して JBoss EAP for OpenShift イメージを設定 を参照してください。

  1. 最初に、実行中の Pod にリモートシェルセッションを開きます。

    $ oc rsh POD_NAME
    Copy to Clipboard Toggle word wrap
  2. リモートシェルセッションから以下のコマンドを実行し、JBoss EAP 管理 CLI を起動します。

    $ /opt/eap/bin/jboss-cli.sh
    Copy to Clipboard Toggle word wrap

第7章 OpenShift でのアプリケーションディプロイメントを自動化する EAP Operator

EAP オペレーターは、OpenShift API を拡張する JBoss EAP 固有のコントローラーです。EAP オペレーターを使用することで、複雑なステートフルアプリケーションのインスタンスの作成、設定、管理、およびシームレスなアップグレードを行うことができます。

EAP オペレーターは、複数の JBoss EAP Java アプリケーションインスタンスをクラスター全体で管理します。また、レプリカを縮小し、削除するために clean として Pod をマークする前に、すべてのトランザクションが完了していることを検証することで、アプリケーションクラスターでの安全なトランザクションリカバリーを行えるようにします。EAP オペレーターは、Jakarta Enterprise Beans リモーティングおよびトランザクションリカバリープロセッシングの適切な処理に StatefulSet を使用します。StatefulSet は Pod の再起動後もストレージおよびネットワークのホスト名の安定性を永続的に保持します。

EAP オペレーターは OperatorHub を使用して EAP オペレーターをインストールする必要があります。これは、OpenShift クラスター管理者がオペレーターの検出、インストール、アップグレードに使用できます。

OpenShift Container Platform 4 では、Operator Lifecycle Manager (OLM) を使用して、すべての Operator および複数のクラスターで実行される関連サービスのインストール、更新、管理を行うことができます。

OLM は OpenShift Container Platform 4 で、デフォルトで実行されます。これは、クラスター管理者がクラスターで実行しているオペレーターへのインストール、アップグレード、およびアクセス付与に役立ちます。OpenShift Container Platform Web コンソールでは、クラスター管理者がオペレーターをインストールし、特定のプロジェクトアクセスを付与して、クラスターで利用可能なオペレーターのカタログを使用するための管理画面を利用できます。

オペレーターおよび OLM の詳細は、OpenShift ドキュメント を参照してください。

7.1. Web コンソールを使用した EAP Operator のインストール

JBoss EAP クラスター管理者は、OpenShift Container Platform Web コンソールを使用して Red Hat OperatorHub から EAP オペレーターをインストールできます。その後、EAP オペレーターを複数の名前空間にサブスクライブすることで、クラスター上で開発者が利用できるようにすることができます。

以下では、Web コンソールを使用して EAP オペレーターをインストールする前に注意する必要がある点をいくつか紹介します。

  • インストールモード: クラスター上のすべての名前空間 を選択し、すべての名前空間にオペレーターをインストールするか、可能であれば個別の名前空間を選択して、選択した名前空間にのみオペレーターをインストールします。
  • チャンネルの更新: EAP オペレーターが複数のチャネルで利用可能な場合は、サブスクライブするチャネルを選択できます。たとえば、stable チャネル (存在する場合) からデプロイするには、これを一覧から選択します。
  • 承認ストラテジー: 自動の更新または手動の更新を選択できます。EAP Operator の自動更新を選択した場合は、Operator の新規バージョンが利用可能になると、Operator Lifecycle Manager (OLM) により EAP Operator の実行中のインスタンスが自動的にアップグレードされます。手動による更新を選択する場合は、オペレーターの新しいバージョンが利用可能になると、OLM は更新要求を作成します。次に、オペレーターが新規バージョンに更新されるように更新要求を手動で承認する必要があります。
注記

以下の手順では、OpenShift Container Platform Web コンソールの変更に応じて変更される可能性があります。最新の手順や最も正確な手順は、Working with Operators in OpenShift Container Platformガイドの Installing from the OperatorHub using the web console を参照してください。

前提条件

  • cluster-admin 権限を持つアカウントを使用して OpenShift Container Platform クラスターにアクセスできる。

手順

  1. OpenShift Container Platform Web コンソールで、OperatorsOperatorHub の順に移動します。
  2. 下にスクロールするか、Filter by keyword ボックスに EAP と入力して EAP オペレーターを見つけます。
  3. JBoss EAP オペレーターを選択し、Install をクリックします。
  4. Create Operator Subscription ページで以下を行います。

    1. 以下のいずれかを選択します。

      • クラスター上のすべての名前空間 (デフォルト) では、デフォルトの openshift-operators 名前空間にオペレーターがインストールされ、クラスターのすべての名前空間を監視し、利用できるようにします。このオプションは常に利用できるわけではありません。
      • クラスター上の特定のネームスペース では、選択した特定の単一の名前空間にオペレーターがインストールされます。このオペレーターは、この単一名前空間でのみ使用可能となります。
    2. Update Channel を選択します。
    3. 前述のように、Automatic または Manual 承認ストラテジーを選択します。
  5. Subscribe をクリックし、この OpenShift Container Platform クラスターで選択した名前空間で EAP Operator を利用できるようにします。

    1. 手動での承認ストラテジーを選択した場合は、そのインストールプランを確認して承認するまで、サブスクリプションのアップグレードステータスは Upgrading に留まります。Install Plan ページでインストールプランを承認すると、サブスクリプションのアップグレードステータスは Up to date に変わります。
    2. 自動承認ストラテジーを選択した場合は、アップグレードステータスは介入なしで Up to date に変わります。
  6. サブスクリプションのアップグレードステータスが Up to date になった後に、OperatorsInstalled Operators の順に選択します。そして、EAP ClusterServiceVersion (CSV) が表示され、関連する名前空間で InstallSucceededStatus が変わっていることを確認します。

    注記

    All namespace... インストールモードでは、表示されるステータスは openshift-operators 名前空間で InstallSucceeded になります。その他の名前空間では、ステータスは Copied と表示されます。

  7. Status フィールドが InstallSucceeded に変更されない場合は、さらにトラブルシューティングを行うために問題のレポートを作成する WorkloadsPods ページの openshift-operators プロジェクト (A specific namespace... インストールモードが選択されていた場合は、その他の関連の名前空間) の pod のログを確認してください。

7.2. CLI を使用した EAP Operator のインストール

JBoss EAP クラスター管理者は、OpenShift Container Platform CLI を使用して Red Hat OperatorHub から EAP オペレーターをインストールできます。その後、EAP オペレーターを複数の名前空間にサブスクライブすることで、クラスター上で開発者が利用できるようにすることができます。

CLI を使用して OperatorHub から EAP オペレーターをインストールする場合は、oc コマンドを使用して Subscription オブジェクトを作成します。

前提条件

  • cluster-admin パーミッションを持つアカウントを使用して OpenShift Container Platform クラスターにアクセスできる。
  • ローカルシステムに oc ツールがインストールされている。

手順

  1. OperatorHub からクラスターで利用できる Operator の一覧を表示します。

    $ oc get packagemanifests -n openshift-marketplace | grep eap
    NAME        CATALOG               AGE
    ...
    eap         Red Hat Operators     43d
    ...
    Copy to Clipboard Toggle word wrap
  2. Subscription オブジェクト YAML ファイル (例: eap-operator-sub.yaml) を作成し、名前空間を EAP オペレーターにサブスクライブします。以下は、Subscription オブジェクトの YAML ファイルの例です。

    apiVersion: operators.coreos.com/v1alpha1
    kind: Subscription
    metadata:
      name: eap
      namespace: openshift-operators
    spec:
      channel: stable
      installPlanApproval: Automatic
      name: eap 
    1
    
      source:  redhat-operators 
    2
    
      sourceNamespace: openshift-marketplace
    Copy to Clipboard Toggle word wrap
    1
    サブスクライブするオペレーターの名前。
    2
    EAP オペレーターは redhat-operators CatalogSource によって提供されます。

    チャネルおよび承認ストラテジーの詳細は、この手順の Web コンソール バージョンを参照してください。

  3. YAML ファイルから Subscription オブジェクトを作成します。

    $ oc apply -f eap-operator-sub.yaml
    $ oc get csv -n openshift-operators
    NAME                  DISPLAY     VERSION   REPLACES   PHASE
    eap-operator.v1.0.0   JBoss EAP   1.0.0                Succeeded
    Copy to Clipboard Toggle word wrap

    EAP オペレーターが正常にインストールされます。この時点で、OLM は EAP のオペレーターを認識します。オペレーターの ClusterServiceVersion (CSV) がターゲット名前空間に表示され、EAP オペレーターによって提供される API は作成に利用できます。

7.3. アプリケーションイメージを作成するための eap-s2i-build テンプレート

eap-s2i-build テンプレートを使用してアプリケーションイメージを作成します。eap-s2i-build テンプレートは複数のパラメーターを追加して、アプリケーションのビルドに使用するアプリケーションソースリポジトリーの場所と EAP S2I イメージを設定します。

eap-s2i-build テンプレートの APPLICATION_IMAGE パラメーターは、アプリケーションイメージに対応するイメージストリームの名前を指定します。たとえば、eap-s2i-build テンプレートから my-app という名前のアプリケーションイメージを作成した場合には、my-app イメージ ストリームから my-app:latest イメージストリームタグを使用してアプリケーションをデプロイすることができます。eap-s2i-build テンプレートで使用されるパラメーターの詳細は、Building an application image using eap-s2i-build template を参照してください。

このテンプレートを使用すると、EAP オペレーターは OpenShift にデプロイされたアプリケーションをシームレスにアップグレードできます。シームレスなアップグレードを有効にするには、GitHub リポジトリーで Webhook を設定し、ビルド設定で Webhook を指定する必要があります。webhook は、リポジトリーが更新され、新規ビルドがトリガーされる際に OpenShift に通知します。

このテンプレートを使用して、JBoss EAP 7.4、JBoss EAP XP、JBoss EAP CD などの JBoss EAP バージョンのイメージストリームを使用してアプリケーションイメージをビルドできます。

関連情報

7.4. eap-s2i-build テンプレートを使用したアプリケーションイメージのビルド

eap-s2i-build テンプレートは複数のパラメーターを追加して、アプリケーションのビルドに使用するアプリケーションソースリポジトリーの場所と EAP S2I イメージを設定します。このテンプレートを使用すると、JBoss EAP 7.4、JBoss EAP XP、または JBoss EAP CD などのすべての JBoss EAP バージョンにイメージストリームを使用できます。

手順

  1. EAP イメージを OpenShift にインポートします。詳細は、JBoss EAP XP の OpenShift イメージストリームおよびテンプレートのインポート を参照してください。
  2. アプリケーションイメージストリームの変更についての更新を受信し、新規ビルドをトリガーするようにイメージストリームを設定します。詳細は、イメージストリームタグの定期的なインポートの設定 を参照してください。
  3. EAP S2I イメージを使用してアプリケーションイメージをビルドするための eap-s2i-build テンプレートを作成します。

    $ oc replace --force -f https://raw.githubusercontent.com/jboss-container-images/jboss-eap-openshift-templates/master/eap-s2i-build.yaml
    Copy to Clipboard Toggle word wrap

    この eap-s2i-build テンプレートは 2 つのビルド設定と、中間ビルドアーティファクトと最終的なアプリケーションイメージに対応する 2 つのイメージストリームを作成します。

  4. 最終的なアプリケーションイメージのリソースを作成するために、パラメーターとともに eap-s2i-build テンプレートを処理します。以下の例は、アプリケーションイメージ my-app を作成します。

    $ oc process eap-s2i-build \
      -p APPLICATION_IMAGE=my-app \ 
    1
    
      \
      -p EAP_IMAGE=jboss-eap-xp1-openjdk11-openshift:1.0 \ 
    2
    
      -p EAP_RUNTIME_IMAGE=jboss-eap-xp1-openjdk11-runtime-openshift:1.0 \ 
    3
    
      -p EAP_IMAGESTREAM_NAMESPACE=$(oc project -q) \ 
    4
    
      \
      -p SOURCE_REPOSITORY_URL=https://github.com/jboss-developer/jboss-eap-quickstarts.git \ 
    5
    
      -p SOURCE_REPOSITORY_REF=xp-1.0.x \ 
    6
    
      -p CONTEXT_DIR=microprofile-config | oc create -f - 
    7
    Copy to Clipboard Toggle word wrap
    1
    アプリケーションイメージストリームの名前。アプリケーションイメージは latest でタグ付けされます。
    2
    EAP ビルダーイメージのイメージストリームタグ。
    3
    EAP ランタイムイメージのイメージストリームタグ。
    4
    Red Hat ミドルウェアイメージのイメージストリームがインストールされている名前空間。省略されている場合、openshift 名前空間が使用されます。これは、openshift 以外の名前空間にイメージストリームをインストールしている場合にのみ変更します。
    5
    アプリケーションの Git ソース URL。
    6
    Git ブランチ/タグリファンレンス
    7
    ビルドするアプリケーションが含まれる Git リポジトリー内のパス。
  5. EAP オペレーターを使用して、デプロイメント用にアプリケーションイメージを準備します。

    1. WildFlyServer リソースを設定します。

      $ cat > my-app.yaml<<EOF
      
      apiVersion: wildfly.org/v1alpha1
      kind: WildFlyServer
      metadata:
        name: my-app
      spec:
       applicationImage: 'my-app:latest'
       replicas: 1
      EOF
      Copy to Clipboard Toggle word wrap
    2. 設定を適用し、EAP オペレーターがこのアプリケーションイメージを参照する新しい WildFlyServer リソースを作成できるようにします。

      $ oc apply -f my-app.yaml
      Copy to Clipboard Toggle word wrap
    3. 以下のコマンドを使用して、WildFlyServer リソースを表示します。

      $ oc get wfly my-app
      Copy to Clipboard Toggle word wrap

      関連情報

7.5. EAP Operator を使用した OpenShift での Java アプリケーションのデプロイ

EAP オペレーターは、OpenShift での Java アプリケーションのデプロイメントを自動化するのに役立ちます。EAP オペレーター API の詳細は、EAP Operator: API Information を参照してください。

前提条件

  • EAP オペレーターがインストールされている。EAP オペレーターのインストールに関する詳細は、Installing EAP Operator Using the webconsole および CLI を使用した EAP Operator のインストール を参照してください。
  • JBoss EAP for OpenShift Source-to-Image (S2I) ビルドイメージを使用して、ユーザーアプリケーションの Docker イメージを構築している。
  • OpenShift へのデプロイ後にアプリケーションの自動アップグレードを有効にする場合には、eap-s2i-build テンプレートの APPLICATION_IMAGE パラメーターにイメージストリームがあります。eap-s2i-build テンプレートを使用してアプリケーションイメージを構築する方法は、eap-s2i-build テンプレートを使用したアプリケーションイメージのビルド を参照してください。
  • アプリケーションの CustomResourceDefinition (CRD) ファイルが参照する場合は、Secret オブジェクトを作成している。新しい Secret オブジェクト作成の詳細は Secret の作成 を参照してください。
  • アプリケーションの CRD ファイルが参照する場合は、ConfigMap を作成している。ConfigMap 作成の詳細は ConfigMap の作成 を参照してください。
  • 必要であれば、standalone.xml ファイルから ConfigMap を作成している。standalone.xml ファイルからの ConfigMap の作成の詳細は、standalone.xml ファイルからの ConfigMap の作成 を参照してください。
注記

JBoss EAP 7 では、ConfigMap から standalone.xml ファイルを指定できません。

手順

  1. Web ブラウザーを開き、OperatorHub にログインします。
  2. Java アプリケーションに使用する Project または名前空間を選択します。
  3. Installed Operator に移動し、JBoss EAP オペレーターを選択します。
  4. Overview タブで、Create Instance リンクをクリックします。
  5. アプリケーションイメージの詳細を指定します。

    アプリケーションイメージは、Java アプリケーションが含まれる Docker イメージを指定します。イメージは JBoss EAP for OpenShift の Source-to-Image (S2I) ビルドイメージを使用してビルドする必要があります。applicationImage フィールドがイメージストリームタグに対応している場合は、イメージへの変更により、アプリケーションの自動アップグレードがトリガーされます。

    JBoss EAP for OpenShift アプリケーションイメージの以下のリファレンスのいずれかを指定できます。

    • イメージの名前: mycomp/myapp
    • タグ: mycomp/myapp:1.0
    • A digest: mycomp/myapp:@sha256:0af38bc38be93116b6a1d86a9c78bd14cd527121970899d719baf78e5dc7bfd2
    • イメージストリームタグ: my-app:latest
  6. アプリケーションのサイズを指定します。以下に例を示します。

    spec:
      replicas:2
    Copy to Clipboard Toggle word wrap
  7. env spec を使用してアプリケーション環境を設定します。環境変数 は、POSTGRESQL_SERVICE_HOST などの値や POSTGRESQL_USER などの Secret オブジェクトから直接取得できます。以下に例を示します。

    spec:
      env:
      - name: POSTGRESQL_SERVICE_HOST
        value: postgresql
      - name: POSTGRESQL_SERVICE_PORT
        value: '5432'
      - name: POSTGRESQL_DATABASE
        valueFrom:
          secretKeyRef:
            key: database-name
            name: postgresql
      - name: POSTGRESQL_USER
        valueFrom:
          secretKeyRef:
            key: database-user
            name: postgresql
      - name: POSTGRESQL_PASSWORD
        valueFrom:
          secretKeyRef:
            key: database-password
            name: postgresql
    Copy to Clipboard Toggle word wrap
  8. アプリケーションのデプロイメントに関連する以下のオプションの設定を行います。

    • サーバーデータディレクトリーのストレージ要件を指定します。詳細は、Configuring Persistent Storage for Applications を参照してください。
    • WildFlyServerSpec で作成した Secret の名前を指定し、アプリケーションを実行している Pod のボリュームとしてマウントします。以下に例を示します。

      spec:
        secrets:
          - my-secret
      Copy to Clipboard Toggle word wrap

      Secret/etc/secrets/<secret name> にマウントされ、それぞれのキー/ 値がファイルとして保存されます。ファイルの名前がキーに、コンテンツが値になります。Secret は pod 内のボリュームとしてマウントされます。以下の例は、キー値の検索に使用できるコマンドを示しています。

      $ ls /etc/secrets/my-secret/
      my-key  my-password
      $ cat /etc/secrets/my-secret/my-key
      devuser
      $ cat /etc/secrets/my-secret/my-password
      my-very-secure-pasword
      Copy to Clipboard Toggle word wrap
      注記

      Secret オブジェクトを変更すると、プロジェクトの一貫性が失われることがあります。Red Hat では、既存の Secret オブジェクトを変更する代わりに、古いオブジェクトと同じコンテンツを持つ新規オブジェクトを作成することを推奨します。これで、必要に応じてコンテンツを更新し、オペレーターカスタムリソース (CR) の参照を更新できます。これは新しい CR 更新とみなされ、pod はリロードされます。

    • WildFlyServerSpec で作成した ConfigMap の名前を指定し、アプリケーションを実行している Pod のボリュームとしてマウントします。以下に例を示します。

      spec:
        configMaps:
        - my-config
      Copy to Clipboard Toggle word wrap

      ConfigMap/etc/configmaps/<configmap name> にマウントされ、それぞれのキー/ 値はファイルとして保存されます。ファイルの名前がキーに、コンテンツが値になります。ConfigMap は pod 内のボリュームとしてマウントされます。キーの値を検索するには、次のコマンドを実行します。

      $ ls /etc/configmaps/my-config/
      key1 key2
      $ cat /etc/configmaps/my-config/key1
      value1
      $ cat /etc/configmaps/my-config/key2
      value2
      Copy to Clipboard Toggle word wrap
      注記

      ConfigMap を変更すると、プロジェクトの一貫性が失われることがあります。Red Hat では、既存の ConfigMap オブジェクトを変更する代わりに、古いオブジェクトと同じコンテンツを持つ新しい ConfigMap を作成することを推奨します。これで、必要に応じてコンテンツを更新し、オペレーターカスタムリソース (CR) の参照を更新できます。これは新しい CR 更新とみなされ、pod はリロードされます。

    • 独自のスタンドアロン ConfigMap を選択する場合は、 ConfigMap の名前と standalone.xml ファイルのキーを指定します。

        standaloneConfigMap:
          name: clusterbench-config-map
          key: standalone-openshift.xml
      Copy to Clipboard Toggle word wrap
      注記

      JBoss EAP 7 では、standalone.xml ファイルから ConfigMap を作成することはできません。

    • OpenShift でデフォルトの HTTP ルートの作成を無効にする場合は、disableHTTPRoutetrue に設定します。

      spec:
        disableHTTPRoute: true
      Copy to Clipboard Toggle word wrap

7.5.1. Secret の作成

アプリケーションの CustomResourceDefinition (CRD) ファイルが Secret を参照する場合は、EAP オペレーターを使用してアプリケーションを OpenShift にデプロイする前に Secret を作成する必要があります。

手順

  • Secret を作成するには、以下を実行します。
$ oc create secret generic my-secret --from-literal=my-key=devuser --from-literal=my-password='my-very-secure-pasword'
Copy to Clipboard Toggle word wrap

7.5.2. ConfigMap の作成

アプリケーションの CustomResourceDefinition (CRD) ファイルが spec.ConfigMaps フィールドの ConfigMap を参照する場合は、EAP オペレーターを使用してアプリケーションを OpenShift にデプロイする前に ConfigMap を作成する必要があります。

手順

  • configmap を作成するには、以下を実行します。
 $ oc create configmap my-config --from-literal=key1=value1 --from-literal=key2=value2
configmap/my-config created
Copy to Clipboard Toggle word wrap

7.5.3. standalone.xml ファイルからの ConfigMap の作成

JBoss EAP for OpenShift Source-to-Image (S2I) から提供されるアプリケーションイメージで使用する代わりに、独自の JBoss EAP スタンドアロン設定を作成できます。standalone.xml ファイルは、オペレーターからアクセスできる ConfigMap に配置する必要があります。

注記

注記: JBoss EAP 7 では、ConfigMap から standalone.xml ファイルを指定することはできません。

手順

  • standalone.xml ファイルから ConfigMap を作成するには、以下を実行します。
 $ oc create configmap clusterbench-config-map --from-file examples/clustering/config/standalone-openshift.xml
configmap/clusterbench-config-map created
Copy to Clipboard Toggle word wrap

7.5.4. アプリケーションの永続ストレージの設定

アプリケーションが一部のデータについて永続ストレージを必要とする場合 (pod の再起動後も維持する必要のあるトランザクションログやメッセージングログなど) は、ストレージ仕様を設定します。ストレージ仕様が空の場合は、EmptyDir ボリュームはアプリケーションの各 pod によって使用されます。ただし、このボリュームは、対応する pod が停止した後は使用されなくなります。

手順

  1. volumeClaimTemplate を指定し、リソース要件を設定して、JBoss EAP スタンドアロンデータディレクトリーを保存します。テンプレートの名前は JBoss EAP の名前から派生します。対応するボリュームは ReadWriteOnce アクセスモードでマウントされます。

    spec:
      storage:
        volumeClaimTemplate:
          spec:
            resources:
              requests:
                storage: 3Gi
    Copy to Clipboard Toggle word wrap

    このストレージ要件を満たす永続ボリュームは、/eap/standalone/data ディレクトリーにマウントされます。

7.6. EAP operator を使用した Red Hat Single Sign-On 対応イメージのデプロイ

EAP operator は、OpenShift で Red Hat Single Sign-On が有効な EAP アプリケーションイメージをデプロイするのに役立ちます。アプリケーションイメージをデプロイするには、表にリストされている 環境変数とシークレット を設定します。

前提条件

手順

  1. eap74-sso-s2i テンプレートによって作成された DeploymentConfig ファイルを、EAP アプリケーションイメージを構築した場所から削除します。
  2. EAP オペレーターの WildFlyServer リソースの env フィールドで、すべての 環境変数とシークレット を設定します。

    設定例

    $ cat > my-app.yaml<<EOF
    
    apiVersion: wildfly.org/v1alpha1
    kind: WildFlyServer
    metadata:
      name: my-app
    spec:
      applicationImage: 'my-app:latest'
      replicas: 1
    
      env:
      - name: SSO_URL
        value: https://secure-sso-sso-app-demo.openshift32.example.com/auth
      - name: SSO_REALM
        value: eap-demo
      - name: SSO_PUBLIC_KEY
        value: realm-public-key
      - name: SSO_USERNAME
        value: mySsoUser
      - name: SSO_PASSWORD
        value: 6fedmL3P
      - name: SSO_SAML_KEYSTORE
        value: /etc/secret/sso-app-secret/keystore.jks
      - name: SSO_SAML_KEYSTORE_PASSWORD
        value: mykeystorepass
      - name: SSO_SAML_CERTIFICATE_NAME
        value: jboss
      - name: SSO_BEARER_ONLY
        value: true
      - name: SSO_CLIENT
        value: module-name
      - name: SSO_ENABLE_CORS
        value: true
      - name: SSO_SECRET
        value: KZ1QyIq4
      - name: SSO_DISABLE_SSL_CERTIFICATE_VALIDATION
        value: true
      - name: SSO_SAML_KEYSTORE_SECRET
        value: sso-app-secret
      - name: HTTPS_SECRET
        value: eap-ssl-secret
      - name: SSO_TRUSTSTORE_SECRET
        value: sso-app-secret
    EOF
    Copy to Clipboard Toggle word wrap

    注記
    • すべての環境変数とシークレットがイメージ設定と一致していることを確認してください。
    • パラメーター SSO_URL の値は、OpenShift クラスターのユーザーによって異なります。
    • EAP Operator はシークレットを /etc/secret ディレクトリーにマウントしますが、eap74-sso テンプレートはシークレットを /etc ディレクトリーにマウントします。
  3. EAP オペレーターの WildFlyServer リソース設定を保存します。

7.7. EAP オペレーターを使用したアプリケーションのメトリクスの表示

EAP オペレーターを使用すると、OpenShift にデプロイされたアプリケーションのメトリクスを表示できます。

クラスター管理者がプロジェクトでメトリクスの監視を有効にすると、EAP オペレーターは OpenShift コンソールでメトリクスを自動的に表示します。

前提条件

手順

  1. OpenShift Container Platform Web コンソールで、MonitoringMetrics の順に移動します。
  2. メトリクス 画面で、テキストボックスにアプリケーションの名前を入力してアプリケーションを選択します。アプリケーションのメトリクスが画面に表示されます。
注記

JBoss EAP アプリケーションサーバーに関連するすべてのメトリクスの前に jboss が付けられます。例: jboss_undertow_request_count_total

7.8. Web コンソールを使用した EAP Operator のアンインストール

クラスターから EAP オペレーターを削除またはアンインストールするには、サブスクリプションを削除して、サブスクライブされた名前空間から削除してください。EAP オペレーターの ClusterServiceVersion (CSV) およびデプロイメントを削除することもできます。

注記

データの一貫性と安全性を確保するには、クラスターでの pod 数を 0 に下げてから EAP オペレーターをアンインストールします。

Web コンソールを使用して EAP オペレーターをアンインストールできます。

警告

wildflyserver 定義の全体を削除する場合 (oc delete wildflyserver <deployment_name>)、トランザクション回復プロセスは開始されず、未完了のトランザクションに関係なく Pod は終了します。この操作により、後で開始するデータの変更がブロックされる可能性があります。この wildflyserver を使用したトランザクションエンタープライズ bean リモート呼び出しに関連する他の JBoss EAP インスタンスのデータ変更もブロックされる可能性があります。

手順

  1. OperatorsInstalled Operators ページから、JBoss EAP を選択します。
  2. Operator Details ページの右側で、Actions ドロップダウンメニューから Uninstall Operator を選択します。
  3. 削除対象のインストールに関連したすべてのコンポーネントが必要であれば、Remove Operator Subscription ウインドウでダイアログが表示されたら、Also completely remove the Operator from the selected namespace チェックボックスを必要に応じて選択します。これにより CSV が削除され、オペレーターに関連付けられた pod、デプロイメント、カスタムリソース定義 (CRD) およびカスタムリソース (CR) が削除されます。
  4. Remove をクリックします。EAP オペレーターは実行を停止し、更新を受信しなくなります。

7.9. CLI を使用した EAP Operator のアンインストール

クラスターから EAP オペレーターを削除またはアンインストールするには、サブスクリプションを削除して、サブスクライブされた名前空間から削除してください。EAP オペレーターの ClusterServiceVersion (CSV) およびデプロイメントを削除することもできます。

注記

データの一貫性と安全性を確保するには、クラスターでの pod 数を 0 に下げてから EAP オペレーターをアンインストールします。

EAP オペレーターは、コマンドラインを使用してアンインストールできます。

コマンドラインを使用する場合は、サブスクリプションと CSV をターゲットの名前空間から削除することにより、オペレーターをアンインストールします。

警告

wildflyserver 定義の全体を削除する場合 (oc delete wildflyserver <deployment_name>)、トランザクション回復プロセスは開始されず、未完了のトランザクションに関係なく Pod は終了します。この操作により、後で開始するデータの変更がブロックされる可能性があります。この wildflyserver を使用したトランザクションエンタープライズ bean リモート呼び出しに関連する他の JBoss EAP インスタンスのデータ変更もブロックされる可能性があります。

手順

  1. currentCSV フィールドの EAP オペレーターサブスクリプションの現在のバージョンを確認します。

    $ oc get subscription eap-operator -n openshift-operators -o yaml | grep currentCSV
      currentCSV: eap-operator.v1.0.0
    Copy to Clipboard Toggle word wrap
  2. EAP オペレーターのサブスクリプションを削除します。

    $ oc delete subscription eap-operator -n openshift-operators
    subscription.operators.coreos.com "eap-operator" deleted
    Copy to Clipboard Toggle word wrap
  3. 前回の手順の currentCSV 値を使用し、ターゲット名前空間で EAP オペレーターの CSV を削除します。

    $ oc delete clusterserviceversion eap-operator.v1.0.0 -n openshift-operators
    clusterserviceversion.operators.coreos.com "eap-operator.v1.0.0" deleted
    Copy to Clipboard Toggle word wrap

7.10. 安全なトランザクションリカバリーの EAP Operator

特定の種類のトランザクションの場合、EAP オペレーターは、アプリケーションクラスターを削除する前にデータの一貫性を確立します。これは、レプリカを縮小し、削除するために clean として Pod をマークする前に、すべてのトランザクションが完了していることを検証することで行います。

注記

一部のシナリオはサポートされていません。サポートされていないシナリオの詳細は、サポートされないトランザクションリカバリーのシナリオ を参照してください。

これは、データが整合した状態でディプロイメントを安全に削除するのであれば、最初に Pod の数を 0 に縮小し、すべての pod が削除されるまで待ってからはじめて wildflyserver インスタンスを削除するということを意味します。

警告

wildflyserver 定義の全体を削除する場合 (oc delete wildflyserver <deployment_name>)、トランザクション回復プロセスは開始されず、未完了のトランザクションに関係なく Pod は終了します。この操作により、後で開始するデータの変更がブロックされる可能性があります。この wildflyserver を使用したトランザクションエンタープライズ bean リモート呼び出しに関連する他の JBoss EAP インスタンスのデータ変更もブロックされる可能性があります。

縮小プロセスが開始しても、Pod の状態 (oc get pod <pod_name>) は依然として Running とマークされています。これは、ターゲット対象のリモートエンタープライズ bean 呼び出しを含む、すべての未完了トランザクションを完了する必要があるためです。

縮小プロセスの状態を監視する場合は、wildflyserver インスタンスのステータスを確認します。詳細は、Monitoring the Scaledown Process を参照してください。縮小を行う際の Pod ステータスの詳細は、Pod Status During scaleDown を参照してください。

7.10.1. 安定したネットワークホスト名の StatefulSets

wildflyserver を管理する EAP オペレーターは、JBoss EAP Pod を管理する基礎となるオブジェクトとして StatefulSet を作成します。

StatefulSet は、ステートフルなアプリケーションを管理するワークロード API オブジェクトです。これは一連の Pod のデプロイメントおよびスケーリングを管理し、これらの Pod の順序と一意性を保証します。

StatefulSet は、クラスターの Pod が事前に定義された順序で命名されるようにします。また、これは Pod が同じ順序で終了することを保証します。たとえば、pod-1 にヒューリスティックな結果のトランザクションがあるとします。つまり、その状態は SCALING_DOWN_RECOVERY_DIRTY です。pod-0 が SCALING_DOWN_CLEAN の状態であっても、pod-1 の前に終了することはありません。pod-1 が clean で、終了するまで、pod-0 は SCALING_DOWN_CLEAN 状態に留まります。ただし、pod-0 が SCALING_DOWN_CLEAN 状態であっても、新しいリクエストを受け取らず、実際にはアイドル状態になります。

注記

StatefulSet のレプリカサイズを下げたり、Pod 自体を削除したりしても、これらの変更は元に戻りません。

7.10.2. Scaledown プロセスの監視

縮小プロセスの状態を監視する場合は、wildflyserver インスタンスのステータスを確認する必要があります。縮小時の各種 Pod ステータスの詳細は、Pod Status During scaleDown を参照してください。

手順

  • 縮小プロセスの状態を確認する方法:

    oc describe wildflyserver <name>
    Copy to Clipboard Toggle word wrap
    • WildFlyServer.Status.Scalingdown Pods および WildFlyServer.Status.Replicas フィールドは、アクティブな Pod とアクティブでない Pod の全体的な状態を示します
    • Scalingdown Pods フィールドは、未終了のトランザクションがすべて完了したときに終了する必要のある Pod 数を示します。
    • WildFlyServer.Status.Replicas フィールドには、実行中の Pod の現在の数が表示されます。
    • WildFlyServer.Spec.Replicas フィールドには、ACTIVE 状態の Pod の数が表示されます。
    • 縮小プロセスに Pod がない場合は、WildFlyServer.Status.ReplicasWildFlyServer.Spec.Replicas フィールドの Pod の数は同じです。
7.10.2.1. 縮小中の Pod ステータス

以下の表では、縮小時の各種 Pod ステータスを説明しています。

Expand
表7.1 Pod ステータスの説明
Pod ステータス説明

ACTIVE

Pod はアクティブの状態で、要求を処理しています。

SCALING_DOWN_RECOVERY_INVESTIGATION

Pod はまもなく縮小されます。縮小プロセスが、JBoss EAP のトランザクションの状態について調査中です。

SCALING_DOWN_RECOVERY_DIRTY

JBoss EAP には不完全なトランザクションが含まれています。Pod は、消去されるまで終了しません。トランザクションリカバリープロセスは JBoss EAP で定期的に実行され、トランザクションが完了するまで待機します。

SCALING_DOWN_CLEAN

Pod はトランザクションの縮小処理によって処理され、クラスターからの削除対象として clean とマークされます。

7.10.3. ヒューリスティックな結果のあるトランザクションの際の縮小

トランザクションの結果が不明な場合は、自動トランザクションリカバリーは行えません。その場合、トランザクションを手動でリカバリーする必要があります。

前提条件

  • Pod のステータスが SCALING_DOWN_RECOVERY_DIRTY から抜け出せない。

手順

  1. CLI を使用して JBoss EAP インスタンスにアクセスします。
  2. トランザクションオブジェクトストアのすべてのヒューリスティックトランザクションレコードを解決します。詳細は、JBoss EAP でのトランザクションヒューリスティックな結果のリカバリー を参照してください。
  3. エンタープライズ bean クライアントリカバリーフォルダーからすべてのレコードを削除します。

    1. すべてのファイルを Pod エンタープライズ bean クライアントリカバリーディレクトリーから削除します。

      $JBOSS_HOME/standalone/data/ejb-xa-recovery
      oc exec <podname> rm -rf $JBOSS_HOME/standalone/data/ejb-xa-recovery
      Copy to Clipboard Toggle word wrap
  4. Pod のステータスが SCALING_DOWN_CLEAN に変わり、Pod が終了します。

システムが トランザクションログ を保存するファイルシステムを提供しない場合は、JBoss EAP S2I イメージを使用して JDBC オブジェクトストアを設定します。

重要

JBoss EAP が起動可能な JAR としてデプロイされた場合、S2I 環境変数を使用することはできません。この場合、Galleon レイヤーを作成するか、 CLI スクリプトを設定して、必要な設定変更を行う必要があります。

JDBC オブジェクトストアは、環境変数 TX_DATABASE_PREFIX_MAPPING で設定できます。この変数の構造は DB_SERVICE_PREFIX_MAPPING と同じです。

前提条件

  • 環境変数の値に基づいてデータソースを作成している。
  • データベースと、JDBC オブジェクトストアで通信する トランザクションマネージャー の間で、一貫性のあるデータ読み取りと書き込みパーミッションを確保している。詳細は、configuring JDBC data sources を参照してください。

手順

  • S2I 環境変数を使用して JDBC オブジェクトストアをセットアップおよび設定します。

    # Narayana JDBC objectstore configuration via s2i env variables
    - name: TX_DATABASE_PREFIX_MAPPING
      value: 'PostgresJdbcObjectStore-postgresql=PG_OBJECTSTORE'
    - name: POSTGRESJDBCOBJECTSTORE_POSTGRESQL_SERVICE_HOST
      value: 'postgresql'
    - name: POSTGRESJDBCOBJECTSTORE_POSTGRESQL_SERVICE_PORT
      value: '5432'
    - name: PG_OBJECTSTORE_JNDI
      value: 'java:jboss/datasources/PostgresJdbc'
    - name: PG_OBJECTSTORE_DRIVER
      value: 'postgresql'
    - name: PG_OBJECTSTORE_DATABASE
      value: 'sampledb'
    - name: PG_OBJECTSTORE_USERNAME
      value: 'admin'
    - name: PG_OBJECTSTORE_PASSWORD
      value: 'admin'
    Copy to Clipboard Toggle word wrap

検証

  • データソース設定およびトランザクションサブシステム設定の両方を確認するには、standalone-openshift.xml 設定ファイル oc rsh <podname> cat /opt/eap/standalone/configuration/standalone-openshift.xml を確認します。

    想定される出力:

    <datasource jta="false" jndi-name="java:jboss/datasources/PostgresJdbcObjectStore" pool-name="postgresjdbcobjectstore_postgresqlObjectStorePool"
        enabled="true" use-java-context="true" statistics-enabled="${wildfly.datasources.statistics-enabled:${wildfly.statistics-enabled:false}}">
        <connection-url>jdbc:postgresql://postgresql:5432/sampledb</connection-url>
        <driver>postgresql</driver>
        <security>
            <user-name>admin</user-name>
            <password>admin</password>
        </security>
    </datasource>
    
    <!-- under subsystem urn:jboss:domain:transactions -->
    <jdbc-store datasource-jndi-name="java:jboss/datasources/PostgresJdbcObjectStore">
         <!-- the pod name was named transactions-xa-0 -->
        <action table-prefix="ostransactionsxa0"/>
        <communication table-prefix="ostransactionsxa0"/>
        <state table-prefix="ostransactionsxa0"/>
    </jdbc-store>
    Copy to Clipboard Toggle word wrap

7.11. Horizontal Pod Autoscaler HPA での Pod の自動スケーリング

EAP オペレーターを使用すると、水平 Pod オートスケーラー HPA を使用して、その EAP アプリケーションに属する Pod から収集されたメトリックに基づいて、EAP アプリケーションのスケールを自動的に増減できます。

注記

HPA を使用すると、Pod がスケールダウンされた場合でもトランザクションの回復が確実に処理されます。

手順

  1. リソースを設定します。

    apiVersion: wildfly.org/v1alpha1
    kind: WildFlyServer
    metadata:
      name: eap-helloworld
    spec:
      applicationImage: 'eap-helloworld:latest'
      replicas: 1
      resources:
        limits:
          cpu: 500m
          memory: 2Gi
        requests:
          cpu: 100m
          memory: 1Gi
    Copy to Clipboard Toggle word wrap
    重要

    自動スケーリングが期待どおりに機能するには、Pod 内のコンテナーのリソース制限とリクエストを指定する必要があります。

  2. Horizontal Pod Autoscaler を作成します。

    oc autoscale wildflyserver/eap-helloworld --cpu-percent=50 --min=1 --max=10
    Copy to Clipboard Toggle word wrap

検証

  • レプリカをチェックすることで、HPA の動作を確認できます。ワークロードの増減に応じて、レプリカの数が増減します。
oc get hpa -w
NAME               REFERENCE                        TARGETS    MINPODS   MAXPODS   REPLICAS   AGE
eap-helloworld   WildFlyServer/eap-helloworld   217%/50%   1         10        1          4s
eap-helloworld   WildFlyServer/eap-helloworld   217%/50%   1         10        4          17s
eap-helloworld   WildFlyServer/eap-helloworld   133%/50%   1         10        8          32s
eap-helloworld   WildFlyServer/eap-helloworld   133%/50%   1         10        10         47s
eap-helloworld   WildFlyServer/eap-helloworld   139%/50%   1         10        10         62s
eap-helloworld   WildFlyServer/eap-helloworld   180%/50%   1         10        10         92s
eap-helloworld   WildFlyServer/eap-helloworld   133%/50%   1         10        10         2m2s
Copy to Clipboard Toggle word wrap

7.12. OpenShift 上の Jakarta Enterprise Beans Remoting

JBoss EAP で、OpenShift 上の各種 JBoss EAP クラスター間でエンタープライズ bean リモーティング呼び出しを正しく機能させるには、OpenShift のエンタープライズ bean リモーティング設定オプションを理解する必要があります。

注記

OpenShift へのデプロイ時に、EAP オペレーターの使用を考慮してください。EAP オペレーターは、Enterprise Beans リモーティングおよびトランザクションリカバリープロセッシングの適切な処理に StatefulSet を使用します。StatefulSet は Pod の再起動後もストレージおよびネットワークのホスト名の安定性を永続的に保持します。

JBoss EAP インスタンスがエンタープライズ bean リモート呼び出しとトランザクション伝搬を使用して通信する場合は、ネットワークホスト名が安定している必要があります。Pod が再起動した場合でも、同じホスト名で JBoss EAP インスタンスに到達できる必要があります。ステートフルなコンポーネントであるトランザクションマネージャーは、永続化されたトランザクションデータを特定の JBoss EAP インスタンスにバインドします。トランザクションログは特定の JBoss EAP インスタンスにバインドされるため、同じインスタンスで完了する必要があります。

JDBC トランザクションログストアが使用されたときにデータの損失を防ぐため、データベースによってデータの一貫性の読み取りおよび書き込みが提供されるようにしてください。一貫性のあるデータの読み取りおよび書き込みは、データベースが複数のインスタンスで水平スケーリングされている場合に重要になります。

エンタープライズ bean リモート呼び出し元では、リモート呼び出しを設定を 2 つの方法で設定できます。

エンタープライズ bean リモート呼び出し設定メソッドに応じて、ターゲットノードのアドレスを表す値を再設定する必要があります。

注記

リモート呼び出しのターゲットエンタープライズ bean の名前は最初の Pod の DNS アドレスでなければなりません。

StatefulSet の動作は Pod の順序によって異なります。Pod の名前は事前に定義された順序で指定されます。たとえば、アプリケーションを 3 つのレプリカにスケーリングする場合、Pod の名前は eap-server-0eap-server-1eap-server-2 になります。

EAP オペレーターは、特定の DNS ホスト名が Pod に割り当てられるように ヘッドレスサービス も使用します。アプリケーションが EAP オペレーターを使用する場合、ヘッドレスサービスは eap-server-headless といった名前で作成されます。この場合、最初の Pod の DNS 名は eap-server-0.eap-server-headless になります。

ホスト名 eap-server-0.eap-server-headless を使用すると、エンタープライズ bean 呼び出しが、クラスターに接続されている EAP インスタンスに到達できるようになります。ブートストラップ接続は Jakarta Enterprise Beans クライアントを初期化するために使用されます。これは、EAP クラスターの構造を次の手順として収集します。

7.12.1. OpenShift での Jakarta Enterprise Beans の設定

エンタープライズ bean リモーティングの呼び出し元として動作する JBoss EAP サーバーを設定する必要があります。ターゲットサーバーは、エンタープライズ bean リモート呼び出しを受信するパーミッションを持つようにユーザーを設定する必要があります。

前提条件

  • EAP オペレーターと、対応の JBoss EAP for OpenShift S2I イメージ使用して、OpenShift で JBoss アプリケーションインスタンスのディプロイメントと管理を行っている。
  • クラスターリングが正しく設定されている。JBoss EAP クラスターリングの詳細は、クラスターリング セクションを参照してください。

手順

  1. エンタープライズ bean リモート呼び出しを受信するパーミッションを持つターゲットサーバーにユーザーを作成します。

    $JBOSS_HOME/bin/add-user.sh
    Copy to Clipboard Toggle word wrap
  2. 呼び出し元の JBoss EAP アプリケーションサーバーを設定します。

    1. カスタム設定機能を使用して、$JBOSS_HOME/standalone/configurationeap-config.xml ファイルを作成します。詳細は、カスタム設定 を参照してください。
    2. wildfly.config.url プロパティーで呼び出し元 JBoss EAP アプリケーションサーバーを設定します。

      JAVA_OPTS_APPEND="-Dwildfly.config.url=$JBOSS_HOME/standalone/configuration/eap-config.xml"
      Copy to Clipboard Toggle word wrap
      注記

      設定に以下の例を使用する場合は、>>PASTE_…​_HERE<< を、設定したユーザー名とパスワードで置き換えます。

      設定例

      <configuration>
         <authentication-client xmlns="urn:elytron:1.0">
            <authentication-rules>
               <rule use-configuration="jta">
                  <match-abstract-type name="jta" authority="jboss" />
               </rule>
            </authentication-rules>
            <authentication-configurations>
               <configuration name="jta">
                  <sasl-mechanism-selector selector="DIGEST-MD5" />
                  <providers>
                     <use-service-loader />
                  </providers>
                  <set-user-name name="PASTE_USER_NAME_HERE" />
                  <credentials>
                     <clear-password password="PASTE_PASSWORD_HERE" />
                  </credentials>
                  <set-mechanism-realm name="ApplicationRealm" />
               </configuration>
            </authentication-configurations>
         </authentication-client>
      </configuration>
      Copy to Clipboard Toggle word wrap

第8章 参考情報

注記

本セクションの内容は、このイメージの技術文書を参考にしました。開発の目的で便利なリファレンスとして提供され、製品ドキュメントの範囲外となるテスト用に提供されます。

8.1. 永続テンプレート

JBoss EAP およびデータベース Pod をデプロイする JBoss EAP データベーステンプレートは、一時的なものと永続的なものの両方があります。

永続テンプレートには、永続ボリュームクレームのプロビジョニングを行う環境変数が含まれます。これは、JBoss EAP for OpenShift デプロイメントのストレージボリュームとして使用される利用可能な永続ボリュームとバインドします。タイマースキーマ、ログ処理、またはデータ更新などの情報は、一時的なコンテナーメモリーではなく、ストレージボリュームに保存されます。この情報は、プロジェクトのアップグレード、デプロイメントのロールバック、予期せぬエラーなどの何らかの理由で Pod がダウンした場合に永続します。

デプロイメントの永続ストレージボリュームがないと、この情報はコンテナーメモリーのみに格納され、何らかの理由で Pod がダウンした場合は失われます。

たとえば、永続ストレージが基盤となる EE タイマーは Pod が再起動しても実行を継続します。再起動のプロセス中にタイマーによってトリガーされたイベントは、アプリケーションが再度稼働したとき実行されます。

逆に、EE タイマーがコンテナーメモリーで稼働している場合、Pod が再起動するとタイマーの状態は失われ、Pod が再度稼働したときに最初から開始します。

8.2. 情報環境変数

以下の環境変数は、イメージに情報を提供するための環境変数であり、ユーザーが変更すべきではありません。

Expand
表8.1 情報環境変数
変数名説明および値

JBOSS_IMAGE_NAME

イメージ名

値:

  • jboss-eap-7/eap74-openjdk8-openshift-rhel7 (JDK 8 / RHEL 7)
  • jboss-eap-7/eap74-openjdk11-openshift-rhel8 (JDK 11 / RHEL 8)

JBOSS_IMAGE_VERSION

イメージバージョン。

値: イメージバージョン番号になります。最新の値は Red Hat Container Catalog を参照してください。

JBOSS_MODULES_SYSTEM_PKGS

アプリケーションが利用できる JBoss EAP システムモジュールパッケージのコンマ区切りリスト。

値: jdk.nashorn.api

STI_BUILDER

jee プロジェクトタイプの OpenShift S2I サポートを提供します。

値: jee

8.3. 設定環境変数

以下の環境変数を設定すると再ビルドせずにイメージを調整することができます。

注記

ここに記載されていない他の環境変数については、JBoss EAP のドキュメント を参照してください。

Expand
表8.2 設定環境変数
変数名説明

AB_JOLOKIA_AUTH_OPENSHIFT

OpenShift TLS 通信のクライアント認証を切り替えます。このパラメーターの値は truefalse または提供されるクライアントの証明書に含まれる必要がある相対識別名になります。デフォルトの CA 証明書は /var/run/secrets/kubernetes.io/serviceaccount/ca.crt に設定されます。

  • OpenShift TLS 通信のクライアント認証を無効にする場合は false に設定します。
  • デフォルトの CA 証明書とクライアントプリンシパルを使用して OpenShift TLS 通信のクライアント認証を有効にするには、true を設定します。
  • OpenShift TLS 通信のクライアント認証を有効にし、クライアントプリンシパルはオーバーライドするには、cn=someSystem などの相対識別名に設定します。提供されるクライアントの証明書にこの識別名が含まれている必要があります。

AB_JOLOKIA_CONFIG

設定した場合、Jolokia リファレンスドキュメント に説明があるように、この完全修飾ファイルパスを Jolokia JVM エージェントプロパティーに使用します。独自の Jolokia プロパティー設定ファイルを設定した場合、このドキュメントの残りの Jolokia 設定は無視されます。

設定しない場合、Jolokia リファレンスドキュメントに定義された設定を使用して、/opt/jolokia/etc/jolokia.properties が作成されます。

値の例: /opt/jolokia/custom.properties

AB_JOLOKIA_DISCOVERY_ENABLED

Jolokia の検索を有効にします。

デフォルトは false です。

AB_JOLOKIA_HOST

バインド先のホストアドレス。

デフォルトは 0.0.0.0 です。

値の例: 127.0.0.1

AB_JOLOKIA_HTTPS

HTTPS を使用したセキュアな通信を有効にします。

デフォルトでは、AB_JOLOKIA_OPTSserverCert 設定の指定がないと、自己証明サーバー証明書が生成されます。

値の例: true

AB_JOLOKIA_ID

使用するエージェント ID。

デフォルト値はコンテナー ID の $HOSTNAME です。

値の例: openjdk-app-1-xqlsj

AB_JOLOKIA_OFF

true に設定すると、Jolokia のアクティベートを無効にし、空の値がエコーされます。

Jolokia はデフォルトで有効になります。

AB_JOLOKIA_OPTS

エージェント設定に追加されるその他のオプション。key=value, key=value, …​ の形式で指定する必要があります。

値の例: backlog=20

AB_JOLOKIA_PASSWORD

Basic 認証のパスワード。

デフォルトでは認証は無効になっています。

値の例: mypassword

AB_JOLOKIA_PASSWORD_RANDOM

AB_JOLOKIA_PASSWORD が無作為に生成されるべきかどうかを決定します。

パスワードを無作為に生成する場合は true に設定します。生成された値は /opt/jolokia/etc/jolokia.pw ファイルに保存されます。

AB_JOLOKIA_PORT

リッスンするポート。

デフォルトは 8778 です。

値の例: 5432

AB_JOLOKIA_USER

Basic 認証に使用するユーザーの名前。

デフォルトは jolokia です。

値の例: myusername

AB_PROMETHEUS_ENABLE

true に設定すると、この値により、Prometheus 形式のメトリクスを公開する jmx-exporter java エージェントが有効になります。デフォルトは false に設定されます。

注記

MicroProfile Metrics サブシステムは、データを Prometheus 形式で公開するための推奨される方法です。MicroProfile Metrics サブシステムの詳細は、JBoss EAP設定ガイドEclipse MicroProfile を参照してください。

AB_PROMETHEUS_JMX_EXPORTER_CONFIG

jmx-exporter エージェントがによりデフォルトの configuration.yaml ファイルの代わりに使用する、ユーザーが定義した configuration.yaml に対するコンテナー内のパス。追加の設定ファイルを取り入れる S2I メカニズムの詳細は、S2I アーティファクト を参照してください。

AB_PROMETHEUS_JMX_EXPORTER_PORT

jmx-exporter エージェントが Prometheus サーバーからスクレープをリッスンするポート。デフォルト値は 9799 です。エージェントは localhost をリッスンします。アプリケーションに、このエンドポイントを公開するサービスを含めるように DeploymentConfig API を設定することで、メトリックをコンテナーの外部で使用できるようにできます。

CLI_GRACEFUL_SHUTDOWN

ゼロでない長さの値が設定された場合、イメージは TERM シグナルでシャットダウンしないようにし、JBoss EAP 管理 CLI を使用した shutdown コマンドの実行が必要になります。

値の例: true

CONTAINER_HEAP_PERCENT

最大 Java ヒープサイズを利用可能なコンテナーメモリーの割合 (パーセント) として設定します。

値の例: 0.5

CUSTOM_INSTALL_DIRECTORIES

S2I プロセス中にイメージのアーティファクトのインストールおよび設定に使用されるディレクトリーのコンマ区切りリスト。

値の例: custom,shared

DEFAULT_JMS_CONNECTION_FACTORY

この値は、Jakarta Messaging 接続ファクトリーのデフォルトの JNDI バインディングを指定するために使用されます (例: jms-connection-factory='java:jboss/DefaultJMSConnectionFactory')。

値の例: java:jboss/DefaultJMSConnectionFactory

DISABLE_EMBEDDED_JMS_BROKER

OpenShift コンテナーでの組み込みメッセージングブローカーの使用は非推奨となりました。組み込みブローカーのサポートは今後のリリースで削除されます。

以下の条件が true の場合は、警告がログに記録されます。

  • コンテナーは、埋め込みメッセージングブローカーを使用するよう設定されます。
  • リモートブローカーはコンテナー用に設定されていません。
  • この変数が設定されていないか、false の値で設定されます。

この変数が true に設定された値に含まれる場合は、埋め込みメッセージングブローカーは無効になり、警告はログに記録されません。

リモートメッセージング宛先で設定されていないコンテナーの場合は、この変数を true に追加します。

ENABLE_ACCESS_LOG

標準出力チャネルへのアクセスメッセージのロギングを有効にします。

アクセスメッセージのロギングは以下の方法を使用して実装されます。

  • JBoss EAP 6.4 OpenShift イメージはカスタムの JBoss Web Access Log Valve を使用します。
  • JBoss EAP for OpenShift イメージは Undertow AccessLogHandler を使用します。

デフォルトは false です。

INITIAL_HEAP_PERCENT

初期 Java ヒープサイズを最大ヒープサイズの割合 (パーセント) として設定します。

値の例: 0.5

JAVA_OPTS_APPEND

サーバー起動オプション。

値の例: -Dfoo=bar

JBOSS_MODULES_SYSTEM_PKGS_APPEND

JBOSS_MODULES_SYSTEM_PKGS 環境変数に追加されるパッケージ名のコンマ区切りリスト。

値の例: org.jboss.byteman

JGROUPS_CLUSTER_PASSWORD

JGroups クラスターへの参加を許可するため、ノードの認証に使用されるパスワード。ASYM_ENCRYPT JGroups クラスタートラフィック暗号化プロトコルを使用している場合は必須 になります。設定がないと、認証は無効になり、クラスターの通信は暗号化されず、警告が発生します。SYM_ENCRYPT JGroups クラスタートラフィック暗号化プロトコルを使用する場合は任意です。

値の例: mypassword

JGROUPS_ENCRYPT_KEYSTORE

SYM_ENCRYPT JGroups クラスタートラフィック暗号化プロトコルを使用している場合、JGROUPS_ENCRYPT_SECRET 変数経由で指定されるシークレット内のキーストアファイルの名前。設定しないと、クラスター通信は暗号化されず、警告が発生します。

値の例: jgroups.jceks

JGROUPS_ENCRYPT_KEYSTORE_DIR

SYM_ENCRYPT JGroups クラスタートラフィック暗号化プロトコルを使用している場合、JGROUPS_ENCRYPT_SECRET 変数経由で指定されるシークレット内のキーストアファイルのディレクトリーパス。設定しないと、クラスター通信は暗号化されず、警告が発生します。

値の例: /etc/jgroups-encrypt-secret-volume

JGROUPS_ENCRYPT_NAME

SYM_ENCRYPT JGroups クラスタートラフィック暗号化プロトコルを使用する場合のサーバー証明書に関連する名前。設定しないと、クラスター通信は暗号化されず、警告が発生します。

値の例: jgroups

JGROUPS_ENCRYPT_PASSWORD

SYM_ENCRYPT JGroups クラスタートラフィック暗号化プロトコルを使用する場合にキーストアおよび証明書へのアクセスに使用されるパスワード。設定しないと、クラスター通信は暗号化されず、警告が発生します。

値の例: mypassword

JGROUPS_ENCRYPT_PROTOCOL

クラスタートラフィックの暗号化に使用する JGroups プロトコル。SYM_ENCRYPT または ASYM_ENCRYPT のいずれかになります。

デフォルトは SYM_ENCRYPT です。

値の例: ASYM_ENCRYPT

JGROUPS_ENCRYPT_SECRET

SYM_ENCRYPT JGroups クラスタートラフィック暗号化プロトコルを使用する場合に、JGroups 通信のセキュア化に使用する JGroups キーストア ファイルが含まれるシークレットの名前。設定しないと、クラスター通信は暗号化されず、警告が発生します。

値の例: eap7-app-secret

JGROUPS_PING_PROTOCOL

ノードの検索に使用する JGroups プロトコル。dns.DNS_PING または kubernetes.KUBE_PING のいずれかを使用できます。

MQ_SIMPLE_DEFAULT_PHYSICAL_DESTINATION

後方互換性を維持するには、true を設定し、queue/MyQueue および topic/MyTopic の代わりに MyQueue および MyTopic を物理宛先名のデフォルトとして使用します。

OPENSHIFT_DNS_PING_SERVICE_NAME

DNS 検索メカニズムに対してサーバーで ping ポートを公開するサービスの名前。

値の例: eap-app-ping

OPENSHIFT_DNS_PING_SERVICE_PORT

DNS 検索メカニズムの ping ポートのポート番号。指定のない場合は、サービスの SRV レコードからポート番号を検出を試み、検出できない場合はデフォルトの 8888 が使用されます。

デフォルトは 8888 です。

OPENSHIFT_KUBE_PING_LABELS

Kubernetes 検索メカニズムのクラスターリングラベルセレクター。

値の例: app=eap-app

OPENSHIFT_KUBE_PING_NAMESPACE

Kubernetes 検索メカニズムのクラスターリングプロジェクト namespace。

値の例: myproject

SCRIPT_DEBUG

true に設定すると、Bash スクリプトが -x オプションで実行され、実行と同時にコマンドとその引数が出力されます。

8.4. アプリケーションテンプレート

Expand
表8.3 アプリケーションテンプレート
変数名説明

AUTO_DEPLOY_EXPLODED

展開形式のデプロイメントコンテンツが自動的にデプロイされるかどうかを制御します。

値の例: false

8.5. 公開されたポート

Expand
表8.4 公開されたポート
ポート番号説明

8443

HTTPS

8778

Jolokia の監視

8.6. データソース

データソースは、環境変数の一部の値を元にして自動的に作成されます。

最も重要な環境変数は、データソースの JNDI マッピングを定義する DB_SERVICE_PREFIX_MAPPING です。この変数で使用できる値は、POOLNAME-DATABASETYPE=PREFIX トリプレットのコンマ区切りリストです。 説明を以下に示します。

  • POOLNAME はデータソースの pool-name として使用されます。
  • DATABASETYPE は使用するデータベースドライバーです。
  • PREFIX は、データソースを設定するために使用される環境変数の名前に使用される接頭辞です。

8.6.1. データソースの JNDI マッピング

起動スクリプトは、イメージの起動時に実行される個別のデータソースを DB_SERVICE_PREFIX_MAPPING 環境変数に定義された各 POOLNAME-DATABASETYPE=PREFIX トリプレットに対して作成します。

注記

DB_SERVICE_PREFIX_MAPPING の最初の部分 (等号の前) は小文字である必要があります。

DATABASETYPE はデータソースのドライバーを決定します。

ドライバーの設定に関する詳細は、モジュール、ドライバー、および汎用デプロイメント を参照してください。JDK 8 イメージにはデフォルトで設定された postgresql および mysql のドライバーがあります。

警告

POOLNAME パラメーターには特殊文字を使用しないでください。

データベースドライバー

Red Hat が提供する内部データソースドライバーを JBoss EAP for OpenShift イメージと使用する場合のサポートは、非推奨になりました。Red Hat では、データベースベンダーから取得した JDBC ドライバーを JBoss EAP アプリケーションに使用することをお勧めします。

以下の内部データソースは、JBoss EAP for OpenShift イメージでは提供されないようになりました。

  • MySQL
  • PostgreSQL

ドライバーのインストールに関する詳細は、モジュール、ドライバー、および汎用デプロイメント を参照してください。

JBoss EAP で JDBC ドライバーを設定するための詳細は、設定ガイドJDBC ドライバー を参照してください。

プロビジョニングされたサーバーに追加する場合は、カスタムレイヤーを作成してこれらのドライバーおよびデータソースをインストールすることもできます。

8.6.1.1. データソース設定環境変数

その他のデータソースプロパティーを設定するには、以下の環境変数を使用します。

重要

必ず POOLNAMEDATABASETYPE、および PREFIX の値を、以下の変数名と適切な値に置き換えてください。置き換え可能な値の説明は、本セクションと データソース に記載されています。

Expand
変数名説明

POOLNAME_DATABASETYPE_SERVICE_HOST

データソースの connection-url プロパティーで使用されるデータベースサーバーのホスト名または IP アドレスを定義します。

値の例: 192.168.1.3

POOLNAME_DATABASETYPE_SERVICE_PORT

データソースのデータベースサーバーのポートを定義します。

値の例: 5432

PREFIX_BACKGROUND_VALIDATION

true に設定すると、データベース接続は使用前にバックグラウンドスレッド周期的に検証されます。デフォルトは false で、validate-on-match がデフォルトで有効になります。

PREFIX_BACKGROUND_VALIDATION_MILLIS

background-validation データベース接続の検証メカニズムが有効である場合 (PREFIX_BACKGROUND_VALIDATION 変数が true に設定) 、検証の頻度をミリ秒単位で指定します。デフォルトは 10000 です。

PREFIX_CONNECTION_CHECKER

使用中の特定のデータベースの接続を検証するために使用される接続チェッカークラスを指定します。

値の例: org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker

PREFIX_DATABASE

データソースのデータベース名を定義します。

値の例: myDatabase

PREFIX_DRIVER

データソースの Java データベースドライバーを定義します。

例の値: postgresql

PREFIX_EXCEPTION_SORTER

致命的なデータベース接続例外の発生後に適切に検出およびクリーンアップを行うために使用される例外ソータークラスを指定します。

例の値: org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLExceptionSorter

PREFIX_JNDI

データソースの JNDI 名を定義します。デフォルトは java:jboss/datasources/POOLNAME_DATABASETYPE で、POOLNAME および DATABASETYPE は上記のトリプレットから取得されます。この設定は、デフォルトの生成された JNDI 名をオーバーライドする場合に便利です。

値の例: java:jboss/datasources/test-postgresql

PREFIX_JTA

XA 以外のデータソースの Jakarta Transactions オプションを定義します。XA データソースはデフォルトで機能する Jakarta Transactions です。

デフォルト値は true です。

PREFIX_MAX_POOL_SIZE

データソースの最大プールサイズオプションを定義します。

値の例: 20

PREFIX_MIN_POOL_SIZE

データソースの最小プールサイズオプションを定義します。

値の例: 1

PREFIX_NONXA

データソースを非 XA データソースとして定義します。デフォルトは false です。

PREFIX_PASSWORD

データソースのパスワードを定義します。

値の例: password

PREFIX_TX_ISOLATION

データソースの java.sql.Connection トランザクション分離レベルを定義します。

値の例: TRANSACTION_READ_UNCOMMITTED

PREFIX_URL

データソースの接続 URL を定義します。

値の例: jdbc:postgresql://localhost:5432/postgresdb

PREFIX_USERNAME

データソースのユーザー名を定義します。

値の例: admin

OpenShift でこのイメージを実行している場合、POOLNAME_DATABASETYPE_SERVICE_HOST および POOLNAME_DATABASETYPE_SERVICE_PORT 環境変数は OpenShift アプリケーションテンプレートのデータベースサービス定義から自動的に設定されます。 その他の環境変数は、各 Pod テンプレートのコンテナー定義の env エントリーとして直接テンプレートで設定されます。

8.6.1.2. 例

これらの例は、DB_SERVICE_PREFIX_MAPPING 環境変数の値がどのようにデータソースの作成に影響するかを表しています。

8.6.1.2.1. 単一のマッピング

test-postgresql=TEST について考えてみます。

これは、java:jboss/datasources/test_postgresql 名でデータソースを作成します。さらに、パスワードやユーザー名などの必要な設定すべてが、TEST_USERNAMETEST_PASSWORD のように、TEST_ 接頭辞を持つ環境変数として提供されることが想定されます。

8.6.1.2.2. 複数のマッピング

複数のデータソースマッピングを指定できます。

注記

複数のデータソースマッピングは常にコンマで区切ります。

DB_SERVICE_PREFIX_MAPPING 環境変数の値として cloud-postgresql=CLOUD,test-mysql=TEST_MYSQL を考慮します。

これは以下の 2 つのデータソースを作成します。

  1. java:jboss/datasources/test_mysql
  2. java:jboss/datasources/cloud_postgresql

TEST_MYSQL 接頭辞は、TEST_MYSQL_USERNAME のように MySQL データソースのユーザー名やパスワードなどの設定に使用できます。PostgreSQL データソースの場合は、CLOUD_USERNAME のように CLOUD_ 接頭辞を使用します。

8.7. クラスタリング

8.7.1. JGroups 検索メカニズムの設定

OpenShift で JBoss EAP クラスターリングを有効にするには、JBoss EAP 設定の JGroups プロトコルスタックを設定し、kubernetes.KUBE_PING または dns.DNS_PING 検索メカニズムのいずれかを使用するようにします。

カスタムの standalone-openshift.xml 設定ファイルを使用することもできますが、環境変数を使用 してイメージビルドで JGroups を設定することが推奨されます。

以下の手順は、環境変数を使用して JBoss EAP for OpenShift イメージの検出メカニズムを設定します。

重要

利用可能なアプリケーションテンプレートの 1 つを使用して、JBoss EAP for OpenShift イメージの上にアプリケーションをデプロイする場合、デフォルトの検索メカニズムは dns.DNS_PING になります。

dns.DNS_PING および kubernetes.KUBE_PING 検索メカニズムは互換性がありません。検索に dns.DNS_PING メカニズムを使用する 1 つの独立した子クラスターと、kubernetes.KUBE_PING メカニズムを使用するもう 1 つの独立した子クラスターを使用して、スーパークラスターを設定することは不可能です。同様に、ローリングアップグレードを実行する場合は、ソースクラスターとターゲットクラスターの両方で同じ検索メカニズムを使用する必要があります。

8.7.1.1. KUBE_PING の設定

KUBE_PING JGroups 検索メカニズムを使用するには、以下を行います。

  1. KUBE_PING を検索メカニズムとして使用するよう JGroups プロトコルスタックを設定する必要があります。

    これには、JGROUPS_PING_PROTOCOL 環境変数を kubernetes.KUBE_PING に設定します。

    JGROUPS_PING_PROTOCOL=kubernetes.KUBE_PING
    Copy to Clipboard Toggle word wrap
  2. KUBERNETES_NAMESPACE 環境変数を OpenShift プロジェクト名に設定する必要があります。設定がないと、サーバーは単一ノードのクラスター (1 つのクラスター) として動作します。以下に例を示します。

    KUBERNETES_NAMESPACE=PROJECT_NAME
    Copy to Clipboard Toggle word wrap
  3. KUBERNETES_LABELS 環境変数を設定する必要があります。これは サービスレベルで設定したラベル と一致する必要があります。設定がないと、アプリケーション外部の Pod (namespace にあっても) は参加を試みます。以下に例を示します。

    KUBERNETES_LABELS=application=APP_NAME
    Copy to Clipboard Toggle word wrap
  4. Pod が実行しているサービスアカウントを承認し、Kubernetes の REST API アカウントへのアクセスを許可する必要があります。これは OpenShift CLI を使用して行われます。以下は、現在のプロジェクトの名前空間で default サービスアカウントを使用した例になります。

    oc policy add-role-to-user view system:serviceaccount:$(oc project -q):default -n $(oc project -q)
    Copy to Clipboard Toggle word wrap

    プロジェクトの namespace で eap-service-account を使用した例は次のとおりです。

    oc policy add-role-to-user view system:serviceaccount:$(oc project -q):eap-service-account -n $(oc project -q)
    Copy to Clipboard Toggle word wrap
    注記

    サービスアカウントへのポリシーの追加に関する詳細は、アプリケーションのデプロイメントに向けた OpenShift の準備 を参照してください。

8.7.1.2. DNS_PING の設定

DNS_PING JGroups 検索メカニズムを使用するには、以下を行います。

  1. DNS_PING を検索メカニズムとして使用するよう JGroups プロトコルスタックを設定する必要があります。

    これには、JGROUPS_PING_PROTOCOL 環境変数を dns.DNS_PING に設定します。

    JGROUPS_PING_PROTOCOL=dns.DNS_PING
    Copy to Clipboard Toggle word wrap
  2. OPENSHIFT_DNS_PING_SERVICE_NAME 環境変数を、クラスターの ping サービスの名前に設定する必要があります。

    OPENSHIFT_DNS_PING_SERVICE_NAME=PING_SERVICE_NAME
    Copy to Clipboard Toggle word wrap
  3. OPENSHIFT_DNS_PING_SERVICE_PORT 環境変数を、ping サービスが公開されるポート番号に設定する必要があります。DNS_PING プロトコルは SRV レコードからポートを識別しようとします。 識別できない場合はデフォルトの 8888 になります。

    OPENSHIFT_DNS_PING_SERVICE_PORT=PING_PORT
    Copy to Clipboard Toggle word wrap
  4. ping ポートを公開する ping サービスを定義する必要があります。このサービスはヘッドレスである必要があり (ClusterIP=None)、以下が必要になります。

    1. ポートに名前を付ける必要があります。
    2. このサービスは、service.alpha.kubernetes.io/tolerate-unready-endpoints および publishNotReadyAddresses プロパティー の両方で true に設定されたアノテーションを付ける必要があります。

      注記
      • service.alpha.kubernetes.io/tolerate-unready-endpoints プロパティーおよび publishNotReadyAddresses プロパティーの両方を使用して、ping サービスが古い OpenShift リリースとそれ以降の OpenShift リリースの両方で機能するようにします。
      • これらのアノテーションを省略すると、各ノードは起動時に独自のクラスターを形成します。各ノードは、起動後に他のノードが検出されないため、そのクラスターを起動後に他のノードのクラスターにマージします。
      kind: Service
      apiVersion: v1
      spec:
          publishNotReadyAddresses: true
          clusterIP: None
          ports:
          - name: ping
            port: 8888
          selector:
              deploymentConfig: eap-app
      metadata:
          name: eap-app-ping
          annotations:
              service.alpha.kubernetes.io/tolerate-unready-endpoints: "true"
              description: "The JGroups ping port for clustering."
      Copy to Clipboard Toggle word wrap
注記

DNS_PING はサービスアカウントへの変更が必要なく、デフォルトのパーミッションを使用して動作します。

8.7.2. クラスタートラフィックを暗号化するため JGroups を設定

OpenShift で JBoss EAP のクラスタートラフィックを暗号化するには、SYM_ENCRYPT または ASYM_ENCRYPT プロトコルのいずれかを使用するよう、JBoss EAP 設定の JGroups プロトコルスタックを設定する必要があります。

カスタムの standalone-openshift.xml 設定ファイルを使用することもできますが、環境変数を使用 してイメージビルドで JGroups を設定することが推奨されます。

以下の手順は、環境変数を使用して、JBoss EAP for OpenShift イメージのクラスタートラフィックの暗号化にプロトコルを設定します。

重要

SYM_ENCRYPT および ASYM_ENCRYPT プロトコルは互換性がありません。クラスタートラフィックの暗号化に SYM_ENCRYPT を使用する 1 つの独立した子クラスターと、ASYM_ENCRYPT プロトコルを使用する別の独立した子クラスターの 2 つを使用してスーパークラスターを設定するのは不可能です。同様に、ローリングアップグレードを実行する場合は、ソースおよびターゲットクラスターの両方で同じプロトコルを使用する必要があります。

8.7.2.1. SYM_ENCRYPT の設定

SYM_ENCRYPT プロトコルを使用して JGroups クラスタートラフィックを暗号化するには、以下を行います。

  1. SYM_ENCRYPT を暗号化プロトコルをして使用するよう、JGroups プロトコルスタックを設定する必要があります。

    これには、JGROUPS_ENCRYPT_PROTOCOL 環境変数を SYM_ENCRYPT に設定します。

    JGROUPS_ENCRYPT_PROTOCOL=SYM_ENCRYPT
    Copy to Clipboard Toggle word wrap
  2. JGROUPS_ENCRYPT_SECRET 環境変数を、JGroups の通信をセキュアにするために使用される JGroups キーストアファイルが含まれるシークレットの名前に設定する必要があります。設定しないと、クラスター通信は暗号化されず、警告が発生します。以下に例を示します。

    JGROUPS_ENCRYPT_SECRET=eap7-app-secret
    Copy to Clipboard Toggle word wrap
  3. JGROUPS_ENCRYPT_KEYSTORE_DIR 環境変数を、JGROUPS_ENCRYPT_SECRET 変数を介して指定されるシークレット内にあるキーストアファイルのディレクトリーパスに設定する必要があります。設定しないと、クラスター通信は暗号化されず、警告が発生します。以下に例を示します。

    JGROUPS_ENCRYPT_KEYSTORE_DIR=/etc/jgroups-encrypt-secret-volume
    Copy to Clipboard Toggle word wrap
  4. JGROUPS_ENCRYPT_KEYSTORE 環境変数を、JGROUPS_ENCRYPT_SECRET 変数を介して指定されるシークレット内にあるキーストアファイルの名前に設定する必要があります。設定しないと、クラスター通信は暗号化されず、警告が発生します。以下に例を示します。

    JGROUPS_ENCRYPT_KEYSTORE=jgroups.jceks
    Copy to Clipboard Toggle word wrap
  5. JGROUPS_ENCRYPT_NAME 環境変数を、サーバーの証明書に関連する名前に設定する必要があります。設定しないと、クラスター通信は暗号化されず、警告が発生します。以下に例を示します。

    JGROUPS_ENCRYPT_NAME=jgroups
    Copy to Clipboard Toggle word wrap
  6. JGROUPS_ENCRYPT_PASSWORD 環境変数を、キーストアおよび証明書にアクセスするために使用されるパスワードに設定する必要があります。設定しないと、クラスター通信は暗号化されず、警告が発生します。以下に例を示します。

    JGROUPS_ENCRYPT_PASSWORD=mypassword
    Copy to Clipboard Toggle word wrap
8.7.2.2. ASYM_ENCRYPT の設定
注記

JBoss EAP 7.4 には ASYM_ENCRYPT プロトコルの新しいバージョンが含まれています。以前のバージョンのプロトコルは非推奨になりました。JGROUPS_CLUSTER_PASSWORD 環境変数を指定する場合は、プロトコルの非推奨バージョンが使用され、警告が Pod ログに出力されます。

ASYM_ENCRYPT プロトコルを使用して JGroups クラスタートラフィックを暗号化するには、ASYM_ENCRYPT を暗号化プロトコルとして指定します。また、elytron サブシステムに設定されたキーストアを使用するよう設定します。

-e JGROUPS_ENCRYPT_PROTOCOL="ASYM_ENCRYPT" \
-e JGROUPS_ENCRYPT_SECRET="encrypt_secret" \
-e JGROUPS_ENCRYPT_NAME="encrypt_name" \
-e JGROUPS_ENCRYPT_PASSWORD="encrypt_password" \
-e JGROUPS_ENCRYPT_KEYSTORE="encrypt_keystore" \
-e JGROUPS_CLUSTER_PASSWORD="cluster_password"
Copy to Clipboard Toggle word wrap

8.7.3. Pod のスケールアップに関する考慮事項

JGroups の検出メカニズムに基づいて、開始ノードは既存のクラスターコーディネーターノードを検索します。指定されたタイムアウト内にコーディネーターノードが見つからない場合、開始ノードは自分が最初のメンバーであると見なし、コーディネーターステータスを取得します。

複数のノードが同時に開始すると、すべてのノードが最初のメンバーであると仮定し、複数のパーティションを持つ分割クラスターが作成されます。たとえば、DeploymentConfig API を使用して Pod を 0 から 2 にスケールアップすると、分割クラスターが作成される場合があります。この状況を回避するには、最初の Pod を開始してから、必要な数の Pod にスケールアップする必要があります。

注記

デフォルトでは、EAP Operator は StatefulSet API を使用します。これは Pod を順番に (つまり 1 つずつ) 開始し、分割クラスターの作成を防ぎます。

8.8. ヘルスチェック

JBoss EAP for OpenShift イメージは、デフォルトで OpenShift に含まれる liveness および readiness プローブ を使用します。また、このイメージには設定ガイドで説明されているように Eclipse MicroProfile Health が含まれます。

以下の表には、これらのヘルスチェックに合格するために必要な値が記載されています。以下の値以外の場合は、ヘルスチェックに合格せず、イメージの再起動ポリシーにしたがってイメージが再起動されます。

Expand
表8.5 Liveness および Readiness チェック
実行されたテストLivenessReadiness

Server Status

すべての状態

Running

Boot Errors

None

None

デプロイメントの状態 [a]

N/A または failed エントリーなし

N/A または failed エントリーなし

Eclipse MicroProfile Health [b]

N/A または UP

N/A または UP

[a] Deployment Status デプロイメントが存在しない場合、有効な状態は N/A のみ。
[b] microprofile-health-smallrye サブシステムが無効な場合、有効な状態は N/A のみ。

8.9. Messaging

8.9.1. 外部 Red Hat AMQ ブローカーの設定

環境変数で JBoss EAP for OpenShift イメージを設定し、外部 Red Hat AMQ ブローカーに接続できます。

OpenShift アプリケーション定義の例

以下の例はテンプレートを使用して、外部 Red Hat AMQ 7 ブローカーに接続する JBoss EAP アプリケーションを作成します。

例: JDK 8

oc new-app eap74-amq-s2i \
-p EAP_IMAGE_NAME=jboss-eap74-openjdk8-openshift:7.4.0 \
-p EAP_RUNTIME_IMAGE_NAME=jboss-eap74-openjdk8-runtime-openshift:7.4.0 \
-p APPLICATION_NAME=eap74-mq \
-p MQ_USERNAME=MY_USERNAME \
-p MQ_PASSWORD=MY_PASSWORD
Copy to Clipboard Toggle word wrap

重要

例で使用されるテンプレートは、必要なパラメーターに有効なデフォルト値を提供します。テンプレートを使用せず、独自のパラメーターを提供する場合は、MQ_SERVICE_PREFIX_MAPPING の名前が-amq7=MQ が追加された APPLICATION_NAME の名前と一致する必要があることに注意してください。

8.10. セキュリティードメイン

新しいセキュリティードメインを設定するには、ユーザーは SECDOMAIN_NAME 環境変数を定義する必要があります。

これにより、環境変数の名前が付けられたセキュリティードメインが作成されます。ドメインをカスタマイズするには、以下の環境変数も定義します。

Expand
表8.6 セキュリティードメイン
変数名説明

SECDOMAIN_NAME

追加のセキュリティードメインを定義します。

値の例: myDomain

SECDOMAIN_PASSWORD_STACKING

定義した場合、password-stacking モジュールオプションが有効になり、値 useFirstPass に設定されます。

値の例: true

SECDOMAIN_LOGIN_MODULE

使用されるログインモジュール。

デフォルトは UsersRoles です。

SECDOMAIN_USERS_PROPERTIES

ユーザー定義が含まれるプロパティーファイルの名前。

デフォルトは users.properties です。

SECDOMAIN_ROLES_PROPERTIES

ロール定義が含まれるプロパティーファイルの名前。

デフォルトは roles.properties です。

8.11. HTTPS 環境変数

Expand
変数名説明

HTTPS_NAME

HTTPS_PASSWORD および HTTPS_KEYSTORE と定義された場合、HTTPS を有効にし、SSL 名を設定します。

keytool -genkey コマンドで作成した場合は、キーストアのエイリアス名として指定された値である必要があります。

値の例: example.com

HTTPS_PASSWORD

HTTPS_NAME および HTTPS_KEYSTORE と定義された場合、HTTPS を有効にし、SSL キーパスワードを設定します。

値の例: passw0rd

HTTPS_KEYSTORE

HTTPS_PASSWORD および HTTPS_NAME と定義された場合、HTTPS を有効にし、SSL 証明書キーファイルを EAP_HOME/standalone/configuration 以下の相対パスに設定します。

値の例: ssl.key

8.12. 管理環境変数

Expand
表8.7 管理環境変数
変数名説明

ADMIN_USERNAME

この変数と ADMIN_PASSWORD の両方が定義された場合、JBoss EAP の管理ユーザー名に使用されます。

値の例: eapadmin

ADMIN_PASSWORD

指定された ADMIN_USERNAME のパスワード。

値の例: passw0rd

8.13. S2I

イメージには S2I スクリプトと Maven が含まれます。

現在 Maven は、OpenShift 上の JBoss EAP ベースのコンテナー (または関連/ 子孫イメージ) にデプロイされるはずのアプリケーションのビルドツールとしてのみサポートされます。

現在、WAR デプロイメントのみがサポートされます。

8.13.1. カスタム設定

イメージのカスタム設定ファイルを追加することが可能です。configuration/ ディレクトリーに置かれたすべてのファイルは EAP_HOME/standalone/configuration/ にコピーされます。たとえば、イメージで使用されるデフォルトの設定をオーバーライドするには、カスタムの standalone-openshift.xmlconfiguration/ ディレクトリーに追加します。このようなデプロイメントの 例を参照 してください。

8.13.1.1. カスタムモジュール

カスタムモジュールを追加することが可能です。modules/ ディレクトリーからのすべてのファイルは EAP_HOME/modules/ にコピーされます。このようなデプロイメントの 例を参照 してください。

8.13.2. デプロイメントアーティファクト

デフォルトでは、ソースの target ディレクトリーからのアーティファクトがデプロイされます。異なるディレクトリーからデプロイするには、BuildConfig 定義の ARTIFACT_DIR 環境変数を設定します。ARTIFACT_DIR はコンマ区切りのリストです。例: ARTIFACT_DIR=app1/target,app2/target,app3/target

8.13.3. アーティファクトリーポジトリーミラー

Maven のリポジトリーは、すべてのプロジェクト JAR、ライブラリー JAR、プラグイン、またはその他のプロジェクト固有のアーティファクトなど、さまざまな種類のビルドアーティファクトおよび依存関係を保持します。また、S2I ビルドの実行中にアーティファクトのダウンロード元となる場所も指定します。組織では、中央リポジトリーを使用する他に、ローカルカスタムミラーリポジトリーをデプロイすることが一般的です。

ミラーを使用する利点は次のとおりです。

  • 地理的に近く、高速な同期ミラーを使用できる。
  • リポジトリーの内容をより良く制御できる。
  • パブリックサーバーおよびリポジトリーに依存することなく、異なるチーム (開発者、CI) 全体でアーティファクトを共有できる。
  • ビルド時間が改善されました。

多くの場合で、リポジトリーマネージャーはミラーへのローカルキャッシュとして機能できます。リポジトリーマネージャーがすでにデプロイされ、https://10.0.0.1:8443/repository/internal/ で外部アクセス可能な場合、以下のように MAVEN_MIRROR_URL 環境変数をアプリケーションのビルド設定に提供すると S2I ビルドはこのマネージャーを使用することができます。

  1. MAVEN_MIRROR_URL 変数を適用するビルド設定の名前を特定します。

    oc get bc -o name
    buildconfig/eap
    Copy to Clipboard Toggle word wrap
  2. eap のビルド設定を MAVEN_MIRROR_URL 環境変数で更新します。

    oc env bc/eap MAVEN_MIRROR_URL="https://10.0.0.1:8443/repository/internal/"
    buildconfig "eap" updated
    Copy to Clipboard Toggle word wrap
  3. 設定を確認します。

    oc env bc/eap --list
    # buildconfigs eap
    MAVEN_MIRROR_URL=https://10.0.0.1:8443/repository/internal/
    Copy to Clipboard Toggle word wrap
  4. アプリケーションの新しいビルドをスケジュールします。
注記

アプリケーションのビルド中、Maven 依存関係はデフォルトのパブリックリポジトリーではなく、リポジトリーマネージャーからプルされることを確認できます。またビルドの完了後、ビルド中に取得および使用されたすべての依存関係がミラーに追加されたことが確認できます。

8.13.3.1. セキュアなアーティファクトリーポジトリーミラー URL

Maven リポジトリーを使った "man-in-the-middle" 攻撃を回避するために、JBoss EAP ではアーティファクトリーポジトリーのミラー URL にセキュアな URL を使用する必要があります。

URL は、安全な http ("https") とセキュアなポートを指定する必要があります。

デフォルトでは、セキュアでない URL を指定すると、エラーが返されます。この動作は、-Dinsecure.repositories=WARN プロパティーを使用して上書きできます。

8.13.4. スクリプト

run
このスクリプトは、standalone-openshift.xml 設定で JBoss EAP を設定および開始する openshift-launch.sh スクリプトを使用します。
assemble
このスクリプトは Maven を使用してソースをビルドして、パッケージ (WAR) を作成し、それを EAP_HOME/standalone/deployments ディレクトリーに移動します。

8.13.5. カスタムスクリプト

JBoss EAP を起動する前に、Pod の起動時に実行するカスタムスクリプトを追加できます。

Pod を起動する際に実行するのに有効なスクリプトを追加できます。これには CLI スクリプトが含まれます。

JBoss EAP をイメージから起動するときにスクリプトを含めるには、以下の 2 つのオプションを利用できます。

  • postconfigure.sh として実行される configmap をマウントします。
  • 指定したインストールディレクトリーに install.sh スクリプトを追加します。
8.13.5.1. カスタムスクリプトを実行するための configmap のマウント

ランタイム時にカスタムスクリプトを既存のイメージ (つまり、すでにビルドされたイメージ) にマウントする際に configmap をマウントします。

configmap をマウントするには、以下を実行します。

  1. postconfigure.sh に追加する内容で configmap を作成します。

    たとえば、プロジェクトの root ディレクトリーに extensions というディレクトリーを作成して、スクリプト postconfigure.shextensions.cli を含め、次のコマンドを実行します。

    $ oc create configmap jboss-cli --from-file=postconfigure.sh=extensions/postconfigure.sh --from-file=extensions.cli=extensions/extensions.cli
    Copy to Clipboard Toggle word wrap
  2. configmap をデプロイメントコントローラー (dc) 経由で Pod にマウントします。

    $ oc set volume dc/eap-app --add --name=jboss-cli -m /opt/eap/extensions -t configmap --configmap-name=jboss-cli --default-mode='0755' --overwrite
    Copy to Clipboard Toggle word wrap

postconfigure.sh の例

#!/usr/bin/env bash
set -x
echo "Executing postconfigure.sh"
$JBOSS_HOME/bin/jboss-cli.sh --file=$JBOSS_HOME/extensions/extensions.cli
Copy to Clipboard Toggle word wrap

extensions.cli の例

embed-server --std-out=echo  --server-config=standalone-openshift.xml
:whoami
quit
Copy to Clipboard Toggle word wrap

8.13.5.2. install.sh を使用したカスタムスクリプトの実行

ビルド時にイメージの一部としてスクリプトを含める場合は、install.sh を使用しします。

install.sh を使用してカスタムスクリプトを実行するには、以下を実行します。

  1. s2i ビルド中に使用されるプロジェクトの git リポジトリーで、.s2i というディレクトリーを作成します。
  2. s2i ディレクトリー内に、以下の内容を含む環境ファイルを追加します。

    $ cat .s2i/environment
    CUSTOM_INSTALL_DIRECTORIES=extensions
    Copy to Clipboard Toggle word wrap
  3. extensions というディレクトリーを作成します。
  4. extensions ディレクトリーで、以下のように内容で postconfigure.sh ファイルを作成します (プレースホルダーコードを環境に適したコードに置き換えます)。

    $ cat extensions/postconfigure.sh
    #!/usr/bin/env bash
    echo "Executing patch.cli"
    $JBOSS_HOME/bin/jboss-cli.sh --file=$JBOSS_HOME/extensions/some-cli-example.cli
    Copy to Clipboard Toggle word wrap
  5. extensions ディレクトリーで、以下のような内容の install.sh というファイルを作成します (プレースホルダーコードを環境に適したコードに置き換えます)。

    $ cat extensions/install.sh
    #!/usr/bin/env bash
    set -x
    echo "Running $PWD/install.sh"
    injected_dir=$1
    # copy any needed files into the target build.
    cp -rf ${injected_dir} $JBOSS_HOME/extensions
    Copy to Clipboard Toggle word wrap

8.13.6. 環境変数

s2i build コマンドに指定する環境変数によって、ビルドの実行方法が異なります。指定できる環境変数は次のとおりです。

Expand
表8.8 S2I 環境変数
変数名説明

ARTIFACT_DIR

このディレクトリーからの .war.ear、および .jar ファイルが deployments/ ディレクトリーにコピーされます。

値の例: target

ENABLE_GENERATE_DEFAULT_DATASOURCE

(オプション)値が true の場合、サーバーはデフォルトデータソースでプロビジョニングされます。それ以外の場合は、デフォルトのデータソースは含まれません。

GALLEON_PROVISION_DEFAULT_FAT_SERVER

(オプション)true の値とともに含まれている場合、galleon レイヤーが設定されていなければ、デフォルトの JBoss EAP サーバーはプロビジョニングされます。

GALLEON_PROVISION_LAYERS

(オプション)S2I プロセスに対し、指定されたレイヤーをプロビジョニングするよう指示します。この値は、プロビジョニングするレイヤーのコンマ区切りの一覧です。これには、ベースレイヤーと任意の数のデコレーターレイヤーが含まれます。

値の例: jaxrs, sso

HTTP_PROXY_HOST

Maven が使用する HTTP プロキシーのホスト名または IP アドレス。

値の例: 192.168.1.1

HTTP_PROXY_PORT

Maven が使用する HTTP プロキシーの TCP ポート。

値の例: 8080

HTTP_PROXY_USERNAME

HTTP_PROXY_PASSWORD と指定された場合、HTTP プロキシーのクレデンシャルを使用します。

値の例: myusername

HTTP_PROXY_PASSWORD

HTTP_PROXY_USERNAME と指定された場合、HTTP プロキシーのクレデンシャルを使用します。

値の例: mypassword

HTTP_PROXY_NONPROXYHOSTS

指定された場合、設定された HTTP プロキシーはこれらのホストを無視します。

値の例: some.example.org|*.example.net

MAVEN_ARGS

ビルド中に Maven に指定された引数をオーバーライドします。

値の例: -e -Popenshift -DskipTests -Dcom.redhat.xpaas.repo.redhatga package

MAVEN_ARGS_APPEND

ビルド中に Maven に指定されたユーザー引数を追加します。

値の例: -Dfoo=bar

MAVEN_MIRROR_URL

設定する Maven ミラー/ リポジトリーマネージャーの URL。

値の例: https://10.0.0.1:8443/repository/internal/

指定した URL はセキュアである必要があることに注意してください。詳細は 「セキュアなアーティファクトリーポジトリーミラー URL」 を参照してください。

MAVEN_CLEAR_REPO

任意で、ビルド後にローカル Maven リポジトリーを消去します。

イメージに存在するサーバーがローカルキャッシュと強く結合されている場合には、キャッシュが削除されず、警告が表示されます。

値の例: true

APP_DATADIR

定義された場合、データファイルのコピー元であるソースのディレクトリー。

値の例: mydata

DATA_DIR

$APP_DATADIR からのデータがコピーされるイメージのディレクトリー。

値の例: EAP_HOME/data

注記

詳細は、JBoss EAP for OpenShift イメージに含まれる Maven および S2I スクリプトを使用する、JBoss EAP for OpenShift イメージでの Java アプリケーションのビルドおよび実行 を参照してください。

8.14. シングルサインオンイメージ

このイメージには、Red Hat シングルサインオン対応アプリケーションが含まれます。

JBoss EAP for OpenShift イメージを使用して Red Hat Single Sign-On for OpenShift イメージをデプロイする方法の詳細は、Red Hat Single Sign-On for OpenShiftガイドの Deploy the Red Hat Single Sign-On-enabled JBoss EAP Image を参照してください。

Expand
表8.9 シングルサインオンの環境変数
変数名説明

SSO_URL

シングルサインオンサーバーの URL。

SSO_REALM

デプロイされたアプリケーションのシングルサインオンレルム。

SSO_PUBLIC_KEY

Single Sign-On レルムの公開鍵。これは任意のフィールドですが、省略するとアプリケーションが中間者攻撃に脆弱になります。

SSO_USERNAME

シングルサインオン REST API にアクセスするのに必要なシングルサインオンユーザー。

値の例: mySsoUser

SSO_PASSWORD

SSO_USERNAME 変数によって定義されたシングルサインオンのユーザーのパスワード。

値の例: 6fedmL3P

SSO_SAML_KEYSTORE

SAML のキーストアの場所。デフォルトは /etc/sso-saml-secret-volume/keystore.jks です。

SSO_SAML_KEYSTORE_PASSWORD

SAML のキーストアパスワード。デフォルトは mykeystorepass です。

SSO_SAML_CERTIFICATE_NAME

SAML に使用するキーと証明書のエイリアス。デフォルトは jboss です。

SSO_BEARER_ONLY

シングルサインオンクライアントアクセスタイプ。(オプション)

値の例: true

SSO_CLIENT

シングルサインオンのパスは、再度アプリケーションにリダイレクトします。デフォルトは module-name と一致します。

SSO_ENABLE_CORS

true の場合、Single Sign-On アプリケーションの Cross-Origin Resource Sharing (CORS) を有効にします。(オプション)

SSO_SECRET

機密アクセスのためのシングルサインオンクライアントシークレット。

値の例: KZ1QyIq4

SSO_DISABLE_SSL_CERTIFICATE_VALIDATION

true の場合、JBoss EAP と Red Hat Single Sign-On サーバー間の SSL/TLS 通信はセキュリティーで保護されません。たとえば、証明書の検証は curl で無効になります。デフォルトでは設定されません。

値の例: true

Expand
表8.10 シークレット
変数名説明

SSO_SAML_KEYSTORE_SECRET

SAML キーストアへのアクセスに使用するシークレット。デフォルト値は sso-app-secret です。

HTTPS_SECRET

キーストアファイルを含むシークレット名

値の例: eap-ssl-secret

SSO_TRUSTSTORE_SECRET

トラストストアファイルが含まれるシークレットの名前。sso-truststore-volume ボリュームに使用されます。

値の例: sso-app-secret

8.15. サポートされないトランザクションリカバリーのシナリオ

  • JTS トランザクションは OpenShift ではサポートされていません。
  • XTS トランザクションは OpenShift ではサポートされていません。
  • 一部のサードパーティーがトランザクションの完了とクラッシュリカバリーフローに使用する XATerminator インターフェイスは、OpenShift ではサポートされていません。
  • OpenShift 3 では、JBoss Remoting 上で伝搬されるトランザクションはサポートされません。
注記

JBoss Remoting 上で伝搬されるトランザクションは OpenShift 4 と EAP のオペレーターでサポートされます。

8.16. 含まれる JBoss モジュール

以下の表は、JBoss EAP for OpenShift イメージに含まれる JBoss モジュールを表しています。

Expand
表8.11 含まれる JBoss モジュール
JBoss モジュール

org.jboss.as.clustering.common

org.jboss.as.clustering.jgroups

org.jboss.as.ee

org.jgroups

org.openshift.ping

net.oauth.core

8.17. EAP Operator: API 情報

EAP オペレーターにより、以下の API が導入されます。

8.17.1. WildFlyServer

WildFlyServer はカスタム JBoss EAP リソースを定義します。

Expand
表8.12 WildFlyServer
フィールド説明Scheme必須

metadata

標準オブジェクトのメタデータ

ObjectMeta v1 meta

false

spec

JBoss EAP デプロイメントの適切な動作の 仕様

WildFlyServerSpec

true

status

JBoss EAP デプロイメントの最近確認された ステータス 。read-only

WildFlyServerStatus

false

8.17.2. WildFlyServerList

WildFlyServerList は JBoss EAP デプロイメントのリストを定義します。

Expand
表8.13 Table
フィールド説明Scheme必須

metadata

標準リストのメタデータ

metav1.ListMeta

false

items

WildFlyServer のリスト

WildFlyServer

true

8.17.3. WildFlyServerSpec

WildFlyServerSpec は、JBoss EAP リソースの適切な動作の仕様です。

/opt/jboss/wildfly/standalone/data のストレージによって指定されたボリュームをマウントする Pod 仕様で StatefulSet を使用します。

Expand
表8.14 WildFlyServerSpec
フィールド説明Scheme必須

applicationImage

デプロイされるアプリケーションイメージの名前

string

false

replicas

アプリケーションに必要なレプリカ数

int32]

true

standaloneConfigMap

ConfigMap からスタンドアロン設定を読み込む方法を指定する仕様。

StandaloneConfigMapSpec

false

resources

ステートフルセットの要求または制限を指定するための Resources 仕様。省略した場合、namespace のデフォルトが使用されます。

Resources

false

SecurityContext

SecurityContext 仕様は、ステートフルセットによって作成された Pod コンテナーの権限とアクセス制御設定を定義します。省略した場合は、デフォルトの権限が使用されます。詳細は、securityContext を参照してください。

*corev1.SecurityContext

false

storage

ストレージの使用方法を指定するストレージ仕様。省略すると、EmptyDir が使用されます (これは Pod の再起動時にデータの永続化されません)。

StorageSpec

false

serviceAccountName

JBoss EAP Pod の実行に使用する ServiceAccount の名前

string

false

envFrom

configMap または secret のコンテナーに存在する環境変数の一覧

corev1.EnvFromSource

false

env

コンテナーに存在する環境変数の一覧

corev1.EnvVar

false

secrets

コンテナーでボリュームとしてマウントされる secret 名の一覧。各 secret は /etc/secrets/<secret name> で読み取り専用ボリュームとしてマウントされます。

string

false

configMaps

コンテナーでボリュームとしてマウントされる ConfigMap 名の一覧。各 ConfigMap は、/etc/configmaps/<config map name> の下に読み取り専用ボリュームとしてマウントされます。

string

false

disableHTTPRoute

アプリケーションサービスの HTTP ポートへのルートの作成を無効にします (省略されている場合は false)。

boolean

false

sessionAffinity

同じクライアント IP からの接続が、毎回同じ JBoss EAP インスタンス/Pod に渡される場合 (省略されている場合は false)

boolean

false

8.17.4. リソース

Resources は、WildflyServer リソース用に設定されたリソースを定義します。Resources フィールドが定義されていないか、Request または Limits が空の場合、このリソースは StatefulSet から削除されます。このリソースの説明は、標準の Container リソースであり、corev1.ResourceRequirements のスキームを使用します。

8.17.5. StorageSpec

StorageSpec は、 WildFlyServer リソースに設定されたストレージを定義します。EmptyDirvolumeClaimTemplate も定義されていない場合は、デフォルトの EmptyDir が使用されます。

EAP Operator は、この StorageSpec からの情報を使用して StatefulSet を設定し、JBoss EAP が独自のデータを永続化するために使用するスタンドアロン/データディレクトリー専用のボリュームをマウントします。たとえば、トランザクションログが考えられます。EmptyDir が使用されると、データは Pod の再起動後も維持されません。JBoss EAP にデプロイされたアプリケーションがトランザクションに依存している場合は、Pod の再起動時に同じ永続ボリュームを再利用できるように volumeClaimTemplate を指定します。

Expand
表8.15 Table
フィールド説明Scheme必須

emptyDir

JBoss EAP StatefulSet によって使用される EmptyDirVolumeSource

corev1.EmptyDirVolumeSource

false

volumeClaimTemplate

JBoss EAP スタンドアロンデータディレクトリーを格納するため Resources 要件を設定するための PersistentVolumeClaim 仕様。テンプレートの名前は、WildFlyServer 名から派生しています。対応するボリュームは ReadWriteOnce アクセスモードでマウントされます。

corev1.PersistentVolumeClaim

false

8.17.6. StandaloneConfigMapSpec

StandaloneConfigMapSpec は、JBoss EAP スタンドアロン設定を ConfigMap から読み取る方法を定義します。省略すると、JBoss EAP はそのイメージから standalone.xml 設定を使用します。

Expand
表8.16 StandaloneConfigMapSpec
フィールド説明Scheme必須

name

スタンドアロン設定の XML ファイルを含む ConfigMap の名前。

string

true

key

値がスタンドアロン設定の XML ファイルの ConfigMap のキー。省略すると、仕様は standalone.xml キーを見つけます。

string

false

8.17.7. WildFlyServerStatus

WildFlyServerStatus は、JBoss EAP デプロイメントの最新の確認ステータスです。read-only

Expand
表8.17 WildFlyServerStatus
フィールド説明Scheme必須

replicas

アプリケーションの実際のレプリカ数

int32

true

selector

HorizontalPodAutoscaler によって使用される Pod のセレクター

string

true

hosts

アプリケーション HTTP サービスへルーティングするホスト

string

true

pods

Pod のステータス

PodStatus

true

scalingdownPods

スケールダウンのクリーニングプロセス下の Pod 数

int32

true

8.17.8. PodStatus

PodStatus は、JBoss EAP アプリケーションを実行する Pod の最新ステータスです。

Expand
表8.18 PodStatus
フィールド説明Scheme必須

name

Pod の名前

string

true

podIP

Pod に割り当てられる IP アドレス

string

true

state

スケールダウンプロセスの Pod の状態。この状態はデフォルトでは ACTIVE で、要求にサービスを提供することを意味します。

string

false





改訂日時: 2024-02-08

法律上の通知

Copyright © 2024 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.
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat