4.4. 타사 JAR 파일 추가
런타임 시 AMQ Broker에서 타사 JAR 파일을 사용할 수 있습니다. 예를 들어 브로커가 JDBC 데이터베이스에 메시지를 저장하도록 하려면 데이터베이스에 필요한 타사 JAR 파일을 로드하도록 브로커를 구성할 수 있습니다.
각 브로커 Pod의 마운트된 볼륨에서 타사 JAR 파일을 사용할 수 있도록 Operator를 구성하고 JAR 파일의 볼륨 경로를 브로커의 Java classpath에 추가해야 합니다.
JAR 파일이 크기가 1MB 미만인 경우 JAR 파일을 시크릿 또는 configmap에 추가하고 각 브로커 Pod에 JAR 파일을 마운트하도록 Operator를 구성할 수 있습니다. JAR 파일이 보안 및 configmaps에 대한 1MB 제한보다 크면 각 브로커 Pod에 공유 볼륨을 마운트하고 JAR 파일을 해당 볼륨에 다운로드하도록 Operator를 구성할 수 있습니다.
4.4.1. 시크릿 또는 구성 맵을 사용하여 브로커 Pod에 JAR 파일 마운트 링크 복사링크가 클립보드에 복사되었습니다!
JAR 파일이 1MB 미만이면 시크릿 또는 구성 맵을 사용하여 각 브로커 Pod에 타사 JAR 파일을 마운트할 수 있습니다. 또한 런타임 시 마운트된 위치에서 JAR 파일을 로드하도록 브로커의 Java classpath도 수정해야 합니다.
다음 절차에서는 시크릿을 사용하여 JAR 파일을 마운트한다고 가정합니다.
프로세스
oc create secret명령을 사용하여 추가하려는 타사 JAR 파일이 포함된 시크릿을 생성합니다. 예를 들면 다음과 같습니다.oc create secret generic log4j-template --from-file=log4j-layout-template-json-2.22.1.jar시크릿 생성 방법에 대한 자세한 내용은 Kubernetes 문서의 시크릿을 참조하십시오. https://kubernetes.io/docs/concepts/configuration/secret/
브로커 배포에 대한 CR을 편집하고 각 브로커 Pod에 타사 JAR 파일이 포함된 시크릿을 마운트하도록 Operator를 구성합니다. 예를 들어 다음 구성은
log4j-template이라는 시크릿을 마운트합니다.deploymentPlan: ... extraMounts: secrets: - "log4j-template" ...JAR 파일은 각 브로커 Pod의
/amq/extra/secrets/시크릿 이름디렉터리에 마운트됩니다. 예를 들어/amq/extra/secrets/postgresql-driver/log4j-template.jar.ARTEMIS_EXTRA_LIBS환경 변수를 생성하여 브로커의 Java 클래스 경로를 확장하여 브로커가 각 Pod의 마운트된 디렉터리에서 JAR 파일을 로드합니다. 예를 들면 다음과 같습니다.spec: ... env: - name: ARTEMIS_EXTRA_LIBS value: /amq/extra/secrets/log4j-template- CR을 저장합니다.
4.4.2. 각 브로커 Pod의 볼륨에 JAR 파일 다운로드 링크 복사링크가 클립보드에 복사되었습니다!
JAR 파일이 1MB보다 크면 시크릿 또는 구성 맵을 사용하여 각 브로커 Pod에 JAR 파일을 마운트할 수 없습니다. 대신 JAR 파일을 각 브로커 Pod에 Operator가 마운트하는 영구 공유 볼륨으로 다운로드하도록 Operator를 구성할 수 있습니다.
사전 요구 사항
각 브로커 Pod에 마운트할 수 있는 영구 공유 볼륨을 사용할 수 있습니다.
프로세스
-
브로커 배포에 사용할
ActiveMQArtemisCR을 편집합니다. 브로커 CR에서
extraVolumes및extraVolumeMounts속성을 사용하여 영구 볼륨을 추가하고 각 브로커 Pod에 볼륨을 마운트합니다. 예를 들면 다음과 같습니다.deploymentPlan: ... extraVolumes: - name: extra-volume persistentVolumeClaim: claimName: extra-jars extraVolumeMounts: - name: extra-volume mountPath: /opt/extra-lib ...resourceTemplates특성을 사용하여 배포에 대한 StatefulSet 리소스를 사용자 지정합니다. 사용자 지정에서 init 컨테이너를 사용하여 각 Pod에서 생성한추가 볼륨볼륨을 마운트하고 JAR 파일을 볼륨으로 다운로드합니다. 예를 들면 다음과 같습니다.spec: ... resourceTemplates: - selector: kind: StatefulSet patch: kind: StatefulSet spec: template: spec: initContainers: - name: mysql-jdbc-driver-init volumeMounts: - mountPath: /opt/extra-lib name: extra-volume image: curlimages/curl:8.6.0 command: - /bin/sh args: - -c - "if ! [ -f /opt/extra-lib/mysql-connector.jar ]; then curl https://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.23/mysql-connector-java-8.0.23.jar --output /opt/extra-lib/mysql-connector.jar ; fi"이 예제에서 curl 이미지는 파일이 볼륨에 없는 경우
mysql-connector.jar파일을 볼륨의 마운트된 경로인/opt/extra-lib에 다운로드하는 데 사용됩니다.ARTEMIS_EXTRA_LIBS환경 변수를 생성하여 브로커가 공유 볼륨에서 JAR 파일을 로드하도록 브로커의 Java 클래스 경로를 확장합니다. 예를 들면 다음과 같습니다.spec: ... env: - name: ARTEMIS_EXTRA_LIBS value: /opt/extra-lib- CR을 저장합니다.