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 を参照する場合にのみ必要です。

その他のリソース

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 バージョンのイメージストリームを使用してアプリケーションイメージをビルドできます。

その他のリソース

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

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

    この 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
    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
    2. 設定を適用し、EAP オペレーターがこのアプリケーションイメージを参照する新しい WildFlyServer リソースを作成できるようにします。

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

      $ oc get wfly my-app

      関連情報

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 のスケールダウン時にトランザクションを復元する可能性を記述するトレースをログに記録します。

その他のリソース

7.3.4. EAP オペレーターを使用した Java アプリケーションのデプロイ: 必須の設定

EAP オペレーターを使用して OpenShift に Java アプリケーションをデプロイする場合、以下の設定は必須です。

要件

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 アプリケーションイメージをビルドしている。
  • クラウド環境用にサーバーを設定している。

手順

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

    アプリケーションイメージは、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
  6. アプリケーションのサイズを指定します。例を以下に示します。

    spec:
      replicas:2
    • オプション: アプリケーションのパッケージ化に起動可能な JAR を使用している場合は、以下の例のように表示されます。

      spec:
        bootableJar: true
  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

    その他のリソース

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を参照してください。

手順

  • アプリケーションのデプロイメントに関連する以下のオプションの設定を行います。

    1. サーバーデータディレクトリーのストレージ要件を指定します。
    2. 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 はリロードされます。

    3. 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 はリロードされます。

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

        standaloneConfigMap:
          name: clusterbench-config-map
          key: standalone-openshift.xml
      注記

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

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

      spec:
        disableHTTPRoute: true

その他のリソース

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 が停止した後は使用されなくなります。

手順

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

    spec:
      storage:
        volumeClaimTemplate:
          spec:
            resources:
              requests:
                storage: 3Gi

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