第4章 Operator ベースのブローカーデプロイメントの設定

4.1. Operator によるブローカー設定の生成方法

カスタムリソース (CR) インスタンスを使用してブローカーデプロイメントを設定する前に、Operator がブローカー設定を生成する方法を理解する必要があります。

Operator ベースのブローカーのデプロイメントを作成する場合、各ブローカーの Pod は OpenShift プロジェクトの StatefulSet で実行されます。ブローカーのアプリケーションコンテナーは各 Pod 内で実行されます。

Operator は、各 Pod を初期化する際に Init コンテナーと呼ばれるコンテナーのタイプを指定します。OpenShift Container Platform では、Init コンテナーはアプリケーションコンテナーの前に実行される特殊なコンテナーです。Init コンテナーには、アプリケーションイメージに存在しないユーティリティーまたはセットアップスクリプトを含めることができます。

デフォルトで、AMQ Broker Operator は組み込み Init コンテナーを使用します。Init コンテナーはデプロイメントのメイン CR インスタンスを使用して、各ブローカーアプリケーションコンテナーで使用される設定を生成します。

CR にアドレス設定を指定した場合、Operator はデフォルト設定を生成し、その設定を CR で指定された設定にマージするか、または置き換えます。このプロセスについては、以下の項で説明します。

4.1.1. Operator によるアドレス設定の生成方法

デプロイメントの主要カスタムリソース (CR) インスタンスにアドレス設定を追加している場合、以下で説明されているように Operator は各ブローカーのアドレス設定を生成します。

  1. Operator は、ブローカーのアプリケーションコンテナーの前に Init コンテナーを実行します。Init コンテナーはデフォルトのアドレス設定を生成します。デフォルトのアドレス設定を以下に示します。

    <address-settings>
        <!--
        if you define auto-create on certain queues, management has to be auto-create
        -->
        <address-setting match="activemq.management#">
            <dead-letter-address>DLQ</dead-letter-address>
            <expiry-address>ExpiryQueue</expiry-address>
            <redelivery-delay>0</redelivery-delay>
            <!--
            with -1 only the global-max-size is in use for limiting
            -->
            <max-size-bytes>-1</max-size-bytes>
            <message-counter-history-day-limit>10</message-counter-history-day-limit>
            <address-full-policy>PAGE</address-full-policy>
            <auto-create-queues>true</auto-create-queues>
            <auto-create-addresses>true</auto-create-addresses>
            <auto-create-jms-queues>true</auto-create-jms-queues>
            <auto-create-jms-topics>true</auto-create-jms-topics>
        </address-setting>
    
        <!-- default for catch all -->
        <address-setting match="#">
            <dead-letter-address>DLQ</dead-letter-address>
            <expiry-address>ExpiryQueue</expiry-address>
            <redelivery-delay>0</redelivery-delay>
            <!--
            with -1 only the global-max-size is in use for limiting
            -->
            <max-size-bytes>-1</max-size-bytes>
            <message-counter-history-day-limit>10</message-counter-history-day-limit>
            <address-full-policy>PAGE</address-full-policy>
            <auto-create-queues>true</auto-create-queues>
            <auto-create-addresses>true</auto-create-addresses>
            <auto-create-jms-queues>true</auto-create-jms-queues>
            <auto-create-jms-topics>true</auto-create-jms-topics>
        </address-setting>
    <address-settings>
  2. カスタムリソース (CR) インスタンスでアドレス設定も指定した場合、Init Container プロセスがその設定を行い、それを XML に変換します。
  3. CR の applyRule プロパティーの値に基づき、Init Container がマージするか、上記のデフォルトのアドレス設定を CR で指定した設定に置き換えます。このマージまたは置換の結果は、ブローカーが使用する最終アドレス設定になります。
  4. Init コンテナーがブローカー設定の生成が終了すると (アドレス設定を含む)、ブローカーのアプリケーションコンテナーが起動します。起動時に、ブローカーコンテナーは以前に init コンテナーによって使用されたインストールディレクトリーから設定をコピーします。broker.xml 設定ファイルでアドレス設定を確認できます。実行中のブローカーの場合、このファイルは /home/jboss/amq-broker/etc ディレクトリーにあります。

関連情報

4.1.2. ブローカー Pod のディレクトリー構造

Operator ベースのブローカーのデプロイメントを作成する場合、各ブローカーの Pod は OpenShift プロジェクトの StatefulSet で実行されます。ブローカーのアプリケーションコンテナーは各 Pod 内で実行されます。

Operator は、各 Pod を初期化する際に Init コンテナーと呼ばれるコンテナーのタイプを指定します。OpenShift Container Platform では、Init コンテナーはアプリケーションコンテナーの前に実行される特殊なコンテナーです。Init コンテナーには、アプリケーションイメージに存在しないユーティリティーまたはセットアップスクリプトを含めることができます。

ブローカーインスタンスの設定を生成する際に、Init コンテナーはデフォルトのインストールディレクトリーに含まれるファイルを使用します。このインストールディレクトリーは、Operator がブローカー Pod にマウントし、Init Container およびブローカーコンテナーを共有するボリュームにあります。共有ボリュームをマウントするために Init コンテナーが使用するパスは、CONFIG_INSTANCE_DIR という環境変数で定義されます。CONFIG_INSTANCE_DIR のデフォルト値は /amq/init/config です。本書では、このディレクトリーは <install_dir> と呼ばれます。

注記

CONFIG_INSTANCE_DIR 環境変数の値を変更することはできません。

デフォルトでは、インストールディレクトリーには以下のサブディレクトリーがあります。

サブディレクトリーコンテンツ

<install_dir>/bin

ブローカーの実行に必要なバイナリーおよびスクリプト。

<install_dir>/etc

設定ファイル。

<install_dir>/data

ブローカーのジャーナル。

<install_dir>/lib

ブローカーの実行に必要な JAR およびライブラリー。

<install_dir>/log

ブローカーのログファイル。

<install_dir>/tmp

一時的な Web アプリケーションファイル。

Init コンテナーがブローカー設定の生成が終了すると、ブローカーのアプリケーションコンテナーが起動します。起動時に、ブローカーコンテナーは以前に init コンテナーによって使用されたインストールディレクトリーから設定をコピーします。ブローカー Pod が初期化され、実行されている場合、ブローカー設定はブローカーの /home/jboss/amq-broker ディレクトリー (およびサブディレクトリー) に置かれます。

関連情報