4장. Operator 기반 브로커 배포 구성

4.1. Operator에서 브로커 구성을 생성하는 방법

CR(사용자 정의 리소스) 인스턴스를 사용하여 브로커 배포를 구성하기 전에 Operator에서 브로커 구성을 생성하는 방법을 이해해야 합니다.

Operator 기반 브로커 배포를 생성할 때 각 브로커의 Pod는 OpenShift 프로젝트의 StatefulSet에서 실행됩니다. 브로커의 애플리케이션 컨테이너는 각 Pod 내에서 실행됩니다.

Operator는 각 Pod를 초기화할 때 Init Container 라는 컨테이너 유형을 실행합니다. OpenShift Container Platform에서 Init Container는 애플리케이션 컨테이너보다 먼저 실행되는 특수 컨테이너입니다. Init Containers에는 애플리케이션 이미지에 없는 유틸리티 또는 설정 스크립트가 포함될 수 있습니다.

기본적으로 AMQ Broker Operator는 기본 제공 Init Container를 사용합니다. Init Container는 배포에 기본 CR 인스턴스를 사용하여 각 브로커 애플리케이션 컨테이너에서 사용하는 구성을 생성합니다.

CR에 지정된 주소 설정이 있는 경우 Operator는 기본 구성을 생성한 다음 해당 구성을 CR에 지정된 구성과 병합하거나 교체합니다. 이 프로세스는 다음 섹션에 설명되어 있습니다.

4.1.1. Operator에서 주소 설정 구성을 생성하는 방법

배포에 사용되는 기본 CR(사용자 정의 리소스) 인스턴스에 주소 설정 구성을 포함하는 경우 Operator는 아래에 설명된 대로 각 브로커의 주소 설정 구성을 생성합니다.

  1. Operator는 브로커 애플리케이션 컨테이너보다 먼저 Init Container를 실행합니다. Init Container는 기본 주소 설정 구성을 생성합니다. 기본 주소 설정 구성은 다음과 같습니다.

    <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 Container가 브로커 구성 생성(address 설정 포함)을 완료하면 브로커 애플리케이션 컨테이너가 시작됩니다. 브로커를 시작하면 브로커 컨테이너는 이전에 Init Container에서 사용한 설치 디렉터리에서 해당 구성을 복사합니다. broker.xml 구성 파일에서 주소 설정 구성을 검사할 수 있습니다. 실행 중인 브로커의 경우 이 파일은 /home/jboss/amq-broker/etc 디렉터리에 있습니다.

추가 리소스

4.1.2. 브로커 Pod의 디렉터리 구조

Operator 기반 브로커 배포를 생성할 때 각 브로커의 Pod는 OpenShift 프로젝트의 StatefulSet에서 실행됩니다. 브로커의 애플리케이션 컨테이너는 각 Pod 내에서 실행됩니다.

Operator는 각 Pod를 초기화할 때 Init Container 라는 컨테이너 유형을 실행합니다. OpenShift Container Platform에서 Init Container는 애플리케이션 컨테이너보다 먼저 실행되는 특수 컨테이너입니다. Init Containers에는 애플리케이션 이미지에 없는 유틸리티 또는 설정 스크립트가 포함될 수 있습니다.

브로커 인스턴스에 대한 구성을 생성할 때 Init Container는 기본 설치 디렉터리에 포함된 파일을 사용합니다. 이 설치 디렉터리는 Operator가 브로커 Pod 및 Init Container 및 브로커 컨테이너 공유에 마운트하는 볼륨에 있습니다. Init Container에서 공유 볼륨을 마운트하는 데 사용하는 경로는 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

브로커를 실행하는 데 필요한 ScanSetting 및 라이브러리.

<install_dir>/log

브로커 로그 파일.

<install_dir>/tmp

임시 웹 애플리케이션 파일.

Init Container가 브로커 구성 생성을 완료하면 브로커 애플리케이션 컨테이너가 시작됩니다. 브로커를 시작하면 브로커 컨테이너는 이전에 Init Container에서 사용한 설치 디렉터리에서 해당 구성을 복사합니다. 브로커 포드가 초기화되어 실행되면 브로커 구성은 브로커의 /home/jboss/amq-broker 디렉터리(및 하위 디렉터리)에 있습니다.

추가 리소스