7.5 WebLogic Server를 Verrazzano를 통해 OKE에 배포하기
Verrazzano 설치시 WebLogic Operator가 함께 설치가 됩니다. 이번 내용은 아래 문서에 있는 내용을 따라 하며 정리한 내용으로, 기존 On-Premise에서 WebLogic Server 에 배포하여 사용하는 애플리케이션을 수정없이 WebLogic Server 를 통채로 Kubernetes 환경으로 이관을 원하는 경우 사용할 수 있는 방법에 대한 내용입니다.
수행하는 절차는 아래와 같습니다.
- Step #1. WebLogic & MySQL 기반 애플리케이션을 이관한다는 가정하에 동일한 환경 및 앱을 준비
- Step #2. WDT(WebLogic Deploy Tooling)을 통해 기 사용 WebLogic Server 분석후 메타데이터로 전환
- Step #3. WIT(WebLogic Image Tool)을 통해 컨테이너 이미지 생성 및 배포 파일 생성
- Step #4. 생성한 컨테이너 이미지와 배포 파일로 Verrazzano에 WebLogic 컨테이너 생성
Step #1. WebLogic & MySQL 기반 애플리케이션을 이관한다는 가정하에 동일한 환경 및 앱을 준비
MySQL 준비
- 실제 On-Premise 환경에서는 베어메탈 또는 VM 등에 MySQL을 설치 사용하겠지만, 여기서는 데모용으로 도커 컨테이너를 사용합니다.
MySQL 이미지 다운로드
docker pull mysql:latest
도커 컨테이너 시작
사용할 username, password로 변경
export MYSQL_USER=<your-mysql-username> export MYSQL_PASSWORD=<your-mysql-password> export MYSQL_ROOT_PASSWORD=<your-mysql-rootpassword> docker run --name tododb \ -p 3306:3306 \ -e MYSQL_USER=$MYSQL_USER \ -e MYSQL_PASSWORD=$MYSQL_PASSWORD \ -e MYSQL_DATABASE=tododb \ -e MYSQL_ROOT_PASSWORD=$MYSQL_ROOT_PASSWORD \ -d mysql:latest
패스워드 정책 변경
MySQL 8.0 업그레이드후 기본 인증 방식이 변경되어 기존 클라이언트를 위해 이전 인증 방식으로 설정
MySQL CLI 클라이언트로 root로 접속, root 패스워드(your-mysql-rootpassword>) 입력
docker exec \ -it tododb mysql \ -uroot \ -p
기본 인증 방식으로 변경
ALTER USER '<your-mysql-username>'@'%' identified with mysql_native_password by '<your-mysql-password>';
WebLogic 서버 설치
Oracle WebLogic Server 12.2.1.4 요구 사항에 따라 64비트 jdk1.8.0_211 이상 다운로드 및 설치
- WebLogic Server Download 사이트에서 Oracle WebLogic Server 12.2.1.4 Generic 설치 파일 다운로드
- Java Developement Kit 사이트에서 64비트 jdk1.8.0_211 이상 다운로드 및 설치
설치
unzip fmw_12.2.1.4.0_wls_lite_Disk1_1of1.zip java -jar fmw_12.2.1.4.0_wls_lite_generic.jar
설치된 ORACLE_HOME 환경 변수 설정
export ORACLE_HOME=/home/opc/fmw/wls12c
WebLogic 도메인 생성
구성 마법사 실행
$ORACLE_HOME/oracle_common/common/bin/config.sh
기본 설정값 기준으로 tododomain 도메인을 $ORACLE_HOME/user_projects/domains/tododomain 에 생성
export DOMAIN_HOME=$ORACLE_HOME/user_projects/domains/tododomain
WebLogic Server 실행
$ORACLE_HOME/user_projects/domains/tododomain/bin/startWebLogic.sh
MySQL 도커 컨테이너용 DataSource 생성
WebLogic Admin Console, http://localhost:7001/console 에 접속
관리 콘솔 왼쪽 메뉴에서 서비스 > 데이터 소스 선택
JDBC 데이터 소스 페이지에서 **새로 만들기 ** > 일반 데이터 소스 선택
데이터 소스 생성 페이지에서 다음 정보 입력
Name: tododb JNDI Name: jdbc/ToDoDB Database Type: MySQ
다음 3번 클릭
데이터 소스 생성 페이지에서 다음 정보 입력
Database Name: tododb Host name: localhost Database Port: 3306 Database User Name: <your-mysql-username> Password: <your-mysql-password> Confirm Password: <your-mysql-password> Click Next.
다음 페이지에서 구성 테스트 클릭하여 접속 테스트 시행
다음 페이지로 이동하여 AdminServer로 대상 선택후 완료 클릭
샘플 애플리케이션 배포
기존에 WAS에 배포하던 일반적인 자바 애플리케이션을 가정하여 샘플 예제를 사용하여 빌드합니다.
소스 코드 복사후 빌드
- git 클라이언트, maven 클라이언트 설치 필요
git clone https://github.com/verrazzano/examples.git cd examples/todo-list/ mvn clean package
빌드후 하위 target/todo.war 가 생김
WebLogic Admin Console, http://localhost:7001/console 에 접속
관리 콘솔 왼쪽 메뉴에서 배치 선택
설치를 클릭하여 todo.war가 있는 경우 지정
다음을 클릭하고 이후는 기본값을 사용하여 앱을 배포
데이터 초기화
- http://localhost:7001/todo/rest/items/init 을 브라우저로 접속
- MySQL 도커 컨테이너와 연결되어 데이터 초기화 성공하면 ToDos table initialized. 응답 메시지 확인됨
애플리케이션 접속
http://localhost:7001/todo/index.html 주소로 애플리케이션 접속하면, 정상적으로 데이터가 뜨는 것을 알 수 있습니다.
Step #2. WDT을 통해 기 사용 WebLogic Server 분석후 메타데이터로 전환
WebLogic Operator을 통해 아래 내용을 WDT Model을 통해 이관하는 방법입니다.
WDT(WebLogic Deploy Tooling) 모델 생성
WebLogic Deploy Tooling (WDT)을 아래와 같은 명령으로 다운 받아 설치 합니다.
curl -OL https://github.com/oracle/weblogic-deploy-tooling/releases/latest/download/weblogic-deploy.zip unzip weblogic-deploy.zip cd weblogic-deploy export WDT_HOME=$(pwd)
WDT에서 제공하는 discoverDomain.sh를 통해 앞서 앱을 배포한 DOMAIN_HOME을 분석하여 결과물로 메타데이터 모델을 생성합니다.
- 실행전에 export JAVA_HOME으로 jdk home을 사전에 설정해야 합니다.
mkdir v8o $WDT_HOME/bin/discoverDomain.sh \ -oracle_home $ORACLE_HOME \ -domain_home $DOMAIN_HOME \ -model_file ./v8o/wdt-model.yaml \ -archive_file ./v8o/wdt-archive.zip \ -target vz \ -output_dir v8o
실행결과
$ ls -la v8o/ total 32 drwxrwxr-x. 2 opc opc 4096 Jan 7 08:00 . drwxrwxr-x. 4 opc opc 67 Jan 7 08:00 .. -rwxr-x---. 1 opc opc 1944 Jan 7 08:00 create_k8s_secrets.sh -rw-r-----. 1 opc opc 3156 Jan 7 08:00 vz-application.yaml -rw-r-----. 1 opc opc 51 Jan 7 08:00 vz_variable.properties -rw-r-----. 1 opc opc 10671 Jan 7 08:00 wdt-archive.zip -rw-r-----. 1 opc opc 1179 Jan 7 08:00 wdt-model.yaml
- create_k8s_secrets.sh - 웹로직 관리자 정보 등을 kubernes secret으로 만들기 위한 헬프 스크립트
- vz-application.yaml - Verrazzano 애플리케이션으로 배포하기 위한 YAML이 자동으로 생성
- vz_variable.properties - Verrazzano 애플리케이션으로 배포하기 위한 변수값
- wdt-archive.zip - 앞서 배포된 ToDO List 애플리케이션을 포함한 WDT 아카이브 파일
- wdt-model.yaml - WebLogic Server 도메인에 대한 WDT model
Step #3. WebLogic Image Tool을 통해 컨테이너 이미지 생성 및 배포 파일 생성
WebLogic Image Tool을 아래와 같은 명령으로 다운 받아 설치 합니다.
curl -OL https://github.com/oracle/weblogic-image-tool/releases/latest/download/imagetool.zip unzip imagetool.zip cd imagetool export WIT_HOME=$(pwd)
WIT를 통해 컨테이너 이미지를 생성합니다. 툴을 사용하기 위해서는 앞서 다운 받은 WebLogic 설치 Zip 파일과 JDK 설치 파일이 필요합니다.
- 설치 파일이 위치한 경로를 맞게 수정하고 최종적으로 생성될 컨테이너 이미지의 태그를 원하는 값으로 수정합니다.
# The directory created previously to hold the generated scripts and models. cd v8o $WIT_HOME/bin/imagetool.sh cache addInstaller \ --path ~/stage/jdk-8u301-linux-x64.tar.gz \ --type jdk \ --version 8u301 # The installer file name may be slightly different depending on # which version of the 12.2.1.4.0 installer that you downloaded, slim or generic. $WIT_HOME/bin/imagetool.sh cache addInstaller \ --path ~/stage/fmw_12.2.1.4.0_wls_lite_Disk1_1of1.zip \ --type wls \ --version 12.2.1.4.0 $WIT_HOME/bin/imagetool.sh cache addInstaller \ --path $WDT_HOME/../weblogic-deploy.zip \ --type wdt \ --version latest # Paths for the files in this command assume that you are running it from the # v8o directory created during the `discoverDomain` step. $WIT_HOME/bin/imagetool.sh create \ --tag <region-key>.ocir.io/<tenancy-namespace>/<username>/todo:1 \ --version 12.2.1.4.0 \ --jdkVersion 8u301 \ --wdtModel ./wdt-model.yaml \ --wdtArchive ./wdt-archive.zip \ --wdtVariables ./vz_variable.properties \ --resourceTemplates=./vz-application.yaml \ --wdtModelOnly
생성된 컨테이너 이미지를 OCIR 레지스트리에 푸쉬합니다.
docker push <region-key>.ocir.io/<tenancy-namespace>/<username>/todo:1
Step #4. 생성한 컨테이너 이미지와 배포 파일로 Verrazzano에 WebLogic 컨테이너 생성
namespace 생성 및 라벨 달기
단일 클러스터 기준 다음과 같이 실행합니다.
kubectl create namespace tododomain kubectl label namespace tododomain verrazzano-managed=true istio-injection=enabled
Secret 생성
WDT 실행으로 만들어지 헬프 스크립트(v8o/create_k8s_secrets.sh)로 secret을 만듭니다.
아래 username과 password를 원하는 값으로 변경합니다.
- weblogic 관리자 이름, 암호
- ToDo 애플리케이션이 사용할 MySQL DB 유저 이름, 암호
- 여기서 만들어지는 secret으로 OKE에 배포될 MySQL도 바라보게 해야 합니다. 이후 배포되는 예제는 사전에 그렇게 설정되어 있습니다.
# Update <user> and <password> for weblogic-credentials create_paired_k8s_secret weblogic-credentials <user> <password> # Update <user> and <password> for jdbc-tododb create_paired_k8s_secret jdbc-tododb tododb <password> # Update <password> used to encrypt model and domain hashes # This secret is only required for model-in-image deployments create_k8s_secret runtime-encryption-secret <password>
스크립트를 실행합니다.
- 기본적으로 도메인 이름(tododomain)의 namespace에 생성됩니다. create_k8s_secrets.sh 설정 참고
$ ./create_k8s_secrets.sh secret/tododomain-weblogic-credentials created secret/tododomain-weblogic-credentials labeled secret/tododomain-jdbc-tododb created secret/tododomain-jdbc-tododb labeled secret/tododomain-runtime-encryption-secret created secret/tododomain-runtime-encryption-secret labeled $ kubectl get secret -n tododomain NAME TYPE DATA AGE default-token-snckl kubernetes.io/service-account-token 3 7m58s tododomain-jdbc-tododb Opaque 2 93s tododomain-runtime-encryption-secret Opaque 1 83s tododomain-weblogic-credentials Opaque 2 103s
OCIR에서 이미지를 가져오기 위한 imagePullSecret을 만듭니다. v8o/vz-application.yaml을 보면 tododomain-registry-credentials으로 사용하고 있습니다. 동일한 이름으로 secret을 생성합니다.
kubectl create secret docker-registry tododomain-registry-credentials \ --docker-server=<region-key>.ocir.io \ --docker-email=your.name@example.com \ --docker-username=<tenancy-namespace>/<username> \ --docker-password='<AUTH_TOKEN>' \ --namespace=tododomain
Verrazzano에 애플리케이션 배포
배포되는 예제 애플리케이션은 MySQL DB를 저장소로 사용하고 있습니다. OKE에 이관된 WebLogic Server 위에 애플리케이션도 구동을 위해서는 MySQL DB가 필요합니다. 문서 예제에서는 MySQL DB를 Verrazzano Component로 배포하고 있으며, 해당 Component를 사용하도록 v8o/vz-application.yaml에서 Data Source 주소를 변경하고 있습니다. 이 배포되는 MySQL DB Component가 배포시 앞서 만들 jdbc-tododb secret을 사용합니다.
MySQL Component 배포
mysql-oam.yaml 파일을 다운로드 받습니다.
아래와 같이 다운로드 받은 YAML 파일을 배포합니다.
[opc@bastion-host v8o (⎈ |managed-cluster-1:default)]$ kubectl apply -f mysql-oam.yaml component.core.oam.dev/todo-mysql-service created component.core.oam.dev/todo-mysql-deployment created component.core.oam.dev/todo-mysql-configmap created [opc@bastion-host v8o (⎈ |managed-cluster-1:default)]$ kubectl get component -n tododomain NAME WORKLOAD-KIND AGE todo-mysql-configmap ConfigMap 13s todo-mysql-deployment Deployment 13s todo-mysql-service Service 13s
Verrazzano 배포용 application configuration설정 업데이트
v8o/vz-application.yaml에 component 3개 추가
apiVersion: core.oam.dev/v1alpha2 kind: ApplicationConfiguration metadata: name: tododomain-appconf ... spec: components: - componentName: tododomain-domain ... - componentName: tododomain-configmap - componentName: todo-mysql-service - componentName: todo-mysql-deployment - componentName: todo-mysql-configmap
v8o/vz-application.yaml에 Data Source의 URL 업데이트
apiVersion: core.oam.dev/v1alpha2 kind: Component metadata: name: tododomain-configmap ... spec: workload: ... data: wdt_jdbc.yaml: | resources: JDBCSystemResource: 'tododb': JdbcResource: JDBCDriverParams: # This is the URL of the database used by the WebLogic Server application URL: "jdbc:mysql://mysql.tododomain.svc.cluster.local:3306/tododb"
애플리케이션(ToDo 애플리케이션 + MySQL) 배포
애플리케이션을 Verrazzano가 설치된 OKE에 배포합니다.
$ kubectl apply -f vz-application.yaml applicationconfiguration.core.oam.dev/tododomain-appconf created component.core.oam.dev/tododomain-domain created component.core.oam.dev/tododomain-configmap created
tododomain-appconf 애플리케이션이 배포되고 VerrazzanoWebLogicWorkload 유형의 tododomain-domain이 배포됩니다.
#v8o/vz-application.yaml 참고 ... --- apiVersion: core.oam.dev/v1alpha2 kind: Component metadata: name: tododomain-domain namespace: tododomain spec: workload: apiVersion: oam.verrazzano.io/v1alpha1 kind: VerrazzanoWebLogicWorkload ...
배포가 완료되고 POD가 기동됩니다.
$ kubectl get pod -n tododomain NAME READY STATUS RESTARTS AGE mysql-7bfb67d9f8-gn4qc 2/2 Running 0 5m35s tododomain-adminserver 4/4 Running 0 3m16s
istio상의 애플리케이션 주소를 확인합니다.
kubectl get gateway tododomain-tododomain-appconf-gw \ -n tododomain \ -o jsonpath={.spec.servers[0].hosts[0]}; echo
결과 예시
$ kubectl get gateway tododomain-tododomain-appconf-gw \ > -n tododomain \ > -o jsonpath={.spec.servers[0].hosts[0]}; echo tododomain-appconf.tododomain.thekoguryo.ml
/todo를 추가하여 애플리케이션에 접속할 수 있습니다.
On-Premise와 동일하게 데이터 초기화하여 MySQL DB Component와 연결되어 데이터가 정상 입력되는 것을 확인할 수 있습니다.
https://tododomain-appconf.tododomain.thekoguryo.ml/todo/rest/items/init
WebLogic Admin Console 접속
기본 배포되면 애플리케이션만 istio ingress에 등록되어 있어, WebLogic Admin Console은 포트 포워딩을 통해 접속합니다.
kubectl port-forward pods/tododomain-adminserver 7001:7001 -n tododomain
다만 포트 포워딩 에러가 나는 경우, 아래와 같이 ingress에 노출하여 외부에서 접속하게 추가할 수도 있습니다. 운영에서는 Public IP로 접근은 추천하지 않습니다.
vz-application.yaml을 아래와 같이 - path: “/console” 포함 2줄을 추가하고 다시 배포(kubectl apply -f vz-application.yaml)합니다.
... apiVersion: core.oam.dev/v1alpha2 kind: ApplicationConfiguration metadata: name: tododomain-appconf ... spec: components: - componentName: tododomain-domain traits: - trait: ... - trait: apiVersion: oam.verrazzano.io/v1alpha1 kind: IngressTrait spec: rules: - paths: # application todo - path: "/todo" pathType: Prefix - path: "/console" pathType: Prefix ...
이전 주소에서 /todo 대신 /console로 접속하고 v8o/create_k8s_secrets.sh 에서 입력한 WebLogic 관리자 이름, 암호를 사용합니다.
모니터링
로그 모니터링(Elasticsearch / Kibana)
Verrazzano 콘솔에서 Kibana 링크를 클릭합니다. SSO 구성이 되어 추가 로그인은 필요없습니다.
단일 클러스터와 배포시와 동일한 방법으로 verrazzano-namespace-hello-helidon 네임스페이스로 인덱스 패턴을 생성합니다.
kubectl로 조회한 컨테이너 로그가 Kibana에서 생성한 인덱스 패턴에 대해 수집된 로그, 대상 namespace 상의 전체 수집된 로그가 보입니다.
로그 조회
$ kubectl logs tododomain-adminserver -n tododomain -c weblogic-server -f ... <Jan 7, 2022 9:21:58,416 AM UTC> <Notice> <WebLogicServer> <BEA-000331> <Started the WebLogic Server Administration Server "AdminServer" for domain "tododomain" running in development mode.> <Jan 7, 2022 9:21:58,416 AM UTC> <Notice> <Server> <BEA-002613> <Channel "Default" is now listening on 10.244.1.15:7001 for protocols iiop, t3, ldap, snmp, http.> <Jan 7, 2022 9:21:58,416 AM UTC> <Notice> <Server> <BEA-002613> <Channel "http-probe" is now listening on 127.0.0.1:8888 for protocols http.> <Jan 7, 2022 9:21:58,416 AM UTC> <Notice> <Server> <BEA-002613> <Channel "http-probe-ext" is now listening on 10.244.1.15:8888 for protocols http.> <Jan 7, 2022 9:21:58,417 AM UTC> <Notice> <Server> <BEA-002613> <Channel "Default" is now listening on 10.244.1.15:7001 for protocols iiop, t3, ldap, snmp, http.> <Jan 7, 2022 9:21:58,417 AM UTC> <Notice> <Server> <BEA-002613> <Channel "http-probe" is now listening on 127.0.0.1:8888 for protocols http.> <Jan 7, 2022 9:21:58,417 AM UTC> <Notice> <Server> <BEA-002613> <Channel "http-probe-ext" is now listening on 10.244.1.15:8888 for protocols http.> <Jan 7, 2022 9:21:58,428 AM UTC> <Notice> <WebLogicServer> <BEA-000360> <The server started in RUNNING mode.> Successfully started server AdminServer ... ...
Kibana
메트릭 모니터링(Prometheus / Grafana)
Verrazzano 콘솔에서 Grafana 링크를 클릭합니다. SSO 구성이 되어 추가 로그인은 필요없습니다.
기본 제공하고 있는 대쉬보드 중에 WebLogic Server 대쉬보드를 선택합니다.
기본 제공하는 WebLogic Server 대쉬보드를 통해 Verrazzano가 관리하는 모든 클러스터 상에 있는 WebLogic 기반 컨테이너의 상태를 모니터링 할 수 있습니다.
이 글은 개인으로서, 개인의 시간을 할애하여 작성된 글입니다. 글의 내용에 오류가 있을 수 있으며, 글 속의 의견은 개인적인 의견입니다.