9장. OpenShift Container Platform에 Jboss EAP 애플리케이션 배포
9.1. OpenShift에서 애플리케이션 배포를 자동화하는 JBoss EAP operator 링크 복사링크가 클립보드에 복사되었습니다!
EAP Operator는 OpenShift API를 확장하는 JBoss EAP별 컨트롤러입니다. EAP Operator를 사용하여 복잡한 상태 저장 애플리케이션의 인스턴스를 생성, 구성, 관리 및 원활하게 업그레이드할 수 있습니다.
EAP 운영자는 클러스터에서 여러 JBoss EAP Java 애플리케이션 인스턴스를 관리합니다. 또한 복제본을 축소하고 종료를 위해 Pod를 정리하기 전에 모든 트랜잭션이 완료되었는지 확인하여 애플리케이션 클러스터에서 안전한 트랜잭션 복구를 보장합니다. EAP Operator는 Jakarta Enterprise Cryostat 원격 및 트랜잭션 복구 처리를 적절하게 처리하기 위해 StatefulSet 을 사용합니다. StatefulSet 은 Pod를 다시 시작한 후에도 영구 스토리지 및 네트워크 호스트 이름 안정성을 보장합니다.
OpenShift 클러스터 관리자가 Operator를 검색, 설치 및 업그레이드하는 데 사용할 수 있는 OperatorHub를 사용하여 EAP Operator를 설치해야 합니다.
OpenShift Container Platform 4에서는 OLM(Operator Lifecycle Manager)을 사용하여 모든 Operator 및 여러 클러스터에서 실행되는 관련 서비스의 라이프사이클을 설치, 업데이트 및 관리할 수 있습니다.
OLM은 OpenShift Container Platform 4에서 기본적으로 실행됩니다. 클러스터 관리자는 클러스터에서 실행되는 operator에 대한 액세스 권한을 설치, 업그레이드 및 부여할 수 있습니다. OpenShift Container Platform 웹 콘솔은 클러스터 관리자가 Operator를 설치할 수 있는 관리 화면을 제공하고, 특정 프로젝트에 클러스터에 사용 가능한 Operator 카탈로그를 사용할 수 있는 액세스 권한을 부여합니다.
Operator 및 OLM에 대한 자세한 내용은 OpenShift 설명서 를 참조하십시오.
9.1.1. 웹 콘솔을 사용하여 EAP Operator 설치 링크 복사링크가 클립보드에 복사되었습니다!
JBoss EAP 클러스터 관리자는 OpenShift Container Platform 웹 콘솔을 사용하여 Red Hat OperatorHub에서 EAP Operator를 설치할 수 있습니다. 그런 다음 EAP Operator를 하나 이상의 네임 스페이스에 가입하여 클러스터의 개발자가 사용할 수 있도록 할 수 있습니다.
웹 콘솔을 사용하여 EAP Operator를 설치하기 전에 알아야 할 몇 가지 사항은 다음과 같습니다.
- 설치 모드: 클러스터의 모든 네임스페이스(기본값) 를 선택하여 Operator를 모든 네임스페이스에 설치하거나 사용 가능한 경우 개별 네임스페이스를 선택하여 선택한 네임스페이스에만 Operator를 설치합니다.
- 업데이트 채널: EAP Operator를 여러 채널을 통해 사용할 수 있는 경우 구독할 채널을 선택할 수 있습니다. 예를 들어, stable 채널에서 배치하려면 (사용 가능한 경우) 목록에서 해당 채널을 선택합니다.
- 승인 전략: 자동 또는 수동 업데이트를 선택할 수 있습니다. EAP Operator에 대해 자동 업데이트를 선택하는 경우 새 버전의 Operator를 사용할 수 있는 경우 OLM(Operator Lifecycle Manager)은 실행 중인 EAP Operator 인스턴스를 자동으로 업그레이드합니다. 수동 업데이트를 선택하면 최신 버전의 Operator가 사용 가능할 때 OLM에서 업데이트 요청을 생성합니다. 그런 다음 Operator가 새 버전으로 업데이트되도록 업데이트 요청을 수동으로 승인해야 합니다.
다음 절차는 OpenShift Container Platform 웹 콘솔의 수정 사항에 따라 변경될 수 있습니다. 가장 정확한 최신 절차는 최신 버전의 OpenShift Container Platform 가이드의 Operator 작업 섹션에서 웹 콘솔을 사용하여 OperatorHub에서 설치 섹션을 참조하십시오.
사전 요구 사항
-
cluster-admin권한이 있는 계정을 사용하여 OpenShift Container Platform 클러스터에 액세스할 수 있습니다.
프로세스
- OpenShift Container Platform 웹 콘솔에서 Operator→ OperatorHub 로 이동합니다.
-
아래로 스크롤하거나 키워드로 필터링 상자에
EAP를 입력하여 EAP Operator를 찾습니다. - JBoss EAP Operator를 선택하고 설치를 클릭합니다.
Create Operator Subscription 페이지에서 다음을 수행합니다.
다음 명령 중 하나를 선택합니다.
-
클러스터의 모든 네임스페이스(기본값) 는 기본
openshift-operators네임스페이스에 Operator를 설치하여 클러스터의 모든 네임스페이스를 감시하고 사용할 수 있게 합니다. 이 옵션을 항상 사용할 수있는 것은 아닙니다. - 클러스터의 특정 네임스페이스 는 선택한 특정 단일 네임스페이스에 Operator를 설치합니다. Operator는 이 단일 네임스페이스에서만 사용할 수 있습니다.
-
클러스터의 모든 네임스페이스(기본값) 는 기본
- Update Channel을 선택합니다.
- 앞에서 설명한 대로 자동 또는 수동 승인 전략을 선택합니다.
서브스크립션을 클릭하여 이 OpenShift Container Platform 클러스터에서 선택한 네임스페이스에서 EAP Operator를 사용할 수 있도록 합니다.
- 수동 승인 전략을 선택한 경우 설치 계획을 검토하고 승인할 때까지 서브스크립션의 업그레이드 상태가 Upgrading 으로 유지됩니다. 설치 계획 페이지에서 설치 계획을 승인한 후 서브스크립션 업그레이드 상태가 Up to date 로 이동합니다.
- 자동 승인 전략을 선택한 경우 업그레이드 상태가 개입 없이 최신 상태로 이동합니다.
서브스크립션의 업그레이드 상태가 최신 버전이면 Operator
설치된 Operator를 선택하여 CSV(EAP ClusterServiceVersion)가 표시되고 해당 상태가 관련 네임스페이스에 InstallSucceeded 로 변경되었는지 확인합니다. 참고All namespaces… 설치 모드의 경우
openshift-operators네임스페이스에 표시되는 상태가 InstallSucceeded 입니다. 다른 네임스페이스에서 상태가 Copied 입니다. . . Status 필드가 InstallSucceeded 로 변경되지 않는 경우 문제를 보고하는 워크로드Pod 페이지에서 openshift-operators프로젝트(또는 특정 네임스페이스… 설치 모드가 선택된 경우 기타 관련 네임스페이스)의 모든 Pod 의 로그를 확인합니다.
9.1.2. CLI를 사용하여 EAP Operator 설치 링크 복사링크가 클립보드에 복사되었습니다!
JBoss EAP 클러스터 관리자는 OpenShift Container Platform CLI를 사용하여 Red Hat OperatorHub에서 EAP Operator를 설치할 수 있습니다. 그런 다음 EAP Operator를 하나 이상의 네임 스페이스에 가입하여 클러스터의 개발자가 사용할 수 있도록 할 수 있습니다.
CLI를 사용하여 OperatorHub에서 EAP Operator를 설치할 때 oc 명령을 사용하여 Subscription 오브젝트를 생성합니다.
사전 요구 사항
-
cluster-admin권한이 있는 계정을 사용하여 OpenShift Container Platform 클러스터에 액세스할 수 있습니다. -
로컬 시스템에
oc툴을 설치했습니다.
프로세스
OperatorHub에서 클러스터에서 사용할 수 있는 Operator 목록을 확인합니다.
oc get packagemanifests -n openshift-marketplace | grep eap NAME CATALOG AGE ... eap Red Hat Operators 43d ...
$ oc get packagemanifests -n openshift-marketplace | grep eap NAME CATALOG AGE ... eap Red Hat Operators 43d ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow 서브스크립션오브젝트 YAML 파일(예: Cryostat-operator-sub.yaml)을 생성하여 네임스페이스를 EAP Operator에 서브스크립션합니다. 다음은Subscription오브젝트 YAML 파일의 예입니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 채널 및 승인 전략에 대한 자세한 내용은 이 절차의 웹 콘솔 버전을 참조하십시오.
YAML 파일에서
Subscription오브젝트를 생성합니다.oc apply -f eap-operator-sub.yaml oc get csv -n openshift-operators NAME DISPLAY VERSION REPLACES PHASE eap-operator.v1.0.0 JBoss EAP 1.0.0 Succeeded
$ oc apply -f eap-operator-sub.yaml $ oc get csv -n openshift-operators NAME DISPLAY VERSION REPLACES PHASE eap-operator.v1.0.0 JBoss EAP 1.0.0 SucceededCopy to Clipboard Copied! Toggle word wrap Toggle overflow EAP Operator가 성공적으로 설치되었습니다. 이 시점에서 OLM은 EAP Operator를 알고 있습니다. Operator의 ClusterServiceVersion (CSV)이 대상 네임스페이스에 표시되고 EAP Operator에서 제공하는 API를 생성할 수 있습니다.
9.1.3. EAP Operator를 사용하여 OpenShift에 Java 애플리케이션 배포 링크 복사링크가 클립보드에 복사되었습니다!
EAP Operator는 OpenShift에서 Java 애플리케이션 배포를 자동화하는 데 도움이 됩니다. EAP Operator API에 대한 자세한 내용은 EAP Operator: API 정보를 참조하십시오.
사전 요구 사항
- EAP Operator를 설치했습니다. EAP Operator 설치에 대한 자세한 내용은 웹 콘솔을 사용하여 EAP Operator 설치 및 CLI를 사용하여 EAP Operator 설치를 참조하십시오.
- JBoss EAP for OpenShift S2I(Source-to-Image) 빌드 이미지를 사용하여 사용자 애플리케이션의 Docker 이미지를 빌드했습니다.
-
애플리케이션의 CRD(CustomResourceDefinition) 파일이 이를 참조하는 경우
Secret오브젝트를 생성했습니다. 새Secret오브젝트 생성에 대한 자세한 내용은 보안 생성을 참조하십시오. -
애플리케이션의 CRD 파일이 이를 참조하는 경우
ConfigMap을 생성했습니다. ConfigMap 생성에 대한 자세한 내용은ConfigMap생성을 참조하십시오. -
이렇게 하려면
standalone.xml파일에서ConfigMap을 생성했습니다. standalone.xml 파일에서ConfigMap을 생성하는 방법에 대한 자세한 내용은standalone.xml파일에서 ConfigMap 생성을 참조하십시오.
ConfigMap 에서 standalone.xml 파일을 제공하는 것은 JBoss EAP 8.0에서 지원되지 않습니다.
프로세스
- 웹 브라우저를 열고 OperatorHub에 로그인합니다.
- Java 애플리케이션에 사용할 프로젝트 또는 네임스페이스를 선택합니다.
- Installed Operator 로 이동하여 JBoss EAP operator 를 선택합니다.
- 개요 탭에서 인스턴스 생성 링크를 클릭합니다.
애플리케이션 이미지 세부 정보를 지정합니다.
애플리케이션 이미지는 Java 애플리케이션이 포함된 Docker 이미지를 지정합니다. 이미지는 JBoss EAP for OpenShift S2I(Source-to-Image) 빌드 이미지를 사용하여 빌드해야 합니다.
applicationImage필드가 imagestreamtag에 해당하는 경우 이미지에 대한 모든 변경으로 애플리케이션의 자동 업그레이드가 트리거됩니다.다음 참조 중 하나로 OpenShift 애플리케이션 이미지에 대한 JBoss EAP를 제공할 수 있습니다.
- 이미지 이름: mycomp/myapp
- 태그: mycomp/myapp:1.0
- A digest: mycomp/myapp:@sha256:0af38bc38be93116b6a1d86a9c78bd14cd527121970899d719baf78e5dc7bfd2
- imagestreamtag: my-app:latest
애플리케이션 크기를 지정합니다. 예를 들면 다음과 같습니다.
spec: replicas:2
spec: replicas:2Copy to Clipboard Copied! Toggle word wrap Toggle overflow env 사양을 사용하여 애플리케이션 환경을 구성합니다. 환경 변수는 POSTGRESQL_SERVICE_HOST 또는 POSTGRESQL_USER와 같은Secret오브젝트에서 직접 가져올 수 있습니다. 예를 들면 다음과 같습니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 애플리케이션 배포와 관련된 다음 선택적 구성을 완료합니다.
- 서버 데이터 디렉터리에 대한 스토리지 요구 사항을 지정합니다. 자세한 내용은 애플리케이션용 영구 스토리지 구성을 참조하십시오.
WildFlyServerSpec에서 생성한시크릿이름을 지정하여 애플리케이션을 실행하는 Pod의 볼륨으로 마운트합니다. 예를 들면 다음과 같습니다.spec: secrets: - my-secretspec: secrets: - my-secretCopy to Clipboard Copied! Toggle word wrap Toggle overflow Secret은/etc/secrets/<secret name>에 마운트되며 각 키/값은 파일로 저장됩니다. 파일 이름은 키이고 콘텐츠는 값입니다.시크릿은 Pod 내부에 볼륨으로 마운트됩니다. 다음 예제에서는 키 값을 찾는 데 사용할 수 있는 명령을 보여줍니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 참고Secret오브젝트를 수정하면 프로젝트 불일치가 발생할 수 있습니다. 기존Secret오브젝트를 수정하는 대신 Red Hat은 이전 오브젝트와 동일한 콘텐츠를 사용하여 새 오브젝트를 생성하는 것이 좋습니다. 그런 다음 필요에 따라 콘텐츠를 업데이트하고 operator CR(사용자 정의 리소스)의 참조를 old에서 new로 변경할 수 있습니다. 이는 새 CR 업데이트로 간주되며 Pod가 다시 로드됩니다.WildFlyServerSpec에서 생성한ConfigMap의 이름을 지정하여 애플리케이션을 실행하는 Pod의 볼륨으로 마운트합니다. 예를 들면 다음과 같습니다.spec: configMaps: - my-config
spec: configMaps: - my-configCopy to Clipboard Copied! Toggle word wrap Toggle overflow ConfigMap은/etc/configmaps/<configmap name>에 마운트되며 각 키/값은 파일로 저장됩니다. 파일 이름은 키이고 콘텐츠는 값입니다.ConfigMap은 Pod 내부에 볼륨으로 마운트됩니다. 키 값을 찾으려면 다음을 수행합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 참고ConfigMap을 수정하면 프로젝트 불일치가 발생할 수 있습니다. 기존ConfigMap을 수정하는 대신 Red Hat은 이전ConfigMap과 동일한 콘텐츠를 사용하여 새 ConfigMap을 생성하는 것이 좋습니다. 그런 다음 필요에 따라 콘텐츠를 업데이트하고 operator CR(사용자 정의 리소스)의 참조를 old에서 new로 변경할 수 있습니다. 이는 새 CR 업데이트로 간주되며 Pod가 다시 로드됩니다.고유한 독립 실행형
ConfigMap을 사용하도록 선택하는 경우ConfigMap의 이름과standalone.xml파일의 키를 제공합니다.standaloneConfigMap: name: clusterbench-config-map key: standalone.xmlstandaloneConfigMap: name: clusterbench-config-map key: standalone.xmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 참고JBoss EAP 8.0에서는
standalone.xml파일에서ConfigMap을 생성할 수 없습니다.OpenShift에서 기본 HTTP 경로 생성을 비활성화하려면
disableHTTPRoute를true로 설정합니다.spec: disableHTTPRoute: true
spec: disableHTTPRoute: trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow
9.1.3.1. 시크릿 생성 링크 복사링크가 클립보드에 복사되었습니다!
애플리케이션의 CRD(CustomResourceDefinition) 파일이 Secret 을 참조하는 경우 EAP Operator를 사용하여 OpenShift에 애플리케이션을 배포하기 전에 Secret 을 생성해야 합니다.
프로세스
-
시크릿을 생성하려면 다음을 수행합니다.
oc create secret generic my-secret --from-literal=my-key=devuser --from-literal=my-password='my-very-secure-pasword'
$ oc create secret generic my-secret --from-literal=my-key=devuser --from-literal=my-password='my-very-secure-pasword'
9.1.3.2. configMap 생성 링크 복사링크가 클립보드에 복사되었습니다!
애플리케이션의 CRD(CustomResourceDefinition) 파일이 spec.ConfigMaps 필드의 ConfigMap을 참조하는 경우 EAP Operator를 사용하여 OpenShift에 애플리케이션을 배포하기 전에 ConfigMap을 생성해야 합니다.
프로세스
- configmap을 생성하려면 다음을 수행합니다.
oc create configmap my-config --from-literal=key1=value1 --from-literal=key2=value2 configmap/my-config created
$ oc create configmap my-config --from-literal=key1=value1 --from-literal=key2=value2
configmap/my-config created
9.1.3.3. standalone.xml File에서 configMap 생성 링크 복사링크가 클립보드에 복사되었습니다!
OpenShift S2I(Source-to-Image)용 JBoss EAP에서 제공하는 애플리케이션 이미지에서 사용하지 않고 고유한 JBoss EAP 독립 실행형 구성을 생성할 수 있습니다. standalone.xml 파일은 Operator가 액세스할 수 있는 ConfigMap 에 배치해야 합니다.
ConfigMap 에서 standalone.xml 파일을 제공하는 것은 JBoss EAP 8.0에서 지원되지 않습니다.
프로세스
-
standalone.xml파일에서ConfigMap을 생성하려면 다음을 수행합니다.
oc create configmap clusterbench-config-map --from-file examples/clustering/config/standalone.xml configmap/clusterbench-config-map created
$ oc create configmap clusterbench-config-map --from-file examples/clustering/config/standalone.xml
configmap/clusterbench-config-map created
9.1.3.4. 애플리케이션의 영구 스토리지 구성 링크 복사링크가 클립보드에 복사되었습니다!
애플리케이션에 Pod를 다시 시작할 때마다 유지해야 하는 트랜잭션 또는 메시징 로그와 같은 일부 데이터에 대한 영구 스토리지가 필요한 경우 스토리지 사양을 구성합니다. 스토리지 사양이 비어 있으면 애플리케이션의 각 Pod에서 EmptyDir 볼륨이 사용됩니다. 그러나 해당 Pod가 중지된 후에는 이 볼륨이 유지되지 않습니다.
프로세스
JBoss EAP 독립 실행형 데이터 디렉터리를 저장하기 위한 리소스 요구 사항을 구성하려면
volumeClaimTemplate을 지정합니다. 템플릿의 이름은 JBoss EAP의 이름에서 파생됩니다. 해당 볼륨은ReadWriteOnce액세스 모드로 마운트됩니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 스토리지 요구 사항을 충족하는 영구 볼륨은
/eap/standalone/data디렉터리에 마운트됩니다.
9.1.4. EAP Operator를 사용하여 애플리케이션 메트릭 보기 링크 복사링크가 클립보드에 복사되었습니다!
EAP Operator를 사용하여 OpenShift에 배포된 애플리케이션의 지표를 볼 수 있습니다.
클러스터 관리자가 프로젝트에서 지표 모니터링을 활성화하면 EAP Operator가 OpenShift 콘솔에 지표를 자동으로 표시합니다.
사전 요구 사항
- 클러스터 관리자가 프로젝트에 대한 모니터링을 활성화했습니다. 자세한 내용은 사용자 정의 프로젝트에 대한 모니터링 활성화를 참조하십시오.
프로세스
- OpenShift Container Platform 웹 콘솔에서 모니터링→ 메트릭 으로 이동합니다.
- 메트릭 화면에서 텍스트 상자에 애플리케이션 이름을 입력하여 애플리케이션을 선택합니다. 애플리케이션의 메트릭이 화면에 표시됩니다.
9.1.5. 웹 콘솔을 사용하여 EAP Operator 설치 제거 링크 복사링크가 클립보드에 복사되었습니다!
클러스터에서 EAP Operator를 삭제하거나 제거할 수 있습니다. 서브스크립션을 삭제하여 서브스크립션된 네임스페이스에서 제거할 수 있습니다. EAP Operator의 CSV(ClusterServiceVersion) 및 배포를 제거할 수도 있습니다.
데이터 일관성과 안전성을 보장하기 위해 EAP Operator를 제거하기 전에 클러스터의 Pod 수를 0으로 축소합니다.
웹 콘솔을 사용하여 EAP Operator를 설치 제거할 수 있습니다.
전체 wildflyserver 정의(oc delete wildflyserver <deployment_name>)를 삭제하기로 결정한 경우, 완료되지 않은 트랜잭션과 관계없이 Pod가 시작되지 않고 Pod가 종료됩니다. 이 작업을 수행하는 완료되지 않은 작업에서는 나중에 시작하는 데이터 변경 사항이 차단될 수 있습니다. 이 wildflyserver 를 사용한 트랜잭션 엔터프라이즈 빈 원격 호출과 관련된 다른 JBoss EAP 인스턴스에 대한 데이터 변경도 차단될 수 있습니다.
프로세스
- Operator→ 설치된 Operator 페이지에서 JBoss EAP 를 선택합니다.
- Operator 상세 정보 페이지 오른쪽에 있는 작업 드롭다운 메뉴에서 Operator 제거를 선택합니다.
- Operator 서브스크립션 제거 창에서 프롬프트가 표시되면 설치와 관련된 모든 구성 요소를 제거하려는 경우 선택적으로 선택한 네임스페이스 Operator 완전히 제거 확인란을 선택합니다. 이렇게 하면 CSV가 제거되어 Operator와 연결된 Pod, 배포, CRD(사용자 정의 리소스 정의) 및 CR(사용자 정의 리소스)이 제거됩니다.
- 제거를 클릭합니다. EAP Operator는 실행을 중지하고 더 이상 업데이트를 수신하지 않습니다.
9.1.6. CLI를 사용하여 JBoss EAP Operator 설치 제거 링크 복사링크가 클립보드에 복사되었습니다!
클러스터에서 EAP Operator를 삭제하거나 설치 제거할 수 있습니다. 서브스크립션을 삭제하여 서브스크립션된 네임스페이스에서 제거할 수 있습니다. EAP Operator의 CSV(ClusterServiceVersion) 및 배포를 제거할 수도 있습니다.
데이터 일관성과 안전성을 보장하기 위해 EAP Operator를 제거하기 전에 클러스터의 Pod 수를 0으로 축소합니다.
명령줄을 사용하여 EAP Operator를 설치 제거할 수 있습니다.
명령줄을 사용하는 경우 대상 네임스페이스에서 서브스크립션 및 CSV를 삭제하여 Operator를 제거합니다.
전체 wildflyserver 정의(oc delete wildflyserver <deployment_name>)를 삭제하기로 결정한 경우, 완료되지 않은 트랜잭션과 관계없이 Pod가 시작되지 않고 Pod가 종료됩니다. 이 작업을 수행하는 완료되지 않은 작업에서는 나중에 시작하는 데이터 변경 사항이 차단될 수 있습니다. 이 wildflyserver 를 사용한 트랜잭션 엔터프라이즈 빈 원격 호출과 관련된 다른 JBoss EAP 인스턴스에 대한 데이터 변경도 차단될 수 있습니다.
프로세스
currentCSV필드에서 EAP Operator 서브스크립션의 현재 버전을 확인합니다.oc get subscription eap-operator -n openshift-operators -o yaml | grep currentCSV currentCSV: eap-operator.v1.0.0
$ oc get subscription eap-operator -n openshift-operators -o yaml | grep currentCSV currentCSV: eap-operator.v1.0.0Copy to Clipboard Copied! Toggle word wrap Toggle overflow EAP Operator의 서브스크립션을 삭제합니다.
oc delete subscription eap-operator -n openshift-operators subscription.operators.coreos.com "eap-operator" deleted
$ oc delete subscription eap-operator -n openshift-operators subscription.operators.coreos.com "eap-operator" deletedCopy to Clipboard Copied! Toggle word wrap Toggle overflow 이전 단계의
currentCSV값을 사용하여 대상 네임스페이스에서 EAP Operator의 CSV를 삭제합니다.oc delete clusterserviceversion eap-operator.v1.0.0 -n openshift-operators clusterserviceversion.operators.coreos.com "eap-operator.v1.0.0" deleted
$ oc delete clusterserviceversion eap-operator.v1.0.0 -n openshift-operators clusterserviceversion.operators.coreos.com "eap-operator.v1.0.0" deletedCopy to Clipboard Copied! Toggle word wrap Toggle overflow
9.1.7. 안전한 트랜잭션 복구를 위한 JBoss EAP operator 링크 복사링크가 클립보드에 복사되었습니다!
JBoss EAP Operator는 애플리케이션 클러스터를 종료하기 전에 데이터 일관성을 보장합니다. 이를 위해 Operator는 복제본을 축소하고 종료를 위해 Pod를 정리 로 표시하기 전에 모든 트랜잭션이 완료되었는지 확인합니다.
즉, 데이터 불일치 없이 배포를 안전하게 제거하려면 먼저 Pod 수를 0으로 축소한 다음 모든 Pod가 종료될 때까지 기다린 다음 wildflyserver 인스턴스만 삭제해야 합니다.
전체 wildflyserver 정의(oc delete wildflyserver <deployment_name>)를 삭제하기로 결정한 경우, 완료되지 않은 트랜잭션과 관계없이 Pod가 시작되지 않고 Pod가 종료됩니다. 이 작업을 수행하는 완료되지 않은 작업에서는 나중에 시작하는 데이터 변경 사항이 차단될 수 있습니다. 이 wildflyserver 를 사용한 트랜잭션 엔터프라이즈 빈 원격 호출과 관련된 다른 JBoss EAP 인스턴스에 대한 데이터 변경도 차단될 수 있습니다.
스케일다운 프로세스가 Pod 상태(oc get pod <pod_name>)가 여전히 Running 으로 표시됩니다. Pod는 이를 대상으로 하는 원격 엔터프라이즈 빈 호출을 포함하여 완료되지 않은 모든 트랜잭션을 완료해야 합니다.
스케일 다운 프로세스의 상태를 모니터링하려면 wildflyserver 인스턴스의 상태를 관찰합니다. 자세한 내용은 스케일다운 프로세스 모니터링을 참조하십시오. 스케일 다운 중 Pod 상태에 대한 자세한 내용은 스케일 다운 중 Pod 상태를 참조하십시오.
9.1.7.1. 안정적인 네트워크 호스트 이름을 위한 상태 저장 세트 링크 복사링크가 클립보드에 복사되었습니다!
wildflyserver를 관리하는 EAP Operator는 JBoss EAP 포드를 관리하는 기본 오브젝트로 StatefulSet 을 생성합니다.
StatefulSet 은 상태 저장 애플리케이션을 관리하는 워크로드 API 오브젝트입니다. Pod 세트 배포 및 스케일링을 관리하고 이러한 Pod의 순서 및 고유성을 보장합니다.
StatefulSet 을 사용하면 클러스터의 Pod의 이름이 사전 정의된 순서로 지정됩니다. 또한 Pod 종료가 동일한 순서를 따릅니다. 예를 들어, pod-1은 추론적인 결과가 있는 트랜잭션을 가지고 있으므로 SCALING_DOWN_RECOVERY_DIRTY 의 상태에 있습니다. pod-0이 SCALING_DOWN_CLEAN 상태인 경우에도 pod-1 전에는 종료되지 않습니다. pod-1이 정리 되고 종료될 때까지 pod-0은 SCALING_DOWN_CLEAN 상태로 유지됩니다. 그러나 pod-0이 SCALING_DOWN_CLEAN 상태에 있더라도 새 요청이 수신되지 않으며 거의 유휴 상태입니다.
StatefulSet 의 복제본 크기를 줄이거나 Pod 자체를 삭제하는 것은 효과가 없으며 이러한 변경 사항이 취소됩니다.
9.1.7.2. 스케일 다운 프로세스 모니터링 링크 복사링크가 클립보드에 복사되었습니다!
스케일 다운 프로세스의 상태를 모니터링하려면 wildflyserver 인스턴스의 상태를 관찰해야 합니다. 스케일 다운 중 다양한 Pod 상태에 대한 자세한 내용은 스케일 다운 중 Pod 상태를 참조하십시오.
프로세스
축소 프로세스의 상태를 확인하려면 다음을 수행합니다.
oc describe wildflyserver <name>
oc describe wildflyserver <name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - WildFlyServer.Status.Scalingdown Pod 및 WildFlyServer.Status.Replicas 필드에는 활성 및 비활성 Pod의 전체 상태가 표시됩니다.
- Scalingdown Pods 필드에는 모든 완료되지 않은 트랜잭션이 완료될 때 종료될 Pod 수가 표시됩니다.
- WildFlyServer.Status.Replicas 필드에는 실행 중인 현재 Pod 수가 표시됩니다.
- WildFlyServer.Spec.Replicas 필드에는 ACTIVE 상태의 Pod 수가 표시됩니다.
- 축소할 Pod가 없는 경우 WildFlyServer.Status.Replicas 및 WildFlyServer.Spec.Replicas 필드의 Pod 수가 동일합니다.
9.1.7.2.1. 스케일 다운 중 Pod 상태 링크 복사링크가 클립보드에 복사되었습니다!
다음 표에서는 확장 중에 다양한 Pod 상태를 설명합니다.
| Pod 상태 | 설명 |
|---|---|
| 활성 상태 | Pod는 활성 상태이며 요청을 처리합니다. |
| SCALING_DOWN_RECOVERY_INVESTIGATION | Pod를 축소하려고 합니다. 스케일 다운 프로세스는 JBoss EAP의 트랜잭션 상태에 대해 조사 중입니다. |
| SCALING_DOWN_RECOVERY_DIRTY | JBoss EAP에는 일부 불완전한 트랜잭션이 포함되어 있습니다. Pod를 정리할 때까지 종료할 수 없습니다. 트랜잭션 복구 프로세스는 JBoss EAP에서 주기적으로 실행되며 트랜잭션이 완료될 때까지 대기합니다. |
| SCALING_DOWN_CLEAN |
Pod는 트랜잭션 축소 처리로 처리되며 클러스터에서 제거되도록 |
9.1.7.3. 논리적인 결과를 사용하여 트랜잭션 중 축소 링크 복사링크가 클립보드에 복사되었습니다!
트랜잭션 결과를 알 수 없는 경우 자동 트랜잭션 복구를 수행할 수 없습니다. 그런 다음 수동으로 트랜잭션을 복구해야합니다.
사전 요구 사항
-
Pod의 상태는
SCALING_DOWN_RECOVERY_DIRTY에 있습니다.
프로세스
- CLI를 사용하여 JBoss EAP 인스턴스에 액세스합니다.
- 트랜잭션 오브젝트 저장소의 모든 추론 트랜잭션 레코드를 해결합니다. 자세한 내용은 JBoss EAP의 트랜잭션 관리에서 Recovering Heuristic Outcomes 를 참조하십시오.
Enterprise Cryostat 클라이언트 복구 폴더에서 모든 레코드를 제거합니다.
Pod enterprise Cryostat 클라이언트 복구 디렉터리에서 모든 파일을 제거합니다.
$JBOSS_HOME/standalone/data/ejb-xa-recovery oc exec <podname> rm -rf $JBOSS_HOME/standalone/data/ejb-xa-recovery
$JBOSS_HOME/standalone/data/ejb-xa-recovery oc exec <podname> rm -rf $JBOSS_HOME/standalone/data/ejb-xa-recoveryCopy to Clipboard Copied! Toggle word wrap Toggle overflow
-
Pod 상태가
SCALING_DOWN_CLEAN으로 변경되고 Pod가 종료됩니다.
9.1.7.4. 트랜잭션 로그에 JDBC 스토리지를 사용하도록 트랜잭션 하위 시스템 구성 링크 복사링크가 클립보드에 복사되었습니다!
시스템이 트랜잭션 로그 를 저장할 파일 시스템을 제공하지 않는 경우 JBoss EAP S2I 이미지를 사용하여 JDBC 개체 저장소를 구성합니다.
JBoss EAP가 부팅 가능한 JAR로 배포되면 S2I 환경 변수를 사용할 수 없습니다. 이 경우 Galleon 계층을 생성하거나 CLI 스크립트를 구성하여 필요한 구성을 변경해야 합니다.
JDBC 오브젝트 저장소는 TX_DATABASE_PREFIX_MAPPING 환경 변수를 사용하여 설정할 수 있습니다. 이 변수는 DB_SERVICE_PREFIX_MAPPING 과 동일한 구조를 갖습니다.
사전 요구 사항
- 환경 변수 값을 기반으로 데이터 소스를 생성했습니다.
-
데이터베이스와 JDBC 개체 저장소를 통해 통신하는
트랜잭션 관리자간에 일관된 데이터 읽기 및 쓰기 권한이 있어야 합니다. 자세한 내용은 JDBC 데이터 소스 구성을참조하십시오.
프로세스
S2I 환경 변수를 통해 JDBC 오브젝트 저장소를 설정하고 구성합니다.
예제
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
standalone.xml 구성 파일
oc rsh <podname> cat /opt/server/standalone/을 모두 확인할 수 있습니다.standalone.xml을 확인하여 데이터 소스 구성 및 트랜잭션 하위 시스템 구성예상 출력:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9.1.7.5. 스케일 다운 중 트랜잭션 복구 링크 복사링크가 클립보드에 복사되었습니다!
JBoss EAP 애플리케이션 서버에서 트랜잭션을 사용하여 애플리케이션을 배포할 때 클러스터 확장 중에 어떤 일이 발생하는지 이해하는 것이 중요합니다. 활성 JBoss EAP 복제본의 수를 줄이면 완료(또는 역설적)해야 하는 거래(또는 heuristic) 트랜잭션 수를 줄일 수 있습니다. 이 상황은 성공적으로 완료할 준비가 된 것으로 선언된 XA 표준의 결과입니다. 또한 XA 트랜잭션은 추론적인 결과로 완료할 수 있으며, 이를 통해 수동으로 해결해야 합니다. 이러한 트랜잭션을 관리하는 Pod(예: in-doubt 또는 heuristic 트랜잭션)를 종료하면 데이터 불일치/복지 또는 데이터 잠금이 발생할 수 있습니다.
JBoss EAP Operator는 복제본 수를 줄이기 전에 모든 트랜잭션이 완료되도록 하는 스케일다운 기능을 제공합니다. 이 기능은 Pod의 모든 트랜잭션이 완료/해결되었는지 확인하고 Operator에서 종료를 위해 Pod를 정리한 것으로 표시합니다.
자세한 내용은 WildFly Operator 사용자 가이드를 참조하십시오.
프로세스
JBoss EAP 애플리케이션 서버의 복제본 크기를 줄이려면 다음 중 하나를 수행하십시오.
복제본 크기를 패치합니다.
oc patch wildflyserver <name> -p '[{"op":"replace", "path":"/spec/replicas", "value":0}]' --type jsonoc patch wildflyserver <name> -p '[{"op":"replace", "path":"/spec/replicas", "value":0}]' --type jsonCopy to Clipboard Copied! Toggle word wrap Toggle overflow 복제본 크기를 수동으로 편집합니다.
oc edit wildflyserver <name>
oc edit wildflyserver <name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
StatefulSet 에서 복제본 크기를 직접 줄이거나 Pod를 삭제하면 적용되지 않습니다. 이러한 변경 사항은 자동으로 되돌아갑니다.
전체 JBoss EAP 서버 정의(oc delete wildflyserver <deployment_name>')를 삭제해도 트랜잭션 복구 프로세스가 시작되지 않습니다. Pod는 완료되지 않은 트랜잭션과 관계없이 종료됩니다. 데이터 불일치 없이 안전하게 배포를 제거하려면 먼저 포드 수를 0으로 축소하고 모든 포드가 종료될 때까지 기다린 다음 JBoss EAP 인스턴스를 삭제합니다.
JBoss EAP 트랜잭션 하위 시스템에서 네레이나 복구 리스너를 활성화해야 합니다. 이 기능이 없으면 특정 JBoss EAP 포드에 대한 스케일 다운 트랜잭션 복구 처리가 건너뜁니다.
9.1.7.6. scaleDown 프로세스 링크 복사링크가 클립보드에 복사되었습니다!
스케일다운 프로세스가 시작되면 Pod 상태 oc get pod <pod_name>이 여전히 Running 으로 표시됩니다. 이 상태에서 Operator를 사용하면 Pod가 이를 대상으로 하는 원격 migration 호출을 포함하여 완료되지 않은 모든 트랜잭션을 완료할 수 있습니다. 스케일 다운 프로세스를 모니터링하려면 JBoss EAP 인스턴스의 상태를 모니터링할 수 있습니다. oc describe wildflyserver <name>을 사용하여 Pod 상태를 확인합니다.
| 이름 | 설명 |
|---|---|
| 활성 상태 | Pod는 요청을 적극적으로 처리합니다. |
| SCALING_DOWN_RECOVERY_INVESTIGATION | Pod는 라이프사이클이 성공적으로 완료되지 않은 트랜잭션이 있는지 확인하기 위해 조사 중입니다. |
| SCALING_DOWN_RECOVERY_PROCESSING | 로그 저장소에는 in-doubt 트랜잭션이 있습니다. 이러한 트랜잭션이 완료되거나 정리될 때까지 Pod를 종료할 수 없습니다. |
| SCALING_DOWN_RECOVERY_HEURISTICS | 로그 저장소에는 heuristic transactions이 있습니다. 이러한 트랜잭션이 수동으로 해결되거나 정리될 때까지 Pod를 종료할 수 없습니다. |
| SCALING_DOWN_CLEAN | Pod는 트랜잭션 축소 프로세스를 완료했으며 클러스터에서 제거될 수 있도록 정리되어 있습니다. |
9.1.7.7. 스케일 다운 중 트랜잭션 복구 비활성화 링크 복사링크가 클립보드에 복사되었습니다!
스케일 다운 중에 트랜잭션 복구를 비활성화하려면 WildFlyServerSpec.DeactivateTransactionRecovery 속성을 true로 구성할 수 있습니다(기본적으로 false로 설정됨). DeactivateTransactionRecovery 를 활성화하면 분산 트랜잭션을 사용할 때 데이터 불일치 또는 손실을 초래할 수 있습니다.
- heuristic Transactions
XA 트랜잭션의 결과는
커밋,롤백또는추론일 수 있습니다. 후자의 결과는 분산 거래의 일부 참가자가 2 단계 프로토콜의 첫 번째 단계의 결과에 따라 완료되지 않았다는 것을 인정하는 것입니다 ( XA 트랜잭션을 완료하는 데 사용됩니다). 그 결과, 추론 트랜잭션은 정확한 결과를 적용하기 위해 수동 개입이 필요합니다(처음 단계에서 모든 참여자에게 트랜잭션 코디네이터가 적용됨).JBoss EAP 포드에서 heuristic 트랜잭션을 처리하는 경우 해당 Pod는
SCALING_DOWN_RECOVERY_HEURISTICS로 레이블이 지정됩니다. 관리자는 특정 JBoss EAP 포드에 수동으로 연결하고(jboss-cli를 사용하여) 추론 트랜잭션을 수동으로 확인해야 합니다. 트랜잭션 오브젝트 저장소에서 이러한 모든 레코드가 해결/제거되면 Operator는 Pod에SCALING_DOWN_CLEAN으로 레이블을 지정하고 Pod가 종료됩니다.- StatefulSet 동작
-
StatefulSet은 Pod 순서에 따라 안정적인 네트워크 호스트 이름을 보장합니다. Pod의 이름은 정의된 순서로 지정됩니다. pod-0 전에 pod-1을 종료해야 합니다. pod-1이SCALING_DOWN_RECOVERY_HEURISTICS에 있고 pod-0이SCALING_DOWN_CLEAN에 있는 경우 pod-0은 pod-1이 종료될 때까지 해당 상태로 linger됩니다. Pod가SCALING_DOWN_CLEAN에 있더라도 새 요청을 받지 않고 유휴 상태로 유지됩니다.
9.1.8. 수평 Pod 자동 스케일러 HPA를 사용하여 Pod 자동 스케일링 링크 복사링크가 클립보드에 복사되었습니다!
EAP Operator를 사용하면 수평 Pod 자동 스케일러 HPA를 사용하여 해당 EAP 애플리케이션에 속하는 Pod에서 수집한 메트릭을 기반으로 EAP 애플리케이션의 규모를 자동으로 늘리거나 줄일 수 있습니다.
HPA를 사용하면 Pod를 축소할 때 트랜잭션 복구가 계속 처리됩니다.
프로세스
리소스를 구성합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 중요자동 스케일링이 예상대로 작동하려면 Pod에서 컨테이너의 리소스 제한 및 요청을 지정해야 합니다.
Horizontal Pod 자동 스케일러를 생성합니다.
oc autoscale wildflyserver/eap-helloworld --cpu-percent=50 --min=1 --max=10
oc autoscale wildflyserver/eap-helloworld --cpu-percent=50 --min=1 --max=10Copy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
- 복제본을 확인하여 HPA 동작을 확인할 수 있습니다. 워크로드 증가 또는 감소에 따라 복제본 수가 증가 또는 감소합니다.
9.1.9. Jarkarta Enterprise beans Remoting on OpenShift 링크 복사링크가 클립보드에 복사되었습니다!
9.1.9.1. Jakarta Enterprise Cryostats remoting on openShift 링크 복사링크가 클립보드에 복사되었습니다!
JBoss EAP가 OpenShift의 다른 JBoss EAP 클러스터 간에 엔터프라이즈급 remoting 호출을 올바르게 사용하려면 OpenShift에서 엔터프라이즈 empty 원격 구성 옵션을 이해해야 합니다.
OpenShift에 배포할 때 EAP Operator 사용을 고려하십시오. EAP Operator는 엔터프라이즈 빈 원격 설정 및 트랜잭션 복구 처리를 적절하게 처리하기 위해 StatefulSet 을 사용합니다. StatefulSet 은 Pod를 다시 시작한 후에도 영구 스토리지 및 네트워크 호스트 이름 안정성을 보장합니다.
트랜잭션 전파를 통한 엔터프라이즈VLAN 원격 호출을 사용하여 JBoss EAP 인스턴스에 연결할 때 네트워크 호스트 이름 안정성이 필요합니다. 포드가 다시 시작되는 경우에도 동일한 호스트 이름으로 JBoss EAP 인스턴스에 연결할 수 있어야 합니다. 상태 저장 구성 요소인 트랜잭션 관리자는 지속된 트랜잭션 데이터를 특정 JBoss EAP 인스턴스에 바인딩합니다. 트랜잭션 로그는 특정 JBoss EAP 인스턴스에 바인딩되므로 동일한 인스턴스에서 완료해야 합니다.
JDBC 트랜잭션 로그 저장소를 사용할 때 데이터 손실을 방지하려면 데이터베이스에서 데이터 일치 읽기 및 쓰기를 제공하는지 확인합니다. 데이터베이스가 여러 인스턴스로 수평으로 확장될 때 일관된 데이터 읽기 및 쓰기가 중요합니다.
enterprise Cryostat 원격 호출자에는 원격 호출을 구성하는 두 가지 옵션이 있습니다.
- 원격 아웃바운드 연결을 정의합니다.
- 원격 서버에서 8080에 대해 프로그래밍 방식의 JNDI 조회를 사용합니다. 자세한 내용은 원격 자카르타 Enterprise Cryostat 클라이언트 사용을 참조하십시오.
엔터프라이즈 빈 원격 호출 구성 방법에 따라 대상 노드의 주소를 나타내는 값을 재구성해야 합니다.
원격 호출의 대상 엔터프라이즈 빈 이름은 첫 번째 포드의 DNS 주소여야 합니다.
StatefulSet 동작은 Pod의 순서에 따라 다릅니다. Pod의 이름은 사전 정의된 순서로 지정됩니다. 예를 들어 애플리케이션을 3개의 복제본으로 스케일링하는 경우 Pod에 name -server-0 , Cryostat-server -1 , Cryostat 와 같은 이름이 있습니다.
-server -2
EAP Operator는 특정 DNS 호스트 이름이 포드에 할당되도록 하는 헤드리스 서비스도 사용합니다. 애플리케이션에서 EAP Operator를 사용하는 경우 헤드리스 서비스가 이름(예: Cryostat -server-headless )으로 생성됩니다. 이 경우 첫 번째 Pod의 DNS 이름은 Cryostat -server-0.eap-server-headless 입니다.
hostname -server-0.eap-server-headless 를 사용하면 엔터프라이즈 콩 호출이 클러스터에 연결된 모든 EAP 인스턴스에 도달할 수 있습니다. 부트스트랩 연결은 다음 단계로 EAP 클러스터의 구조를 수집하는 Jakarta Enterprise Cryostats 클라이언트를 초기화하는 데 사용됩니다.
9.1.9.1.1. OpenShift에서 Jakarta Enterprise Cryostat 구성 링크 복사링크가 클립보드에 복사되었습니다!
엔터프라이즈 빈 재모팅을 위해 호출자 역할을 하는 JBoss EAP 서버를 구성해야 합니다. 대상 서버는 엔터프라이즈 빈 원격 호출을 수신할 수 있는 권한이 있는 사용자를 구성해야 합니다.
사전 요구 사항
- OpenShift에서 JBoss EAP 애플리케이션 인스턴스를 배포 및 관리하기 위해 EAP 운영자와 지원되는 OpenShift S2I 이미지를 사용했습니다.
- 클러스터링이 올바르게 설정됩니다. JBoss EAP 클러스터링에 대한 자세한 내용은 Cryostat 섹션을 참조하십시오. https://access.redhat.com/documentation/en-us/red_hat_jboss_enterprise_application_platform/8.0/html-single/using_jboss_eap_on_openshift_container_platform/index#ref_openshift-clustering_assembly_reference-information-for-openshift-container-platform
프로세스
엔터프라이즈 empty 원격 호출을 수신할 수 있는 권한을 사용하여 대상 서버에 사용자를 생성합니다.
$JBOSS_HOME/bin/add-user.sh
$JBOSS_HOME/bin/add-user.shCopy to Clipboard Copied! Toggle word wrap Toggle overflow 호출자 JBoss EAP 애플리케이션 서버를 구성합니다.
-
사용자 지정 구성 기능을 사용하여
$JBOSS_HOME/standalone/configuration에 Cryostat-config.xml파일을 만듭니다. 자세한 내용은 사용자 지정 구성 을 참조하십시오. wildfly.config.url속성을 사용하여 호출자 JBoss EAP 애플리케이션 서버를 구성합니다.JAVA_OPTS_APPEND="-Dwildfly.config.url=$JBOSS_HOME/standalone/configuration/eap-config.xml"
JAVA_OPTS_APPEND="-Dwildfly.config.url=$JBOSS_HOME/standalone/configuration/eap-config.xml"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 참고구성에 다음 예제를 사용하는 경우 구성한 사용자 이름 및 암호로 >>
PASTE_…_HERE<<를 사용자 이름 및 암호로 바꿉니다.설정 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
사용자 지정 구성 기능을 사용하여