7.3. EAP Operator を使用した OpenShift での Java アプリケーションデプロイ
EAP オペレーターを使用することで、OpenShift での Java アプリケーションのデプロイメントを自動化できます。EAP オペレーター API の詳細は、EAP Operator: API Information を参照してください。
OpenShift での Java アプリケーションのデプロイには、以下のアプリケーションイメージタイプのいずれかを選択できます。
-
ビルダーイメージまたはランタイムイメージをベースとするアプリケーションイメージ。
eap-s2i-build
テンプレートを使用して、このようなイメージを準備できます。 -
ベースイメージレジストリー
registry.access.redhat.com/ubi8/openjdk-11
や をベースとする起動可能な JAR アプリケーションイメージ、またはより高い JDK バージョンを提供するその他の Red Hat ubi8。
EAP オペレーターを使用して OpenShift に Java アプリケーションをデプロイする場合は、いくつかの設定が必要になります。他の一部の設定は、アプリケーションの EAP オペレーター CustomResource(CR) が Secret
オブジェクトまたは ConfigMap
を参照する場合にのみ必要です。
その他のリソース
-
eap-s2i-build
テンプレートの詳細は、アプリケーションイメージを作成するための eap-s2i-build テンプレート を参照してください。 -
eap-s2i-build
テンプレートを使用してアプリケーションイメージを構築する方法は、eap-s2i-build
テンプレートを使用したアプリケーションイメージのビルド を参照してください。 - 起動可能な JAR アプリケーションイメージの使用に関する詳細は、Bootable JAR for packaging EAP server and Java application を参照してください。
- アプリケーションイメージを起動可能な JAR としてパッケージ化する方法は、JBoss EAP OpenShift プラットフォームでの起動可能な JAR の使用 を参照してください。
- Java アプリケーションの OpenShift へのデプロイ時に必須の設定を完了する方法は、Deploying a Java application using the EAP operator: Completing mandatory configurations を参照してください。
- Java アプリケーションの OpenShift へのデプロイ時に任意の設定を完了する方法は、Deploying a Java application using the EAP operator:Completing the optional configurations を参照してください。
7.3.1. アプリケーションイメージを作成するための 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.3、JBoss EAP XP、JBoss EAP CD などの JBoss EAP バージョンのイメージストリームを使用してアプリケーションイメージをビルドできます。
その他のリソース
-
eap-s2i-build
テンプレート を使用してアプリケーションイメージをビルドします。
7.3.2. eap-s2i-build テンプレートを使用したアプリケーションイメージのビルド
eap-s2i-build
テンプレートは複数のパラメーターを追加して、アプリケーションのビルドに使用するアプリケーションソースリポジトリーの場所と EAP S2I イメージを設定します。このテンプレートを使用すると、JBoss EAP 7.3、JBoss EAP XP、または JBoss EAP CD などのすべての JBoss EAP バージョンにイメージストリームを使用できます。
手順
- EAP イメージを OpenShift にインポートします。詳細は、JBoss EAP XP の最新の OpenShift イメージストリームおよびテンプレートのインポート を参照してください。
- アプリケーションイメージストリームの変更についての更新を受信し、新規ビルドをトリガーするようにイメージストリームを設定します。詳細は、イメージストリームタグの定期的なインポートの設定 を参照してください。
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
この
eap-s2i-build
テンプレートは 2 つのビルド設定と、中間ビルドアーティファクトと最終的なアプリケーションイメージに対応する 2 つのイメージストリームを作成します。最終的なアプリケーションイメージのリソースを作成するために、パラメーターとともに
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
- 1
- アプリケーションイメージストリームの名前。アプリケーションイメージは
latest
でタグ付けされます。 - 2
- EAP ビルダーイメージのイメージストリームタグ。
- 3
- EAP ランタイムイメージのイメージストリームタグ。
- 4
- Red Hat ミドルウェアイメージのイメージストリームがインストールされている名前空間。省略されている場合、
openshift
名前空間が使用されます。これは、openshift
以外の名前空間にイメージストリームをインストールしている場合にのみ変更します。 - 5
- アプリケーションの Git ソース URL。
- 6
- Git ブランチ/タグリファンレンス
- 7
- ビルドするアプリケーションが含まれる Git リポジトリー内のパス。
EAP オペレーターを使用して、デプロイメント用にアプリケーションイメージを準備します。
WildFlyServer
リソースを設定します。$ cat > my-app.yaml<<EOF apiVersion: wildfly.org/v1alpha1 kind: WildFlyServer metadata: name: my-app spec: applicationImage: 'my-app:latest' replicas: 1 EOF
設定を適用し、EAP オペレーターがこのアプリケーションイメージを参照する新しい
WildFlyServer
リソースを作成できるようにします。$ oc apply -f my-app.yaml
以下のコマンドを使用して、
WildFlyServer
リソースを表示します。$ oc get wfly my-app
関連情報
- アプリケーションイメージストリームのインポートに関する詳細は、JBoss EAP XP の最新の OpenShift イメージストリームおよびテンプレートのインポート を参照してください。
- イメージストリームの定期的なインポートについての詳細は、イメージストリームタグの定期的なインポートの設定 を参照してください。
7.3.3. JBoss EAP サーバーと Java アプリケーションをパッケージ化するための起動可能な JAR
JBoss EAP サーバーおよび Java アプリケーションを実行可能な JAR ファイルとしてパッケージ化できます (起動可能な JAR とも呼ばれます)。この起動可能な JAR を使用すると、サーバー、パッケージ化されたアプリケーション、サーバーの起動に必要なランタイムが含まれる起動可能な JAR アプリケーションイメージをビルドできます。このようにビルドされた起動可能な JAR アプリケーションイメージは、EAP オペレーターを使用して OpenShift にデプロイできます。
EAP オペレーターを使用して、起動可能な JAR イメージを OpenShift にデプロイするには、ベースイメージ registry.access.redhat.com/ubi8/openjdk-11
を使用するか、より高い JDK バージョンを提供するその他の Red Hat ubi8 を使用する必要があります。
起動可能な JAR は、クラウド環境に設定されたサーバー用に構築する必要があります。wildfly-jar-maven-plugin
設定で有効にすると、クラウド環境のサーバーを設定できます。
JBoss EAP OpenShift プラットフォームでの起動可能な JAR の使用 セクションの手順 1 から 6 を実施して、起動可能な JAR アプリケーションイメージをビルドします。これらの手順を完了すると、起動可能な JAR アプリケーションイメージは OpenShift でイメージストリームとして利用でき、EAP オペレーター設定で imagestreamtag を使用できます。
EAP オペレーターは、起動可能な JAR アプリケーションイメージを実行する Pod がスケールダウンすると、トランザクションをリカバリーしません。EAP オペレーターは、Pod のスケールダウン時にトランザクションを復元する可能性を記述するトレースをログに記録します。
その他のリソース
- 起動可能な JAR の詳細は、起動可能な JAR について を参照してください。
- クラウド環境のサーバーの設定に関する詳細は、OpenShift の起動可能な JAR の設定 を参照してください。
- OpenShift への起動可能な JAR アプリケーションイメージのデプロイに関する詳細は、EAP オペレーターを使用した Java アプリケーションの展開: 必須の設定 を参照してください。
7.3.4. EAP オペレーターを使用した Java アプリケーションのデプロイ: 必須の設定
EAP オペレーターを使用して OpenShift に Java アプリケーションをデプロイする場合、以下の設定は必須です。
要件
- EAP オペレーターがインストールされている。EAP オペレーターのインストールに関する詳細は、Installing EAP Operator Using the webconsole および CLI を使用した EAP Operator のインストール を参照してください。
eap-s2i-build
テンプレートを使用してアプリケーションイメージをビルドする場合:
- JBoss EAP for OpenShift Source-to-Image (S2I) ビルダーイメージを使用して、ユーザーアプリケーションの Docker イメージを構築している。
-
OpenShift へのデプロイ後にアプリケーションの自動アップグレードを有効にする場合には、
eap-s2i-build
テンプレートのAPPLICATION_IMAGE
パラメーターにイメージストリームがあります。eap-s2i-build
テンプレートを使用してアプリケーションイメージを構築する方法は、eap-s2i-build テンプレートを使用したアプリケーションイメージのビルド を参照してください。
起動可能な JAR アプリケーションイメージを使用する場合:
-
ベースイメージ
registry.access.redhat.com/ubi8/openjdk-11
や、より高い JDK バージョンを提供するその他の Red Hat ubi8 を使用して、起動可能な JAR アプリケーションイメージをビルドしている。 - クラウド環境用にサーバーを設定している。
手順
- Web ブラウザーを開き、OperatorHub にログインします。
- Java アプリケーションに使用する Project または名前空間を選択します。
- Installed Operator に移動し、JBoss EAP オペレーターを選択します。
- Overview タブで、Create Instance リンクをクリックします。
アプリケーションイメージの詳細を指定します。
アプリケーションイメージは、Java アプリケーションが含まれる Docker イメージを指定します。
applicationImage
フィールドがイメージストリームタグに対応している場合は、イメージへの変更により、アプリケーションの自動アップグレードがトリガーされます。JBoss EAP for OpenShift アプリケーションイメージの以下のリファレンスのいずれかを以下のような例で指定できます。
- イメージの名前: mycomp/myapp
- タグ: mycomp/myapp:1.0
- A digest: mycomp/myapp:@sha256:0af38bc38be93116b6a1d86a9c78bd14cd527121970899d719baf78e5dc7bfd2
- イメージストリームタグ: my-app:latest
- イメージハッシュ: quay.io/bootable-jar/myapp@sha256:47c06c96e80d0defb777686cdb468c636d9b3b7081a35b784330a050a403e15b
アプリケーションのサイズを指定します。例を以下に示します。
spec: replicas:2
オプション: アプリケーションのパッケージ化に起動可能な JAR を使用している場合は、以下の例のように表示されます。
spec: bootableJar: true
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
その他のリソース
- Java アプリケーションの OpenShift へのデプロイ時に任意の設定を完了する方法は、EAP オペレーターを使用した Java アプリケーションの展開: オプションの設定 を参照してください。
-
eap-s2i-build
テンプレートでアプリケーションイメージを構築する方法は、eap-s2i-build
テンプレートを使用したアプリケーションイメージのビルド を参照してください。 - アプリケーションイメージを起動可能な JAR としてパッケージ化する方法は、JBoss EAP OpenShift プラットフォームでの起動可能な JAR の使用 を参照してください。
- 環境変数の一覧は、環境変数 を参照してください。
7.3.5. EAP オペレーターを使用した Java アプリケーションのデプロイ: 任意の設定
アプリケーションの EAP オペレーター CustomResource (CR) が Secret
オブジェクトまたは ConfigMap
を参照する場合は、EAP オペレーターを使用してアプリケーションを OpenShift にデプロイする際に以下のオプションの設定を実行します。
JBoss EAP 7 では、ConfigMap
から standalone.xml
ファイルを指定できません。
要件
- EAP オペレーターがインストールされている。EAP オペレーターのインストールに関する詳細は、Installing EAP Operator Using the webconsole および CLI を使用した EAP Operator のインストール を参照してください。
- OpenShift での Java アプリケーションのデプロイに必須の設定を完了している。
-
アプリケーションの EAP オペレーター CR が参照する場合は、
Secret
オブジェクトを作成している。Secret
オブジェクト作成の詳細は Creating a Secret を参照してください。 -
アプリケーションの EAP オペレーター CR が参照する場合、
ConfigMap
を作成している。ConfigMap
作成の詳細は Creating a ConfigMap を参照してください。 -
オプション:
standalone.xml
ファイルからConfigMap
を作成している。standalone.xml
ファイルからのConfigMap
の作成の詳細は、Creating a ConfigMap from a standalone.xml Fileを参照してください。
手順
アプリケーションのデプロイメントに関連する以下のオプションの設定を行います。
- サーバーデータディレクトリーのストレージ要件を指定します。
WildFlyServerSpec
で作成したSecret
の名前を指定することで、アプリケーションを実行している Pod のボリュームとしてSecret
オブジェクトをマウントします。例を以下に示します。spec: secrets: - my-secret
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
注記Secret
オブジェクトを変更すると、プロジェクトの一貫性が失われることがあります。プロジェクトの不整合を回避するには、古いオブジェクトと同じコンテンツを持つ新しいSecret
オブジェクトを作成します。これで、必要に応じてコンテンツを更新し、EAP オペレーターカスタムリソース (CR) の参照を更新できます。これは新しい CR 更新とみなされ、pod はリロードされます。WildFlyServerSpec
で作成したConfigMap
の名前を指定し、アプリケーションを実行している Pod のボリュームとしてマウントします。以下に例を示します。spec: configMaps: - my-config
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
注記ConfigMap
を変更すると、プロジェクトの一貫性が失われることがあります。プロジェクトの一貫性を避けるために、古い内容と同じコンテンツを持つ新規ConfigMap
を作成します。これで、必要に応じてコンテンツを更新し、EAP オペレーターカスタムリソース (CR) の参照を更新できます。これは新しい CR 更新とみなされ、pod はリロードされます。独自のスタンドアロン
ConfigMap
を選択する場合は、ConfigMap
の名前とstandalone.xml
ファイルのキーを指定します。standaloneConfigMap: name: clusterbench-config-map key: standalone-openshift.xml
注記JBoss EAP 7 では、
standalone.xml
ファイルからConfigMap
を作成することはできません。OpenShift でデフォルトの HTTP ルートの作成を無効にする場合は、
disableHTTPRoute
をtrue
に設定します。spec: disableHTTPRoute: true
その他のリソース
- サーバーデータディレクトリーのストレージ要件の指定に関する詳細は、アプリケーションの永続ストレージの設定 を参照してください。
- Java アプリケーションの OpenShift へのデプロイ時に必須の設定を完了する方法は、EAP オペレーターを使用した OpenShift での Java アプリケーションのデプロイ を参照してください。
7.3.6. Secret の作成
アプリケーションの EAP オペレーター CustomResource (CR) が Secret
を参照する場合は、EAP オペレーターを使用してアプリケーションを OpenShift にデプロイする前に Secret
オブジェクトを作成する必要があります。
手順
-
Secret
を作成するには、以下を実行します。
$ oc create secret generic my-secret --from-literal=my-key=devuser --from-literal=my-password='my-very-secure-pasword'
7.3.7. ConfigMap の作成
アプリケーションの EAP operator 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
7.3.8. 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
7.3.9. アプリケーションの永続ストレージの設定
アプリケーションが一部のデータについて永続ストレージを必要とする場合 (pod の再起動後も維持する必要のあるトランザクションログやメッセージングログなど) は、ストレージ仕様を設定します。ストレージ仕様が空の場合は、EmptyDir
ボリュームはアプリケーションの各 pod によって使用されます。ただし、このボリュームは、対応する pod が停止した後は使用されなくなります。
手順
volumeClaimTemplate
を指定し、リソース要件を設定して、JBoss EAP スタンドアロンデータディレクトリーを保存します。テンプレートの名前は JBoss EAP の名前から派生します。対応するボリュームはReadWriteOnce
アクセスモードでマウントされます。spec: storage: volumeClaimTemplate: spec: resources: requests: storage: 3Gi
このストレージ要件を満たす永続ボリュームは、
/eap/standalone/data
ディレクトリーにマウントされます。