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는 아래에 설명된 대로 각 브로커의 주소 설정 구성을 생성합니다.
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>
- 사용자 정의 리소스(CR) 인스턴스에서 주소 설정 구성을 지정한 경우 Init Container는 해당 구성을 처리하고 XML로 변환합니다.
-
CR의
applyRule
속성 값에 따라 Init Container는 위에 표시된 기본 주소 설정 구성을 CR에 지정한 구성으로 병합 하거나 대체합니다. 이 병합 또는 교체의 결과는 브로커가 사용할 최종 주소 설정 구성입니다. -
Init Container가 브로커 구성 생성(address 설정 포함)을 완료하면 브로커 애플리케이션 컨테이너가 시작됩니다. 브로커를 시작하면 브로커 컨테이너는 이전에 Init Container에서 사용한 설치 디렉터리에서 해당 구성을 복사합니다.
broker.xml
구성 파일에서 주소 설정 구성을 검사할 수 있습니다. 실행 중인 브로커의 경우 이 파일은/home/jboss/amq-broker/etc
디렉터리에 있습니다.
추가 리소스
-
CR에서
applyRule
속성을 사용하는 예는 4.2.3절. “Operator 기반 브로커 배포에서 구성된 주소와 일치하는 주소 설정” 을 참조하십시오.
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
환경 변수의 값은 변경할 수 없습니다.
기본적으로 설치 디렉터리에는 다음과 같은 하위 디렉터리가 있습니다.
하위 디렉터리 | 내용 |
---|---|
| 브로커를 실행하는 데 필요한 바이너리 및 스크립트입니다. |
| 구성 파일. |
| 브로커 저널입니다. |
| 브로커를 실행하는 데 필요한 ScanSetting 및 라이브러리. |
| 브로커 로그 파일. |
| 임시 웹 애플리케이션 파일. |
Init Container가 브로커 구성 생성을 완료하면 브로커 애플리케이션 컨테이너가 시작됩니다. 브로커를 시작하면 브로커 컨테이너는 이전에 Init Container에서 사용한 설치 디렉터리에서 해당 구성을 복사합니다. 브로커 포드가 초기화되어 실행되면 브로커 구성은 브로커의 /home/jboss/amq-broker
디렉터리(및 하위 디렉터리)에 있습니다.
추가 리소스
- Operator에서 기본 제공 Init Container의 컨테이너 이미지를 선택하는 방법에 대한 자세한 내용은 2.4절. “Operator에서 컨테이너 이미지를 선택하는 방법” 을 참조하십시오.
- 사용자 지정 Init Container 이미지를 빌드하고 지정하는 방법을 알아보려면 4.7절. “사용자 정의 Init Container 이미지 지정” 를 참조하십시오.