3.6. KIE Server および Smart Router 用のカスタムイメージの作成

カスタムイメージを作成して、ファイルを KIE Server および Smart Router デプロイメントに追加できます。次に、イメージを独自のコンテナーレジストリーにプッシュする必要があります。Red Hat Process Automation Manager をデプロイする場合は、カスタムイメージを使用するように Operator を設定できます。

カスタムイメージを使用する場合は、自動のバージョンアップグレードを無効にする必要があります。新規バージョンをインストールする場合は、以前と同じ名前と、新規バージョンタグを指定してイメージをビルドし、レジストリーにそのイメージをプッシュします。その後にバージョンを変更すると、Operator が自動的に新規イメージをプルします。Operator での製品バージョンの変更に関する説明は、「Operator を使用してデプロイした環境の変更」 を参照してください。

特に、次のタイプのカスタムイメージを作成できます。

  • 追加の RPM パッケージを含めた KIE Server のカスタムイメージ
  • 追加の JAR クラスライブラリーを含めた KIE Server のカスタムイメージ
  • カスタムルーティングを実装する追加の JAR クラスライブラリーが含まれる Smart Router のカスタムイメージ

3.6.1. 追加の RPM パッケージを含めたカスタムの KIE Server イメージの作成

追加の RPM パッケージのインストール先のカスタム KIE Server イメージを作成できます。このイメージをカスタムレジストリーにプッシュして、KIE Server のデプロイに使用できます。

Red Hat Enterprise Linux 8 リポジトリーから任意のパッケージをインストールできます。以下の例では、ps ユーティリティーが含まれる procps-ng パッケージをインストールしていますが、変更して他のパッケージをインストールすることができます。

手順

  1. podman login コマンドを使用して registry.redhat.io レジストリーの認証を行います。レジストリーの認証に関する詳細は、Red Hat コンテナーレジストリーの認証 を参照してください。
  2. サポートされている KIE Server のベースイメージをダウンロードするには、次のコマンドを入力します。

    podman pull registry.redhat.io/rhpam-7/rhpam-kieserver-rhel8:7.12.0
  3. ベースイメージをもとにカスタムイメージを定義する Dockerfile を作成します。このファイルで、現在のユーザーを root に変更して、yum コマンドで RPM パッケージをインストールしてから USER 185 (Red Hat JBoss EAP ユーザー) に戻します。以下の例では、Dockerfile ファイルの内容を示します。

    FROM registry.redhat.io/rhpam-7/rhpam-kieserver-rhel8:7.12.0
    USER root
    RUN yum -y install procps-ng
    USER 185

    必要に応じて RPM ファイルの名前を置き換えます。yum コマンドは自動的に Red Hat Enterprise Linux 8 リポジトリーからの全依存関係を自動的にインストールします。複数の RMP ファイルをインストールする必要がある場合があります。今回は、RUN コマンドを複数回使用します。

  4. Dockerfile を使用してカスタムイメージをビルドします。レジストリー名など、イメージの完全修飾名を指定します。ベースイメージと同じバージョンタグを使用する必要があります。イメージをビルドするには、以下のコマンドを入力します。

    podman build . --tag registry_address/image_name:7.12.0

    以下に例を示します。

    podman build . --tag registry.example.com/custom/rhpam-kieserver-rhel8:7.12.0
  5. ビルドが完了したら、イメージを実行してログインし、カスタマイズが成功したことを確認します。以下のコマンドを入力します。

    podman run -it --rm registry_address/image_name:7.12.0 /bin/bash

    以下に例を示します。

    podman run -it --rm registry.example.com/custom/rhpam-kieserver-rhel8:7.12.0 /bin/bash

    イメージのシェルプロンプトで、コマンドを入力して RPM がインストールされていることをテストし、exit と入力します。たとえば、procps-ng の場合は ps コマンドを実行します。

    [jboss@c2fab36b778e ~]$ ps
    PID TTY          TIME CMD
      1 pts/0    00:00:00 bash
     13 pts/0    00:00:00 ps
    [jboss@c2fab36b778e ~]$ exit
  6. カスタムイメージをレジストリーにプッシュするには、次のコマンドを入力します。

    podman push registry_address/image_name:7.12.0 docker://registry_address/image_name:7.12.0

    以下に例を示します。

    podman push registry.example.com/custom/rhpam-kieserver-rhel8:7.12.0 docker://registry.example.com/custom/rhpam-kieserver-rhel8:7.12.0

次のステップ

KIE Server をデプロイする場合は、イメージ名と namespace を設定してレジストリーにカスタムイメージを指定します。Set KIE Server image をクリックして、Kind の値を DockerImage に変更してから、バージョンタグがないレジストリー名など、イメージ名を指定します。以下に例を示します。

registry.example.com/custom/rhpam-kieserver-rhel8

Operator を使用した KIE Server のデプロイに関する詳細は、「環境のカスタム KIE Server 設定の設定」 を参照してください。

3.6.2. 追加の JAR ファイルを使用したカスタム KIE Server イメージの作成

追加の JAR ファイル (単数、複数問わず) のインストール先のカスタムの KIE Server イメージを作成してサーバーの機能を拡張できます。このイメージをカスタムレジストリーにプッシュして、KIE Server のデプロイに使用できます。

たとえば、カスタムクラス JAR を作成して、カスタムの Prometheus メトリクスを KIE Server に提供できます。カスタムクラスの作成手順は、KIE Server の管理とモニターリングカスタムのメトリクスを使用した KIE Server の Prometheus メトリクスモニターリングの拡張 を参照してください。

手順

  1. KIE Server で動作するカスタムライブラリーを開発します。以下のドキュメントと例を使用して、ライブラリーを開発できます。

  2. JAR ファイルが target ディレクトリーに配置されるように Maven を使用してライブラリーをビルドします。この例では、custom-kieserver-ext-1.0.0.Final.jar のファイル名を使用します。
  3. podman login コマンドを使用して registry.redhat.io レジストリーの認証を行います。レジストリーの認証に関する詳細は、Red Hat コンテナーレジストリーの認証 を参照してください。
  4. サポートされている KIE Server のベースイメージをダウンロードするには、次のコマンドを入力します。

    podman pull registry.redhat.io/rhpam-7/rhpam-kieserver-rhel8:7.12.0
  5. ベースイメージをもとにカスタムイメージを定義する Dockerfile を作成します。このファイルは JAR ファイル (単数、複数を問わず) を /opt/eap/standalone/deployments/ROOT.war/WEB-INF/lib/ ディレクトリーにコピーする必要があります。以下の例では、Dockerfile ファイルの内容を示します。

    FROM registry.redhat.io/rhpam-7/rhpam-kieserver-rhel8:7.12.0
    COPY target/custom-kieserver-ext-1.0.0.Final.jar /opt/eap/standalone/deployments/ROOT.war/WEB-INF/lib/
  6. Dockerfile を使用してカスタムイメージをビルドします。レジストリー名など、イメージの完全修飾名を指定します。ベースイメージと同じバージョンタグを使用する必要があります。イメージをビルドするには、以下のコマンドを入力します。

    podman build . --tag registry_address/image_name:7.12.0

    以下に例を示します。

    podman build . --tag registry.example.com/custom/rhpam-kieserver-rhel8:7.12.0
  7. カスタムイメージをレジストリーにプッシュするには、次のコマンドを入力します。

    podman push registry_address/image_name:7.12.0 docker://registry_address/image_name:7.12.0

    以下に例を示します。

    podman push registry.example.com/custom/rhpam-kieserver-rhel8:7.12.0 docker://registry.example.com/custom/rhpam-kieserver-rhel8:7.12.0

次のステップ

KIE Server をデプロイする場合は、イメージ名と namespace を設定してレジストリーにカスタムイメージを指定します。Set KIE Server image をクリックして、Kind の値を DockerImage に変更してから、バージョンタグがないレジストリー名など、イメージ名を指定します。以下に例を示します。

registry.example.com/custom/rhpam-kieserver-rhel8

Operator を使用した KIE Server のデプロイに関する詳細は、「環境のカスタム KIE Server 設定の設定」 を参照してください。

3.6.3. カスタムルーティングを実装する追加の JAR ファイルを使用したカスタム Smart Router イメージの作成

デフォルトでは、Smart Router はコンテナーエイリアスに基づいて要求をルーティングします。複数の KIE Server が同じコンテナーエイリアスを持つサービスを提供している場合、Smart Router はそのエイリアス間の負荷を分散します。

場合によっては、カスタムのルーティング機能が必要になる場合があります。カスタムクラスを作成してカスタムルーティングを実装してから、クラスでカスタムの Smart Router イメージを作成できます。このイメージをカスタムレジストリーにプッシュして、Smart Router のデプロイに使用できます。

前提条件

  • JDK および Apache Maven がインストールされている。
  • Red Hat Process Automation Manager をデプロイするプロジェクトが Red Hat OpenShift Container Platform 環境に作成されている。
  • Red Hat OpenShift Container Platform イメージレジストリーのルートを把握しており、イメージをレジストリーにプッシュするパーミッションがある。レジストリーの設定手順は、Red Hat OpenShift Container Platform の製品ドキュメントの Registry を参照してください。

手順

  1. GitHub リポジトリー から、ルーター拡張のサンプルソースをダウンロードします。
  2. 必要に応じて、ルーター拡張のサンプルソースを変更します。既存のコードは、コンテナーのバージョンに基づいて単純なルーティングを実装します。
  3. Maven を使用してソースコードをビルドします。

    mvn clean package

    ビルドプロセスにより JAR ファイル target/router-ext-0.0.1-SNAPSHOT.jar が生成されます。

  4. カスタムイメージを作成する作業ディレクトリーを作成し、生成された JAR ファイルをディレクトリーにコピーしてから、以下のようにディレクトリーに移動します。

    mkdir /tmp/smartrouter
    cp target/router-ext-0.0.1-SNAPSHOT.jar /tmp/smartrouter
    cd /tmp/smartrouter
  5. podman login コマンドを使用して registry.redhat.io レジストリーの認証を行います。レジストリーの認証に関する詳細は、Red Hat コンテナーレジストリーの認証 を参照してください。
  6. サポートされている Smart Router のベースイメージをダウンロードするには、次のコマンドを入力します。

    podman pull registry.redhat.io/rhpam-7/rhpam-smartrouter-rhel8:7.12.0
  7. 公式の Smart Router イメージから openshift-launch.sh ファイルを展開します。

    podman run --rm registry.redhat.io/rhpam-7/rhpam-smartrouter-rhel8:7.12.0 \
       cat /opt/rhpam-smartrouter/openshift-launch.sh > openshift-launch.sh
  8. openshift-launch.sh ファイルを編集します。ファイルの最後の行で、以下のような exec 命令を探します。

    exec ${JAVA_HOME}/bin/java ${SHOW_JVM_SETTINGS} ${JAVA_OPTS} ${JAVA_OPTS_APPEND} ${JAVA_PROXY_OPTIONS} "${D_ARR[@]}" -jar /opt/${JBOSS_PRODUCT}/${KIE_ROUTER_DISTRIBUTION_JAR}

    命令を以下のテキストに変更します。

    exec ${JAVA_HOME}/bin/java ${SHOW_JVM_SETTINGS} "${D_ARR[@]}" \
        -cp /opt/${JBOSS_PRODUCT}/router-ext-0.0.1-SNAPSHOT.jar:/opt/${JBOSS_PRODUCT}/${KIE_ROUTER_DISTRIBUTION_JAR} \
        org.kie.server.router.KieServerRouter

    この変更により、エクステンション JAR ファイルが Java クラスパスに追加されます。

  9. ベースイメージをもとにカスタムイメージを定義する Dockerfile ファイルを作成します。以下の例では、Dockerfile ファイルの内容を示します。

    FROM registry.redhat.io/rhpam-7/rhpam-smartrouter-rhel8:7.12.0
    RUN rm -rfv /opt/rhpam-smartrouter/openshift-launch.sh
    COPY openshift-launch.sh  /opt/rhpam-smartrouter/openshift-launch.sh
    COPY router-ext-0.0.1-SNAPSHOT.jar /opt/rhpam-smartrouter/router-ext-0.0.1-SNAPSHOT.jar
    
    USER root
    RUN chown jboss. /opt/rhpam-smartrouter/router-ext-0.0.1-SNAPSHOT.jar /opt/rhpam-smartrouter/openshift-launch.sh
    RUN chmod +x /opt/rhpam-smartrouter/openshift-launch.sh
    USER 185

    このファイルには、以下のアクションが含まれます。

    • JAR ファイルおよび新規の openshift-launch.sh ファイルを追加します。
    • 現在のユーザーを root に変更します。
    • openshift-launch.sh ファイルに必要なパーミッションを設定します。
    • Red Hat JBoss EAP ユーザーである USER 185 に戻ります。
  10. oc コマンドを使用して、Red Hat OpenShift Container Platform クラスターにログインします。
  11. podman login コマンドを使用して、Red Hat OpenShift Container Platform クラスターレジストリーにログインします。
  12. Dockerfile を使用してカスタムイメージをビルドします。Red Hat OpenShift Container Platform クラスターレジストリーおよびプロジェクト名前空間のイメージにタグを付けます。イメージのカスタム名と、ベースイメージのバージョンと同じバージョンタグを使用します。イメージをビルドするには、以下のコマンドを入力します。

    podman build . --tag registry-route/project-name_/image-name:7.12.0

    以下に例を示します。

    podman build . --tag route-openshift-image-registry.openshift.example.com/rhpam-project/rhpam-smartrouter-rhel8-custom:7.12.0
  13. ビルドが完了したら、イメージを実行して、カスタマイズが成功したことを確認します。以下のコマンドを入力します。

    podman run registry-route/project-name/image-name:7.12.0

    以下に例を示します。

    podman run route-openshift-image-registry.openshift.example.com/rhpam-project/rhpam-smartrouter-rhel8-custom:7.12.0

    以下の例のように、出力にカスタムサービスが記載されていることを確認します。

    INFO: Using 'LatestVersionContainerResolver' container resolver and restriction policy 'ByPassUserNotAllowedRestrictionPolicy'
  14. カスタムイメージをレジストリーにプッシュします。

    podman push registry-route/project-name/image-name:7.12.0

    以下に例を示します。

    podman push route-openshift-image-registry.openshift.example.com/rhpam-project/rhpam-smartrouter-rhel8-custom:7.12.0

次のステップ

Red Hat Process Automation Manager をデプロイする場合は、Smart Router タブに以下の値を設定します。

  • イメージコンテキスト: プロジェクト名 (例: rhpam-project)
  • イメージ: カスタムイメージ名 (例: rhpam-smartrouter-rhel8-custom)

Operator を使用した Smart Router のデプロイメント方法は、「環境の Smart Router 設定の設定」 を参照してください。

注記

現在のバージョンタグの代わりにカスタムタグを使用することもできます。ただし、現行バージョンタグを使用する場合は、バージョンタグを使用して、新しいバージョンのイメージを作成できます。Red Hat Process Automation Manager のバージョンをアップグレードすると、新しいイメージが自動的に含まれます。Red Hat Process Automation Manager のバージョンをアップグレードする手順は、「Operator を使用してデプロイした環境の変更」 を参照してください。

カスタムタグを使用する場合は、Red Hat Process Automation Manager のデプロイ時に Smart Router タブで Image Tag の値をカスタムタグに設定します。