第2章 HA CEP サーバーの実装
高可用性 (HA) CEP サーバーは、Red Hat OpenShift Container Platform 環境で実行します。このサーバーには、必要なすべての Drools ルールと、イベント処理に必要なその他のコードが含まれています。
ソースを準備して、ビルドし、Red Hat OpenShift Container Platform にデプロイします。
または、別のプロセスを使用して、いつでも KJAR サービスを更新できる HA CEP サーバーをデプロイします。このプロセスに関する詳細は、3章Mave リポジトリーを使用した HA CEP サーバーを実装して KJAR サービスを更新する手順 を参照してください。
前提条件
-
oc
コマンドラインツールを使用して、管理者権限があるプロジェクトにログインしている。
手順
-
Red Hat カスタマーポータルの Software Downloads ページから製品配信可能ファイル
rhdm-7.7.0-reference-implementation.zip
をダウンロードします。 -
ファイルの内容を展開して、さらに
rhdm-7.7.0-openshift-drools-hacep-distribution.zip
ファイルを展開します。 -
openshift-drools-hacep-distribution/sources
ディレクトリーに移動します。 -
sample-hacep-project/sample-hacep-project-kjar
ディレクトリー内のサンプルプロジェクトをもとに、サーバーのコードを確認して変更します。複合イベント処理のロジックは、src/main/resources/org/drools/cep
サブディレクトリーの DRL ルールで定義します。 標準の Maven コマンドを使用してプロジェクトをビルドします。
mvn clean install -DskipTests
mvn clean install -DskipTests
Copy to Clipboard Copied! - Red Hat AMQ Streams 向けの OpenShift operator を有効にして、プロジェクトで AMQ Streams (kafka) クラスターを作成します。Red Hat AMQ Streams のインストールに関する情報は、Using AMQ Streams on OpenShift を参照してください。
サーバーの操作に必要な kafka のトピックを作成するには、
openshift-drools-hacep-distribution/sources
ディレクトリーで、以下のコマンドを実行します。oc apply -f kafka-topics/control.yaml oc apply -f kafka-topics/events.yaml oc apply -f kafka-topics/kiesessioninfos.yaml oc apply -f kafka-topics/snapshot.yaml
oc apply -f kafka-topics/control.yaml oc apply -f kafka-topics/events.yaml oc apply -f kafka-topics/kiesessioninfos.yaml oc apply -f kafka-topics/snapshot.yaml
Copy to Clipboard Copied! アプリケーションが、リーダーの選択に使用する ConfigMap にアクセスできるように、ロールベースのアクセス制御を設定します。
springboot
ディレクトリーに移動して、以下のコマンドを入力します。oc create -f kubernetes/service-account.yaml oc create -f kubernetes/role.yaml oc create -f kubernetes/role-binding.yaml
oc create -f kubernetes/service-account.yaml oc create -f kubernetes/role.yaml oc create -f kubernetes/role-binding.yaml
Copy to Clipboard Copied! Red Hat OpenShift Container Platform のロールベースのアクセス制御に関する詳細は、Red Hat OpenShift Container Platform ドキュメントの RBAC を使用したパーミッションの定義および適用 を参照してください。
oc
コマンドを使用して、ユーザー ID とグループ ID の有効な値 (Docker ファイルに設定する必要あり) を検出します。以下のコマンドを入力します。oc describe project <projectname>
oc describe project <projectname>
Copy to Clipboard Copied! 上記のコマンドでは、
<projectname>
はプロジェクト名に置き換えます。以下の例のように、
supplemental-groups
とuid-range
が表示されている行を検索します。openshift.io/sa.scc.supplemental-groups=1000160000/10000 openshift.io/sa.scc.uid-range=1000160000/10000
openshift.io/sa.scc.supplemental-groups=1000160000/10000 openshift.io/sa.scc.uid-range=1000160000/10000
Copy to Clipboard Copied! springboot
ディレクトリーで、Dockerfile
ファイルを編集します。以下の行を見つけます。RUN groupadd -r app -g <id_group> && useradd -u <id_user> -r -g app -m -d /app -s /sbin/nologin -c "App user" app && chmod 755 /app----
RUN groupadd -r app -g <id_group> && useradd -u <id_user> -r -g app -m -d /app -s /sbin/nologin -c "App user" app && chmod 755 /app----
Copy to Clipboard Copied! この行では、
<id_group>
は、supplemental-groups
の間隔の値に、<id_user>
はuid-range
の間隔の値に置き換えます。RUN groupadd -r app -g 1000160001 && useradd -u 1000160001 -r -g app -m -d /app -s /sbin/nologin -c "App user" app && chmod 755 /app
RUN groupadd -r app -g 1000160001 && useradd -u 1000160001 -r -g app -m -d /app -s /sbin/nologin -c "App user" app && chmod 755 /app
Copy to Clipboard Copied! springboot
ディレクトリーで、以下のコマンドを実行してデプロイメント用のイメージを作成し、OpenShift 環境用に設定したリポジトリーにプッシュします。oc new-build --binary --strategy=docker --name openshift-kie-springboot oc start-build openshift-kie-springboot --from-dir=. --follow
oc new-build --binary --strategy=docker --name openshift-kie-springboot oc start-build openshift-kie-springboot --from-dir=. --follow
Copy to Clipboard Copied! 以下のコマンドを実行して、ビルドしたイメージの名前を検出します。
oc get is/openshift-kie-springboot -o template --template='{{range .status.tags}}{{range .items}}{{.dockerImageReference}}{{end}}{{end}}'
oc get is/openshift-kie-springboot -o template --template='{{range .status.tags}}{{range .items}}{{.dockerImageReference}}{{end}}{{end}}'
Copy to Clipboard Copied! -
テキストエディターで
kubernetes/deployment.yaml
ファイルを開きます。 -
<id_user>
は、Docker ファイルに入力したユーザー ID に置き換えます。 - 既存のイメージ URL を直前のコマンドの結果に置き換えます。
文頭に
@
の記号がある行の最後にある文字をすべて削除し、その行に:latest
を追加します。以下に例を示します。image: image-registry.openshift-image-registry.svc:5000/hacep/openshift-kie-springboot:latest
image: image-registry.openshift-image-registry.svc:5000/hacep/openshift-kie-springboot:latest
Copy to Clipboard Copied! - ファイルを保存します。
以下のコマンドを実行してイメージをデプロイします。
oc apply -f kubernetes/deployment.yaml
oc apply -f kubernetes/deployment.yaml
Copy to Clipboard Copied!