4.7. 사용자 정의 Init Container 이미지 지정

4.1절. “Operator에서 브로커 구성을 생성하는 방법” 에 설명된 대로 AMQ Broker Operator는 기본 기본 Init Container를 사용하여 브로커 구성을 생성합니다. 구성을 생성하기 위해 Init Container는 배포에 기본 CR(사용자 정의 리소스) 인스턴스를 사용합니다. CR에서 지정할 수 있는 항목은 주요 브로커 CRD(Custom Resource Definition)에 노출되는 항목 뿐입니다.

그러나 CRD에 노출되지 않은 구성을 포함해야 하는 경우가 있을 수 있습니다. 이 경우 기본 CR 인스턴스에서 사용자 정의 Init Container를 지정할 수 있습니다. 사용자 정의 Init Container는 Operator에서 이미 생성한 구성을 수정하거나 추가할 수 있습니다. 예를 들어 사용자 정의 Init Container를 사용하여 브로커 로깅 설정을 수정할 수 있습니다. 또는 사용자 정의 Init Container를 사용하여 브로커 설치 디렉터리에 추가 런타임 종속성(즉, .jar 파일)을 포함할 수 있습니다.

사용자 정의 Init Container 이미지를 빌드할 때 다음 중요한 지침을 따라야 합니다.

  • 사용자 정의 이미지에 대해 생성하는 빌드 스크립트(예: Docker Dockerfile 또는 Podman Containerfile)에서 FROM 명령은 최신 버전의 AMQ Broker Operator 기본 제공 Init Container를 기본 이미지로 지정해야 합니다. 스크립트에서 다음 행을 포함합니다.

    FROM registry.redhat.io/amq7/amq-broker-init-rhel8:7.10
  • 사용자 지정 이미지에는 /amq/scripts 라는 디렉터리에 포함하는 post-config.sh 스크립트가 포함되어야 합니다. post-config.sh 스크립트는 Operator가 생성하는 초기 구성을 수정하거나 추가할 수 있는 위치입니다. 사용자 지정 Init Container를 지정하면 Operator는 CR 인스턴스를 사용하여 구성을 생성한 브로커 애플리케이션 컨테이너를 시작하기 전에 post-config.sh 스크립트를 실행합니다.
  • 4.1.2절. “브로커 Pod의 디렉터리 구조” 에 설명된 대로 Init Container에서 사용하는 설치 디렉터리의 경로는 CONFIG_INSTANCE_DIR 이라는 환경 변수에 정의됩니다. post-config.sh 스크립트는 설치 디렉터리(예: ${CONFIG_INSTANCE_DIR}/lib)를 참조할 때 이 환경 변수 이름을 사용해야 하며 이 변수의 실제 값(예: /amq/init/config/lib)을 사용해야 합니다.
  • 사용자 정의 브로커 구성에 추가 리소스(예: .xml 또는 .jar 파일)를 포함하려면 사용자 정의 이미지에 포함되어 있고 post-config.sh 스크립트에 액세스할 수 있는지 확인해야 합니다.

다음 절차에서는 사용자 정의 Init Container 이미지를 지정하는 방법을 설명합니다.

사전 요구 사항

  • 위에서 설명한 지침을 충족하는 사용자 정의 Init Container 이미지를 빌드해야 합니다. ArtemisCloud Operator에 대한 사용자 정의 Init Container 이미지를 빌드하고 지정하는 전체 예제는 JDBC 기반 지속성에 대한 사용자 정의 Init Container 이미지를 참조하십시오.
  • AMQ Broker Operator에 대한 사용자 지정 Init Container 이미지를 제공하려면 Quay 컨테이너 레지스트리와 같은 컨테이너 레지스트리의 리포지토리에 이미지를 추가할 수 있어야 합니다.
  • Operator에서 Init Container를 사용하여 브로커 구성을 생성하는 방법을 이해해야 합니다. 자세한 내용은 4.1절. “Operator에서 브로커 구성을 생성하는 방법”의 내용을 참조하십시오.
  • CR을 사용하여 브로커 배포를 생성하는 방법에 대해 잘 알고 있어야 합니다. 자세한 내용은 3.4절. “Operator 기반 브로커 배포 생성”의 내용을 참조하십시오.

절차

  1. 브로커 배포용 CR(사용자 정의 리소스) 인스턴스 구성을 시작합니다.

    1. OpenShift 명령줄 인터페이스 사용:

      1. 배포를 생성하는 프로젝트에 CR을 배포할 수 있는 권한이 있는 사용자로 OpenShift에 로그인합니다.

        oc login -u <user> -p <password> --server=<host:port>
      2. 다운로드 및 추출한 Operator 설치 아카이브의 deploy/crs 디렉터리에 포함된 broker_activemqartemis_cr.yaml 이라는 샘플 CR 파일을 엽니다.
    2. OpenShift Container Platform 웹 콘솔 사용:

      1. 배포를 생성하는 프로젝트에 CR을 배포할 수 있는 권한이 있는 사용자로 콘솔에 로그인합니다.
      2. 기본 브로커 CRD를 기반으로 새 CR 인스턴스를 시작합니다. 왼쪽 창에서 AdministrationCustom Resource Definitions 를 클릭합니다.
      3. ActiveMQArtemis CRD를 클릭합니다.
      4. Instances 탭을 클릭합니다.
      5. Create ActiveMQArtemis 를 클릭합니다.

        콘솔에서 YAML 편집기가 열리고 CR 인스턴스를 구성할 수 있습니다.

    기본 브로커 배포의 경우 구성은 다음과 같이 표시될 수 있습니다.

    apiVersion: broker.amq.io/v1beta1
    kind: ActiveMQArtemis
    metadata:
      name: ex-aao
      application: ex-aao-app
    spec:
      deploymentPlan:
        size: 1
        image: placeholder
        requireLogin: false
        persistenceEnabled: true
        journalType: nio
        messageMigration: true

    broker_activemqartemis_cr.yaml 샘플 CR 파일에서 image 속성이 자리 표시자 의 기본값으로 설정되어 있는지 확인합니다. 이 값은 기본적으로 image 속성이 배포에 사용할 브로커 컨테이너 이미지를 지정하지 않음을 나타냅니다. Operator에서 사용할 적절한 브로커 컨테이너 이미지를 결정하는 방법을 알아보려면 2.4절. “Operator에서 컨테이너 이미지를 선택하는 방법” 를 참조하십시오.

  2. CR의 deploymentPlan 섹션에서 initImage 속성을 추가합니다.

    apiVersion: broker.amq.io/v1beta1
    kind: ActiveMQArtemis
    metadata:
      name: ex-aao
      application: ex-aao-app
    spec:
      deploymentPlan:
        size: 1
        image: placeholder
        initImage:
        requireLogin: false
        persistenceEnabled: true
        journalType: nio
        messageMigration: true
  3. initImage 속성 값을 사용자 정의 Init Container 이미지의 URL로 설정합니다.

    apiVersion: broker.amq.io/v1beta1
    kind: ActiveMQArtemis
    metadata:
      name: ex-aao
      application: ex-aao-app
    spec:
      deploymentPlan:
        size: 1
        image: placeholder
        initImage: <custom_init_container_image_url>
        requireLogin: false
        persistenceEnabled: true
        journalType: nio
        messageMigration: true
    initImage
    사용자 정의 Init Container 이미지의 전체 URL을 지정합니다. 이 URL은 컨테이너 레지스트리의 리포지토리에 추가해야 합니다.
  4. CR 인스턴스를 배포합니다.

    1. OpenShift 명령줄 인터페이스 사용:

      1. CR 파일을 저장합니다.
      2. 브로커 배포를 생성하는 프로젝트로 전환합니다.

        $ oc project <project_name>
      3. CR 인스턴스를 생성합니다.

        $ oc create -f <path/to/custom_resource_instance>.yaml
    2. OpenShift 웹 콘솔 사용:

      1. CR 구성을 마쳤으면 생성을 클릭합니다.

추가 리소스