検索

第9章 Jboss EAP アプリケーションの OpenShift Container Platform へのデプロイ

download PDF

9.1. JBoss EAP Operator による OpenShift へのアプリケーションのデプロイの自動化

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

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

EAP Operator をインストールするには、OperatorHub を使用する必要があります。OperatorHub を使用すると、OpenShift クラスター管理者は Operator の検索、インストール、アップグレードを実行できます。

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

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

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

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

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

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

  • インストールモード: クラスター上のすべての名前空間 を選択し、すべての名前空間にオペレーターをインストールするか、可能であれば個別の名前空間を選択して、選択した名前空間にのみオペレーターをインストールします。
  • チャネルの更新: EAP Operator が複数のチャネルで利用可能な場合は、サブスクライブするチャネルを選択できます。たとえば、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 Operator を見つけます。
  3. JBoss EAP Operator を選択し、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 になった後に、Operators Installed Operators の順に選択します。そして、EAP ClusterServiceVersion (CSV) が表示され、関連する名前空間で InstallSucceededStatus が変わっていることを確認します。

    注記

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

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

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

CLI を使用して OperatorHub から EAP Operator をインストールする場合は、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
    ...
  2. Subscription オブジェクト YAML ファイル (例: eap-operator-sub.yaml) を作成し、namespace を EAP Operator にサブスクライブします。以下は、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
    1
    サブスクライブするオペレーターの名前。
    2
    EAP Operator は 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

    EAP Operator が正常にインストールされます。この時点で、OLM が EAP Operator を認識します。Operator の ClusterServiceVersion (CSV) がターゲット namespace に表示され、EAP Operator が提供する API を作成に使用できるようになります。

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

EAP Operator は、OpenShift への Java アプリケーションのデプロイを自動化するのに役立ちます。EAP Operator API の詳細は、EAP Operator: API 情報 を参照してください。

前提条件

  • EAP Operator がインストールされている。EAP Operator のインストールに関する詳細は、Web コンソールを使用した EAP Operator のインストール および CLI を使用した EAP Operator のインストール を参照してください。
  • JBoss EAP for OpenShift Source-to-Image (S2I) ビルドイメージを使用して、ユーザーアプリケーションの Docker イメージを構築している。
  • アプリケーションの CustomResourceDefinition (CRD) ファイルが参照する場合は、Secret オブジェクトを作成している。新しい Secret オブジェクト作成の詳細は、Secret の作成 を参照してください。
  • アプリケーションの CRD ファイルが参照する場合は、ConfigMap を作成している。ConfigMap 作成の詳細は、ConfigMap の作成 を参照してください。
  • 必要であれば、standalone.xml ファイルから ConfigMap を作成している。standalone.xml ファイルから ConfigMap を作成する方法の詳細は、standalone.xml ファイルからの ConfigMap の作成 を参照してください。
注記

ConfigMap からの standalone.xml ファイルの提供は、JBoss EAP 8.0 ではサポートされていません。

手順

  1. Web ブラウザーを開き、OperatorHub にログインします。
  2. Java アプリケーションに使用する Project または名前空間を選択します。
  3. Installed Operator に移動し、JBoss EAP Operator を選択します。
  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
  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
  8. アプリケーションのデプロイメントに関連する以下のオプションの設定を行います。

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

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

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

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

      standalone.xml ファイルからの ConfigMap の作成は、JBoss EAP 8.0 ではサポートされていません。

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

      spec:
        disableHTTPRoute: true

9.1.3.1. シークレットの作成

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

手順

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

9.1.3.2. ConfigMap の作成

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

手順

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

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

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

注記

ConfigMap からの standalone.xml ファイルの提供は、JBoss EAP 8.0 ではサポートされていません。

手順

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

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

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

手順

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

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

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

9.1.4. EAP Operator を使用したアプリケーションのメトリクスの表示

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

クラスター管理者がプロジェクトでメトリクスの監視を有効にすると、EAP Operator によって OpenShift コンソールにメトリクスが自動的に表示されます。

前提条件

手順

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

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

EAP Operator はクラスターから削除またはアンインストールできます。サブスクリプションを削除して、サブスクライブされた namespace から EAP Operator を削除できます。EAP Operator の ClusterServiceVersion (CSV) およびデプロイメントを削除することもできます。

注記

データの一貫性と安全性を確保するために、クラスター内の Pod の数を 0 にスケールダウンしてから EAP Operator をアンインストールしてください。

EAP Operator は、Web コンソールを使用してアンインストールできます。

警告

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 Operator が実行を停止し、更新を受信しなくなります。

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

EAP Operator はクラスターから削除またはアンインストールできます。サブスクリプションを削除して、サブスクライブされた namespace から EAP Operator を削除できます。EAP Operator の ClusterServiceVersion (CSV) およびデプロイメントを削除することもできます。

注記

データの一貫性と安全性を確保するために、クラスター内の Pod の数を 0 にスケールダウンしてから EAP Operator をアンインストールしてください。

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

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

警告

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

手順

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

    $ oc get subscription eap-operator -n openshift-operators -o yaml | grep currentCSV
      currentCSV: eap-operator.v1.0.0
  2. EAP Operator のサブスクリプションを削除します。

    $ oc delete subscription eap-operator -n openshift-operators
    subscription.operators.coreos.com "eap-operator" deleted
  3. 前のステップの currentCSV 値を使用して、ターゲット namespace の EAP Operator の CSV を削除します。

    $ oc delete clusterserviceversion eap-operator.v1.0.0 -n openshift-operators
    clusterserviceversion.operators.coreos.com "eap-operator.v1.0.0" deleted

9.1.7. JBoss EAP Operator による安全なトランザクションリカバリー

JBoss EAP Operator は、アプリケーションクラスターを終了する前にデータの整合性を確保します。これを行うために、オペレーターは、レプリカをスケールダウンし、終了のために Pod を clean としてマークする前に、すべてのトランザクションが完了していることを確認します。

つまり、データの不整合を起こさずにデプロイメントを安全に削除するには、まず Pod の数を 0 にスケールダウンし、すべての Pod が終了するまで待ってから、wildflyserver インスタンスを削除する必要があります。

警告

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

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

縮小プロセスの状態を監視する場合は、wildflyserver インスタンスのステータスを確認します。詳細は、スケールダウンプロセスの監視 を参照してください。スケールダウン中の Pod ステータスの詳細は、スケールダウン中の Pod ステータス を参照してください。

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

wildflyserver を管理する EAP Operator は、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 自体を削除したりしても、これらの変更は元に戻りません。

9.1.7.2. スケールダウンプロセスの監視

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

手順

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

    oc describe wildflyserver <name>
    • 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 の数は同じです。
9.1.7.2.1. スケールダウン中の Pod ステータス

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

表9.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 とマークされます。

9.1.7.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
  4. Pod のステータスが SCALING_DOWN_CLEAN に変わり、Pod が終了します。

9.1.7.4. トランザクションログに JDBC ストレージを使用するトランザクションサブシステムの設定

システムが トランザクションログ を保存するファイルシステムを提供しない場合は、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'

検証

  • standalone.xml 設定ファイル oc rsh <podname> cat /opt/server/standalone/configuration/standalone.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>

関連情報

  • 管理コンソールまたは管理 CLI のいずれかを使用したデータソースの作成に関する詳細は、JBoss EAPConfiguration GuideCreating Datasources を参照してください。

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

EAP Operator を使用すると、水平 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
    重要

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

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

    oc autoscale wildflyserver/eap-helloworld --cpu-percent=50 --min=1 --max=10

検証

  • レプリカをチェックすることで、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

9.1.9. OpenShift 上の Jakarta Enterprise Beans Remoting

9.1.9.1. OpenShift 上の Jakarta Enterprise Beans Remoting

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

注記

OpenShift にデプロイする場合は、EAP Operator の使用を検討してください。EAP Operator は、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 Operator は、特定の DNS ホスト名が Pod に割り当てられるように ヘッドレスサービス も使用します。アプリケーションが EAP Operator を使用する場合、ヘッドレスサービスは eap-server-headless などの名前で作成されます。この場合、最初の Pod の DNS 名は eap-server-0.eap-server-headless になります。

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

9.1.9.1.1. OpenShift での Jakarta Enterprise Beans の設定

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

前提条件

  • OpenShift で JBoss EAP アプリケーションインスタンスをデプロイおよび管理するために、EAP Operator とサポート対象の JBoss EAP for OpenShift S2I イメージを使用している。
  • クラスタリングが正しく設定されている。JBoss EAP クラスタリングの詳細は、クラスタリング セクションを参照してください。

手順

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

    $JBOSS_HOME/bin/add-user.sh
  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"
      注記

      設定に以下の例を使用する場合は、>>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>

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

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

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.