AKS(Azure Kubernetes Service) 클러스터에서 WebLogic Server를 사용하여 Java 애플리케이션 배포

이 문서에서는 다음을 수행하는 방법을 보여줍니다.

  • Oracle WLS(WebLogic Server)에서 Java, Java EE 또는 Jakarta EE를 실행합니다.
  • Azure Marketplace 제품을 사용하여 WLS 클러스터를 구축합니다.
  • WDT(WebLogic Deploy Tooling) 모델 및 애플리케이션을 제공하는 보조 이미지 역할을 하는 애플리케이션 Docker 이미지를 빌드합니다.
  • Microsoft Azure SQL에 연결하여 AKS의 기존 WLS 클러스터에 컨테이너화된 애플리케이션을 배포합니다.

이 문서에서는 WLS용 Azure Marketplace 제품을 사용하여 AKS로의 전환을 가속화합니다. 이 제품은 다음 리소스를 비롯한 여러 Azure 리소스를 자동으로 프로비전합니다.

  • Azure Container Registry 인스턴스
  • AKS 클러스터
  • Azure AGIC(App Gateway 수신 컨트롤러) 인스턴스
  • WebLogic Operator
  • WebLogic 런타임을 포함한 컨테이너 이미지
  • 애플리케이션이 없는 WLS 클러스터

그런 다음, 이 문서에서는 기존 WLS 클러스터를 업데이트하는 보조 이미지를 단계별로 빌드하는 방법을 소개합니다. 보조 이미지는 애플리케이션 및 WDT 모델을 제공합니다.

전체 자동화를 위해 애플리케이션을 선택하고 제품 배포 전에 Azure Portal에서 데이터 원본 연결을 구성할 수 있습니다. Azure Portal에서 이 제안을 볼 수 있습니다.

Azure Kubernetes Service에서 WebLogic Server를 설정하는 단계별 지침은 Azure Kubernetes Service에서 Oracle 공식 설명서를 참조하세요.

필수 조건

  • Azure를 구독하고 있지 않다면 시작하기 전에 Azure 체험 계정을 만듭니다.
  • 로그인하고 이 문서를 완료하는 데 사용하는 Azure ID에 현재 구독의 소유자 역할 또는 현재 구독의 기여자사용자 액세스 관리자 역할이 있는지 확인합니다. Azure 역할의 개요는 Azure RBAC(역할 기반 액세스 제어)란?을 참조하세요. AKS에서 WLS에 필요한 특정 역할에 대한 자세한 내용은 Azure 기본 제공 역할을 참조하세요.
  • Oracle SSO(Single Sign-On) 계정의 자격 증명이 있어야 합니다. 계정을 만들려면 Oracle 계정 만들기를 참조하세요.
  • WLS 사용 조건에 동의합니다.
    • Oracle Container Registry를 방문하여 로그인합니다.
    • 지원 자격이 있는 경우 미들웨어를 선택한 다음, weblogic_cpu를 검색하여 선택합니다.
    • Oracle 지원 자격이 없는 경우 미들웨어를 선택한 다음, weblogic을 검색하여 선택합니다.

      참고 항목

      프로덕션으로 전환하기 전에 Oracle에서 지원 자격을 얻으세요. 이렇게 하지 않으면 중요한 보안 결함에 대한 패치가 적용되지 않은 안전하지 않은 이미지를 실행하게 됩니다. Oracle의 중요한 패치 업데이트에 대한 자세한 내용은 Oracle의 중요 패치 업데이트, 보안 경고 및 공지를 참조하세요.

    • 사용권 계약에 동의합니다.
  • Unix 계열 운영 체제(예: Ubuntu, Azure Linux 또는 macOS, Linux용 Windows 하위 시스템)가 설치된 로컬 컴퓨터를 준비합니다.
    • Azure CLI az --version을 사용하여 az가 작동하는지 테스트합니다. 이 문서는 버전 2.55.1로 테스트되었습니다.
    • Docker. 이 문서는 Docker 버전 20.10.7로 테스트되었습니다. docker info를 사용하여 Docker 디먼이 실행 중인지 테스트합니다.
    • kubectl. kubectl version을 사용하여 kubectl이 작동하는지 테스트합니다. 이 문서는 버전 v1.21.2로 테스트되었습니다.
    • 실행하려는 WLS 버전과 호환되는 Java JDK. 이 문서에서는 JDK 11을 사용하는 WLS 버전을 설치하도록 지시합니다. OpenJDK의 Microsoft Build를 설치하는 것이 좋습니다. 명령을 실행하는 셸에서 JAVA_HOME 환경 변수가 올바르게 설정되었는지 확인합니다.
    • Maven 3.5.0 이상.
    • zip/unzip 유틸리티가 설치되어 있는지 확인합니다. zip/unzip -v를 사용하여 zip/unzip이 작동하는지 테스트합니다.
  • Docker와 관련된 단계를 제외한 이 문서의 모든 단계는 Azure Cloud Shell에서도 실행할 수 있습니다. Azure Cloud Shell에 대해 자세히 알아보려면 Azure Cloud Shell이란?을 참조하세요.

AKS에 WLS 배포

이 섹션의 단계에서는 가능한 가장 간단한 방법으로 AKS에 WLS를 배포하도록 안내합니다. AKS의 WLS는 광범위하고 깊이 있는 Azure 통합의 선택을 제공합니다. 자세한 내용은 Azure Kubernetes Service에서 Oracle WebLogic Server를 실행하는 솔루션에는 무엇이 있습니까?를 참조하세요.

다음 단계는 AKS 제품에서 WLS를 찾고 기본 사항 창을 작성하는 방법을 보여 줍니다.

  1. Azure Portal 위쪽의 검색 창에서 weblogic을 입력합니다. 자동 제안된 검색 결과의 Marketplace 섹션에서 WebLogic Server on AKS를 선택합니다.

    검색 결과의 WLS를 보여 주는 Azure Portal의 스크린샷

    WebLogic Server on AKS 제품으로 직접 이동할 수도 있습니다.

  2. 제품 페이지에서 만들기를 선택합니다.

  3. 기본 사항 창에서 구독 필드에 표시된 값이 Azure에 로그인하는 데 사용한 값과 동일한지 확인합니다. 역할이 필수 조건 섹션에 나열되어 있는지 확인합니다.

    WebLogic Server on AKS를 보여 주는 Azure Portal의 스크린샷

  4. 빈 리소스 그룹에 제품을 배포해야 합니다. 리소스 그룹 필드에서 새로 만들기를 선택하고 리소스 그룹의 이름을 입력합니다. 리소스 그룹은 구독 내에서 고유해야 하므로 고유한 이름을 선택합니다. 이름이 고유하도록 하는 쉬운 방법은 이니셜, 오늘 날짜, 일부 식별자의 조합을 사용하는 것입니다(예: ejb0723wls).

  5. 인스턴스 세부 정보에서 배포 지역을 선택합니다. AKS를 사용할 수 있는 Azure 지역 목록은 AKS 지역 가용성을 참조하세요.

  6. WebLogic 자격 증명에서 WebLogic 관리자 사용자 이름의 기본값을 그대로 둡니다.

  7. WebLogic 관리자 암호wlsAksCluster2022를 입력합니다. 확인 및 WebLogic 모델 암호화용 암호 필드에 동일한 값을 사용합니다.

  8. 기본 창의 아래쪽으로 스크롤하여 설명서, 커뮤니티 지원, 문제 보고 방법에 대한 유용한 링크를 확인합니다.

  9. 다음을 선택합니다.

다음 단계에서는 배포 프로세스를 시작하는 방법을 보여 줍니다.

  1. Oracle SSO(Single Sign-On) 계정 제공 레이블이 지정된 섹션으로 스크롤합니다. 사전 조건의 Oracle SSO 자격 증명을 입력합니다.

    구성한 SSO 창을 보여 주는 Azure Portal의 스크린샷

  2. 계속 진행하기 전에 Oracle 표준 사용 약관 및 제한 사항에 동의해야 합니다.로 시작하는 정보 상자의 단계를 따릅니다.

  3. Oracle SSO 계정에 Oracle 지원 자격이 있는지 여부에 따라 WebLogic Server 이미지 유형 선택에 대해 적절한 옵션을 선택합니다. 계정에 지원 자격이 있는 경우 패치된 WebLogic Server 이미지를 선택합니다. 그렇지 않으면 일반 WebLogic Server 이미지를 선택합니다.

  4. WebLogic Server의 원하는 조합 선택...의 값을 기본값 상태로 둡니다. 다양한 WLS, JDK 및 OS 버전 중에서 선택할 수 있습니다.

  5. 애플리케이션 섹션의 애플리케이션 배포? 옆에서 아니요를 선택합니다.

다음 단계에서는 WLS 관리 콘솔 및 샘플 앱이 Application Gateway 수신 추가 기능이 기본 제공된 상태로 공용 인터넷에 공개되도록 합니다. 자세한 내용은 Application Gateway 수신 컨트롤러란?을 참조하세요.

Azure Kubernetes Service에서 Oracle WebLogic Server 만들기 페이지의 가능한 가장 간단한 부하 분산 장치 구성을 보여 주는 Azure Portal의 스크린샷

  1. 다음을 선택하여 TLS/SSL 창을 확인합니다.

  2. 다음을 선택하여 부하 분산 창을 확인합니다.

  3. 부하 분산 옵션 옆에 있는 Application Gateway 수신 컨트롤러를 선택합니다.

  4. Application Gateway 수신 컨트롤러 아래에 가상 네트워크서브넷에 대한 기본값으로 미리 채워진 모든 필드가 표시됩니다. 기본값을 그대로 둡니다.

  5. 관리 콘솔에 대한 수신 만들기에서 를 선택합니다.

    Azure Kubernetes Service에서 Oracle WebLogic Server 만들기 페이지의 Application Gateway 수신 컨트롤러 구성을 보여 주는 Azure Portal의 스크린샷

  6. 다른 필드는 기본값을 그대로 둡니다.

  7. 검토 + 만들기를 선택합니다. 유효성 검사가 실패하지 않는지 확인합니다. 실패하면 유효성 검사 문제를 해결한 다음, 검토 + 만들기를 선택합니다.

  8. 만들기를 실행합니다.

  9. 배포 진행 중 페이지에서 배포 진행률을 추적합니다.

선택한 지역의 네트워크 조건 및 기타 작업에 따라 배포를 완료하는 데 최대 50분이 걸릴 수 있습니다.

기다리는 동안 Azure SQL Database 만들기 섹션의 단계를 수행할 수 있습니다. 데이터베이스 만들기를 마치면 이 섹션으로 돌아옵니다.

배포 출력 검사

이 섹션의 단계를 사용하여 배포가 성공적으로 완료되었는지 확인합니다.

배포 진행 중 페이지에서 이동한 경우 다음 단계에서는 해당 페이지로 돌아가는 방법을 보여 줍니다. 배포가 완료됨이라는 페이지가 계속 표시되면 다음 스크린샷 이후에 표시된 5단계로 건너뛸 수 있습니다.

  1. Azure Portal 페이지의 모서리에서 햄버거 메뉴, 리소스 그룹을 차례로 선택합니다.

  2. 모든 필드에 대해 필터링 텍스트가 있는 상자에 이전에 만든 리소스 그룹의 처음 몇 글자를 입력합니다. 권장 규칙을 따른 경우 이니셜을 입력한 다음 적절한 리소스 그룹을 선택합니다.

  3. 탐색 창의 설정 섹션에서 배포를 선택합니다. 이 리소스 그룹에 대한 배포 순서가 지정된 목록이 표시되며, 가장 최근 배포가 먼저 표시됩니다.

  4. 이 목록에서 가장 오래된 항목으로 스크롤합니다. 이 항목은 이전 섹션에서 시작한 배포에 해당합니다. 다음 스크린샷과 같이 가장 오래된 배포를 선택합니다.

    리소스 그룹 배포 목록을 보여 주는 Azure Portal의 스크린샷

  5. 탐색 창에서 출력을 선택합니다. 이 목록에는 배포의 출력 값이 표시됩니다. 출력에 유용한 정보가 포함되어 있습니다.

  6. adminConsoleExternalUrl 값은 이 AKS 클러스터의 WLS 관리 콘솔에 대한 정규화된 공용 인터넷 표시 링크입니다. 필드 값 옆의 복사 아이콘을 선택하여 링크를 클립보드에 복사합니다. 나중에 사용할 수 있도록 이 값을 따로 저장합니다.

  7. clusterExternalUrl 값은 이 AKS 클러스터의 WLS에 배포된 샘플 앱에 대한 정규화된 공용 인터넷 표시 링크입니다. 필드 값 옆의 복사 아이콘을 선택하여 링크를 클립보드에 복사합니다. 나중에 사용할 수 있도록 이 값을 따로 저장합니다.

  8. shellCmdtoOutputWlsImageModelYaml 값은 컨테이너 이미지에서 빌드된 WDT 모델의 base64 문자열입니다. 나중에 사용할 수 있도록 이 값을 따로 저장합니다.

  9. shellCmdtoOutputWlsImageProperties 값은 컨테이너 이미지에서 빌드된 WDT 모델 속성의 base64 문자열입니다. 나중에 사용할 수 있도록 이 값을 따로 저장합니다.

  10. shellCmdtoConnectAks 값은 이 특정 AKS 클러스터에 연결하기 위한 Azure CLI 명령입니다. 이렇게 하면 kubectl을 사용하여 클러스터를 관리할 수 있습니다.

출력의 다른 값은 이 문서의 범위를 벗어나지만 AKS의 WebLogic 사용자 가이드에 자세히 설명되어 있습니다.

Azure SQL Database 만들기

앱에서 사용할 Azure SQL Database 단일 데이터베이스를 만들려면 빠른 시작: Azure SQL Database에서 단일 데이터베이스 만들기 단계를 따릅니다. 다음 차이점을 주의 깊게 살펴봅니다.

  • 기본 사항 단계에서 리소스 그룹, 데이터베이스 이름, <server-name>.database.windows.net, 서버 관리자 로그인암호에 대한 값을 적어둡니다. 이 문서에서는 데이터베이스 리소스 그룹 값을 <db-resource-group>으로 참조하세요.

  • 네트워킹 단계에서 연결 방법공용 엔드포인트로 설정하고, Azure 서비스 및 리소스가 이 서버에 액세스하도록 허용로 설정하고, 현재 클라이언트 IP 주소 추가로 설정합니다.

    연결 방법 및 방화벽 규칙 설정이 강조 표시된 SQL Database 만들기 페이지의 네트워킹 탭을 보여 주는 Azure Portal의 스크린샷.

참고 항목

이 데이터베이스에 대해 선택한 서버리스 컴퓨팅 계층은 비활성 기간 동안 데이터베이스를 절전 모드로 전환하여 비용을 절약합니다. 앱이 시작될 때 데이터베이스가 절전 상태가 되면 샘플 앱이 실패합니다.

데이터베이스의 절전 모드를 강제로 해제하려면 쿼리 편집기를 사용하여 쿼리를 실행하면 됩니다. 데이터베이스 쿼리의 단계를 따릅니다. 다음은 쿼리 예입니다. SELECT * FROM COFFEE;

  1. 샘플 애플리케이션의 스키마를 만듭니다. 데이터베이스 쿼리에 따라 쿼리 편집기 창을 엽니다. 다음 쿼리를 입력하고 실행합니다.

    CREATE TABLE COFFEE (ID NUMERIC(19) NOT NULL, NAME VARCHAR(255) NULL, PRICE FLOAT(32) NULL, PRIMARY KEY (ID));
    CREATE TABLE SEQUENCE (SEQ_NAME VARCHAR(50) NOT NULL, SEQ_COUNT NUMERIC(28) NULL, PRIMARY KEY (SEQ_NAME));
    INSERT INTO SEQUENCE VALUES ('SEQ_GEN',0);
    

    성공적으로 실행되면 쿼리 성공: 영향을 받은 행 수: 0 메시지가 표시됩니다. 이 메시지가 표시되지 않으면 문제를 해결한 후 계속 진행합니다.

데이터베이스, 테이블, AKS 클러스터 및 WLS 클러스터가 만들어집니다. 원하는 경우 브라우저를 열고 adminConsoleExternalUrl 주소로 이동하여 관리 콘솔을 살펴볼 수 있습니다. AKS의 WLS 배포 중에 입력한 값으로 로그인합니다.

WebLogic 애플리케이션을 호스트하기 위해 AKS를 계속 준비할 수 있습니다.

응용 프로그램 예제 구성 및 배포

이 제품은 WLS cluster via 이미지의 모델을 통해 WLS 클러스터를 프로비전합니다. 현재, WLS 클러스터에는 배포된 애플리케이션이 없습니다.

이 섹션에서는 보조 이미지를 통해 샘플 애플리케이션을 배포하여 WLS 클러스터를 업데이트합니다.

애플리케이션 체크 아웃

이 섹션에서는 이 가이드를 위해 샘플 코드를 복제합니다. 이 샘플은 GitHub에서 javaee/weblogic-cafe/ 폴더의 weblogic-on-azure 리포지토리에 있습니다. 다음은 애플리케이션의 파일 구조입니다.

weblogic-cafe
├── pom.xml
└── src
    └── main
        ├── java
        │   └── cafe
        │       ├── model
        │       │   ├── CafeRepository.java
        │       │   └── entity
        │       │       └── Coffee.java
        │       └── web
        │           ├── rest
        │           │   └── CafeResource.java
        │           └── view
        │               └── Cafe.java
        ├── resources
        │   ├── META-INF
        │   │   └── persistence.xml
        │   └── cafe
        │       └── web
        │           ├── messages.properties
        │           └── messages_es.properties
        └── webapp
            ├── WEB-INF
            │   ├── beans.xml
            │   ├── faces-config.xml
            │   └── web.xml
            ├── index.xhtml
            └── resources
                └── components
                    └── inputPrice.xhtml

다음 명령을 사용하여 리포지토리를 복제합니다.

cd <parent-directory-to-check-out-sample-code>
export BASE_DIR=$PWD
git clone --single-branch https://github.com/microsoft/weblogic-on-azure.git --branch 20240201 $BASE_DIR/weblogic-on-azure

"분리된 HEAD" 상태에 있다는 메시지가 표시되면 이 메시지를 무시해도 안전합니다. 이는 단지 태그를 체크 아웃했음을 의미합니다.

다음 명령을 사용하여 javaee/weblogic-cafe/를 빌드합니다.

mvn clean package --file $BASE_DIR/weblogic-on-azure/javaee/weblogic-cafe/pom.xml

패키지는 성공적으로 생성되고 $BASE_DIR/weblogic-on-azure/javaee/weblogic-café/target/weblogic-cafe.war에 포함되어 있습니다. 이 패키지가 표시되지 않으면 문제를 해결한 후 계속 진행합니다.

Docker를 사용하여 보조 이미지 만들기

이 섹션의 단계에서는 보조 이미지 빌드 방법을 보여 줍니다. 이 이미지에는 다음 구성 요소가 포함됩니다.

  • 이미지의 모델 모델 파일
  • 애플리케이션
  • JDBC 드라이버 보관 파일
  • WebLogic 배포 도구 설치

보조 이미지는 앱 및 구성을 포함하는 Docker 컨테이너 이미지입니다. WebLogic Kubernetes Operator는 보조 이미지를 WebLogic Server, JDK 및 운영 체제가 포함된 AKS 클러스터의 domain.spec.image에 결합합니다. 보조 이미지에 대한 자세한 내용은 Oracle 설명서의 보조 이미지를 참조하세요.

이 섹션에는 Azure CLI 및 kubectl이 설치된 Linux 터미널이 필요합니다.

이미지를 빌드하려면 다음 단계를 사용합니다.

  1. 다음 명령을 사용하여 모델 및 애플리케이션을 스테이징할 디렉터리를 만듭니다.

    mkdir -p ${BASE_DIR}/mystaging/models
    cd ${BASE_DIR}/mystaging/models
    
  2. 배포 출력에서 저장한 shellCmdtoOutputWlsImageModelYaml 값을 복사하고, Bash 창에 붙여 넣고, 해당 명령을 실행합니다. 이 명령은 다음 예제와 비슷하게 표시됩니다.

    echo -e IyBDb3B5cmlna...Cgo= | base64 -d > model.yaml
    

    이 명령은 다음 예제와 유사한 내용이 포함된 ${BASE_DIR}/mystaging/models/model.yaml 파일을 생성합니다.

    # Copyright (c) 2020, 2021, Oracle and/or its affiliates.
    # Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl.
    
    # Based on ./kubernetes/samples/scripts/create-weblogic-domain/model-in-image/model-images/model-in-image__WLS-v1/model.10.yaml
    # in https://github.com/oracle/weblogic-kubernetes-operator.
    
    domainInfo:
      AdminUserName: "@@SECRET:__weblogic-credentials__:username@@"
      AdminPassword: "@@SECRET:__weblogic-credentials__:password@@"
      ServerStartMode: "prod"
    
    topology:
      Name: "@@ENV:CUSTOM_DOMAIN_NAME@@"
      ProductionModeEnabled: true
      AdminServerName: "admin-server"
      Cluster:
        "cluster-1":
          DynamicServers:
            ServerTemplate: "cluster-1-template"
            ServerNamePrefix: "@@ENV:MANAGED_SERVER_PREFIX@@"
            DynamicClusterSize: "@@PROP:CLUSTER_SIZE@@"
            MaxDynamicClusterSize: "@@PROP:CLUSTER_SIZE@@"
            MinDynamicClusterSize: "0"
            CalculatedListenPorts: false
      Server:
        "admin-server":
          ListenPort: 7001
      ServerTemplate:
        "cluster-1-template":
          Cluster: "cluster-1"
          ListenPort: 8001
      SecurityConfiguration:
        NodeManagerUsername: "@@SECRET:__weblogic-credentials__:username@@"
        NodeManagerPasswordEncrypted: "@@SECRET:__weblogic-credentials__:password@@"
    
    resources:
      SelfTuning:
        MinThreadsConstraint:
          SampleMinThreads:
            Target: "cluster-1"
            Count: 1
        MaxThreadsConstraint:
          SampleMaxThreads:
            Target: "cluster-1"
            Count: 10
        WorkManager:
          SampleWM:
            Target: "cluster-1"
            MinThreadsConstraint: "SampleMinThreads"
            MaxThreadsConstraint: "SampleMaxThreads"
    
  3. 비슷한 방식으로 shellCmdtoOutputWlsImageProperties 값을 복사하여 Bash 창에 붙여 넣고 해당 명령을 실행합니다. 이 명령은 다음 예제와 비슷하게 표시됩니다.

    echo -e IyBDb3B5cml...pFPTUK | base64 -d > model.properties
    

    이 명령은 다음 예제와 유사한 내용이 포함된 ${BASE_DIR}/mystaging/models/model.properties 파일을 생성합니다.

    # Copyright (c) 2021, Oracle Corporation and/or its affiliates.
    # Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl.
    
    # Based on ./kubernetes/samples/scripts/create-weblogic-domain/model-in-image/model-images/model-in-image__WLS-v1/model.10.properties
    # in https://github.com/oracle/weblogic-kubernetes-operator.
    
    CLUSTER_SIZE=5
    
  4. 다음 단계를 따라 애플리케이션 모델 파일을 만듭니다.

    1. 다음 명령을 사용하여 weblogic-cafe.war을 복사하고 wlsdeploy/applications에 저장합니다.

      mkdir -p ${BASE_DIR}/mystaging/models/wlsdeploy/applications
      cp $BASE_DIR/weblogic-on-azure/javaee/weblogic-cafe/target/weblogic-cafe.war ${BASE_DIR}/mystaging/models/wlsdeploy/applications/weblogic-cafe.war
      
    2. 다음 명령을 사용하여 표시된 내용이 포함된 애플리케이션 모델 파일을 만듭니다. 모델 파일을 ${BASE_DIR}/mystaging/models/appmodel.yaml에 저장합니다.

      cat <<EOF >appmodel.yaml
      appDeployments:
        Application:
          weblogic-cafe:
            SourcePath: 'wlsdeploy/applications/weblogic-cafe.war'
            ModuleType: ear
            Target: 'cluster-1'
      EOF
      
  5. 다음 명령을 사용하여 Microsoft SQL Server JDBC 드라이버를 다운로드하고 wlsdeploy/externalJDBCLibraries에 설치합니다.

    export DRIVER_VERSION="10.2.1.jre8"
    export MSSQL_DRIVER_URL="https://repo.maven.apache.org/maven2/com/microsoft/sqlserver/mssql-jdbc/${DRIVER_VERSION}/mssql-jdbc-${DRIVER_VERSION}.jar"
    
    mkdir ${BASE_DIR}/mystaging/models/wlsdeploy/externalJDBCLibraries
    curl -m 120 -fL ${MSSQL_DRIVER_URL} -o ${BASE_DIR}/mystaging/models/wlsdeploy/externalJDBCLibraries/mssql-jdbc-${DRIVER_VERSION}.jar
    
  6. 그런 후 다음 명령을 사용하여 표시된 내용이 포함된 데이터베이스 연결 모델 파일을 만듭니다. 모델 파일을 ${BASE_DIR}/mystaging/models/dbmodel.yaml에 저장합니다. 이 모델은 데이터베이스 사용자 이름, 암호 및 URL에 자리 표시자(비밀 sqlserver-secret)를 사용합니다. 다음 필드가 올바르게 설정되어 있는지 확인합니다. 다음 모델에서는 리소스 이름을 jdbc/WebLogicCafeDB로 지정합니다.

    Item Name 필드
    JNDI 이름 resources.JDBCSystemResource.<resource-name>.JdbcResource.JDBCDataSourceParams.JNDIName jdbc/WebLogicCafeDB
    드라이버 이름 resources.JDBCSystemResource.<resource-name>.JDBCDriverParams.DriverName com.microsoft.sqlserver.jdbc.SQLServerDriver
    데이터베이스 URL resources.JDBCSystemResource.<resource-name>.JDBCDriverParams.URL @@SECRET:sqlserver-secret:url@@
    데이터베이스 암호 resources.JDBCSystemResource.<resource-name>.JDBCDriverParams.PasswordEncrypted @@SECRET:sqlserver-secret:password@@
    데이터베이스 사용자 이름 resources.JDBCSystemResource.<resource-name>.JDBCDriverParams.Properties.user.Value '@@SECRET:sqlserver-secret:user@@'
    cat <<EOF >dbmodel.yaml
    resources:
      JDBCSystemResource:
        jdbc/WebLogicCafeDB:
          Target: 'cluster-1'
          JdbcResource:
            JDBCDataSourceParams:
              JNDIName: [
                jdbc/WebLogicCafeDB
              ]
              GlobalTransactionsProtocol: None
            JDBCDriverParams:
              DriverName: com.microsoft.sqlserver.jdbc.SQLServerDriver
              URL: '@@SECRET:sqlserver-secret:url@@'
              PasswordEncrypted: '@@SECRET:sqlserver-secret:password@@'
              Properties:
                user:
                  Value: '@@SECRET:sqlserver-secret:user@@'
            JDBCConnectionPoolParams:
              TestTableName: SQL SELECT 1
              TestConnectionsOnReserve: true
    EOF
    
  7. 다음 명령을 사용하여 애플리케이션 보관 파일을 만든 다음, 더 이상 필요하지 않은 wlsdeploy 폴더를 제거합니다.

    cd ${BASE_DIR}/mystaging/models
    zip -r archive.zip wlsdeploy
    
    rm -f -r wlsdeploy
    
  8. 다음 명령을 사용하여 스테이징 디렉터리에 WDT(WebLogic 배포 도구)를 다운로드하여 설치하고 UNIX 환경에서 사용되지 않는 weblogic-deploy/bin/*.cmd 파일을 제거합니다.

    cd ${BASE_DIR}/mystaging
    curl -m 120 -fL https://github.com/oracle/weblogic-deploy-tooling/releases/latest/download/weblogic-deploy.zip -o weblogic-deploy.zip
    
    unzip weblogic-deploy.zip -d .
    rm ./weblogic-deploy/bin/*.cmd
    
  9. 다음 명령을 사용하여 WDT 설치 관리자를 제거합니다.

    rm weblogic-deploy.zip
    
  10. 다음 명령을 사용하여 docker로 보조 이미지를 빌드합니다.

    cd ${BASE_DIR}/mystaging
    cat <<EOF >Dockerfile
    FROM busybox
    ARG AUXILIARY_IMAGE_PATH=/auxiliary
    ARG USER=oracle
    ARG USERID=1000
    ARG GROUP=root
    ENV AUXILIARY_IMAGE_PATH=\${AUXILIARY_IMAGE_PATH}
    RUN adduser -D -u \${USERID} -G \$GROUP \$USER
    # ARG expansion in COPY command's --chown is available in docker version 19.03.1+.
    # For older docker versions, change the Dockerfile to use separate COPY and 'RUN chown' commands.
    COPY --chown=\$USER:\$GROUP ./ \${AUXILIARY_IMAGE_PATH}/
    USER \$USER
    EOF
    
  11. 다음 예제와 같이 ${BASE_DIR}/mystaging/Dockerfile을 사용하여 docker buildx build 명령을 실행합니다.

    cd ${BASE_DIR}/mystaging
    docker buildx build --platform linux/amd64 --build-arg AUXILIARY_IMAGE_PATH=/auxiliary --tag model-in-image:WLS-v1 .
    

    이미지를 성공적으로 빌드하면 출력은 다음 예제와 유사하게 표시됩니다.

    [+] Building 12.0s (8/8) FINISHED                                   docker:default
    => [internal] load build definition from Dockerfile                          0.8s
    => => transferring dockerfile: 473B                                          0.0s
    => [internal] load .dockerignore                                             1.1s
    => => transferring context: 2B                                               0.0s
    => [internal] load metadata for docker.io/library/busybox:latest             5.0s
    => [1/3] FROM docker.io/library/busybox@sha256:6d9ac9237a84afe1516540f40a0f  0.0s
    => [internal] load build context                                             0.3s
    => => transferring context: 21.89kB                                          0.0s
    => CACHED [2/3] RUN adduser -D -u 1000 -G root oracle                        0.0s
    => [3/3] COPY --chown=oracle:root ./ /auxiliary/                             1.5s
    => exporting to image                                                        1.3s
    => => exporting layers                                                       1.0s
    => => writing image sha256:2477d502a19dcc0e841630ea567f50d7084782499fe3032a  0.1s
    => => naming to docker.io/library/model-in-image:WLS-v1                      0.2s
    
  12. 이미지를 성공적으로 만들면 이제 로컬 컴퓨터의 Docker 리포지토리에 포함됩니다. 다음 명령을 사용하여 이미지가 잘 만들어졌는지 확인할 수 있습니다.

    docker images model-in-image:WLS-v1
    

    이 명령은 다음 예제와 유사한 출력을 생성합니다.

    REPOSITORY       TAG       IMAGE ID       CREATED       SIZE
    model-in-image   WLS-v1    76abc1afdcc6   2 hours ago   8.61MB
    

    이미지를 만든 후에는 /auxiliary/weblogic-deploy에 WDT 실행 파일이 포함되고 /auxiliary/models에는 WDT 모델, 속성 및 보관 파일이 포함됩니다. Docker 이미지에서 다음 명령을 사용하여 이 결과를 확인합니다.

    docker run -it --rm model-in-image:WLS-v1 find /auxiliary -maxdepth 2 -type f -print
    

    이 명령은 다음 예제와 유사한 출력을 생성합니다.

    /auxiliary/models/model.properties
    /auxiliary/models/dbmodel.yaml
    /auxiliary/models/model.yaml
    /auxiliary/models/archive.zip
    /auxiliary/models/appmodel.yaml
    /auxiliary/Dockerfile
    /auxiliary/weblogic-deploy/LICENSE.txt
    /auxiliary/weblogic-deploy/VERSION.txt
    
  13. 다음 단계를 사용하여 보조 이미지를 Azure Container Registry에 푸시합니다.

    1. Azure Portal을 열고 AKS에 WSL 배포 섹션에서 프로비전한 리소스 그룹으로 이동합니다.

    2. 리소스 목록에서 Container Registry 유형의 리소스를 선택합니다.

    3. 로그인 서버 옆에 있는 값 위로 마우스를 가져가 텍스트 옆에 있는 복사 아이콘을 선택합니다.

    4. 다음 명령을 사용하여 ACR_LOGIN_SERVER 환경 변수에 값을 저장합니다.

      export ACR_LOGIN_SERVER=<value-from-clipboard>
      
    5. 다음 명령을 실행하여 이미지에 태그를 지정하고 푸시합니다. 이러한 명령을 실행하기 전에 Docker가 실행 중인지 확인합니다.

      export ACR_NAME=$(echo ${ACR_LOGIN_SERVER} | cut -d '.' -f 1)
      az acr login -n $ACR_NAME
      docker tag model-in-image:WLS-v1 $ACR_LOGIN_SERVER/wlsaks-auxiliary-image:1.0
      docker push $ACR_LOGIN_SERVER/wlsaks-auxiliary-image:1.0
      
    6. 다음 예제와 같이 az acr repository show를 실행하여 이미지가 원격 리포지토리에 성공적으로 푸시되는지 여부를 테스트할 수 있습니다.

      az acr repository show --name ${ACR_NAME} --image wlsaks-auxiliary-image:1.0
      

      이 명령은 다음 예제와 유사한 출력을 생성합니다.

      {
        "changeableAttributes": {
          "deleteEnabled": true,
          "listEnabled": true,
          "readEnabled": true,
          "writeEnabled": true
        },
        "createdTime": "2024-01-24T06:14:19.4546321Z",
        "digest": "sha256:a1befbefd0181a06c6fe00848e76f1743c1fecba2b42a975e9504ba2aaae51ea",
        "lastUpdateTime": "2024-01-24T06:14:19.4546321Z",
        "name": "1.0",
        "quarantineState": "Passed",
        "signed": false
      }
      

보조 이미지 적용

이전 단계에서는 모델 및 WDT를 포함한 보조 이미지를 만들었습니다. WLS 클러스터에 보조 이미지를 적용하기 전에 다음 단계를 사용하여 데이터 원본 URL, 사용자 이름 및 암호에 대한 비밀을 만듭니다. 이 비밀은 dbmodel.yaml에서 자리 표시자의 일부로 사용됩니다.

  1. 이전에 저장한 shellCmdtoConnectAks 값을 복사하고 Bash 창에 붙여 넣은 다음, 해당 명령을 실행하여 AKS 클러스터에 연결합니다. 이 명령은 다음 예제와 비슷하게 표시됩니다.

    az account set --subscription <subscription>; 
    az aks get-credentials \
        --resource-group <resource-group> \
        --name <name>
    

    다음 예제와 비슷한 내용이 출력됩니다. 이 출력이 표시되지 않으면 문제를 해결한 후 계속 진행합니다.

    Merged "<name>" as current context in /Users/<username>/.kube/config
    
  2. 다음 단계에 따라 다음 표에 표시된 변수의 값을 가져옵니다. 나중에 이러한 값을 사용하여 데이터 원본 연결에 대한 비밀을 만듭니다.

    변수 설명 예시
    DB_CONNECTION_STRING SQL Server의 연결 문자열 jdbc:sqlserver://sqlserverforwlsaks.database.windows.net:1433;database=wlsaksquickstart0125
    DB_USER SQL Server에 로그인하기 위한 사용자 이름 welogic@sqlserverforwlsaks
    DB_PASSWORD SQL Server에 로그인하기 위한 암호 Secret123456
    1. Azure Portal에서 데이터베이스 리소스로 이동합니다.

    2. 탐색 창의 설정에서 연결 문자열을 선택합니다.

    3. JDBC 탭을 선택합니다.

    4. 복사 아이콘을 선택하여 연결 문자열을 클립보드에 복사합니다.

    5. DB_CONNECTION_STRING의 경우 전체 연결 문자열을 사용하지만 자리 표시자 {your_password_here}을 데이터베이스 암호로 바꿉다.

    6. DB_USER의 경우 azureuser부터 ;password={your_password_here}(제외) 사이의 연결 문자열 부분을 사용합니다.

    7. DB_PASSWORD의 경우 데이터베이스를 만들 때 입력한 값을 사용합니다.

  3. 다음 명령을 사용하여 Kubernetes 비밀을 만듭니다. 이 문서에서는 데이터 원본 연결의 비밀에 비밀 이름 sqlserver-secret을 사용합니다. 다른 이름을 사용하는 경우 값이 dbmodel.yaml에 있는 값과 동일한지 확인합니다.

    다음 명령에서는 자리 표시자 예제를 이전 단계에서 설명한 값으로 바꿔 변수 DB_CONNECTION_STRING, DB_USERDB_PASSWORD를 올바르게 설정해야 합니다. DB_ 변수 값을 작은따옴표로 묶어 셸이 값을 방해하지 않도록 합니다.

    export DB_CONNECTION_STRING='<example-jdbc:sqlserver://sqlserverforwlsaks.database.windows.net:1433;database=wlsaksquickstart0125>'
    export DB_USER='<example-welogic@sqlserverforwlsaks>'
    export DB_PASSWORD='<example-Secret123456>'
    export WLS_DOMAIN_NS=sample-domain1-ns
    export WLS_DOMAIN_UID=sample-domain1
    export SECRET_NAME=sqlserver-secret
    
    kubectl -n ${WLS_DOMAIN_NS} create secret generic \
        ${SECRET_NAME} \
        --from-literal=password="${DB_PASSWORD}" \
        --from-literal=url="${DB_CONNECTION_STRING}" \
        --from-literal=user="${DB_USER}"
    
    kubectl -n ${WLS_DOMAIN_NS} label secret \
        ${SECRET_NAME} \
        weblogic.domainUID=${WLS_DOMAIN_UID}
    

    계속하려면 다음 출력이 표시되어야 합니다. 이 출력이 표시되지 않으면 문제를 해결한 후 계속 진행합니다.

    secret/sqlserver-secret created
    secret/sqlserver-secret labeled
    
  4. kubectl patch 명령을 통해 도메인 CRD(사용자 지정 리소스 정의)를 패치하여 보조 이미지를 적용합니다.

    보조 이미지는 다음 예제와 같이 spec.configuration.model.auxiliaryImages에 정의됩니다. 자세한 내용은 보조 이미지를 참조하세요.

    spec:
      clusters:
      - name: sample-domain1-cluster-1
      configuration:
        model:
          auxiliaryImages:
          - image: wlsaksacrafvzeyyswhxek.azurecr.io/wlsaks-auxiliary-image:1.0
            imagePullPolicy: IfNotPresent
            sourceModelHome: /auxiliary/models
            sourceWDTInstallHome: /auxiliary/weblogic-deploy
    

    다음 명령을 사용하여 restartVersion 값을 늘리고 kubectl patch를 사용하여 표시된 정의로 도메인 CRD에 보조 이미지를 적용합니다.

    export VERSION=$(kubectl -n ${WLS_DOMAIN_NS} get domain ${WLS_DOMAIN_UID} -o=jsonpath='{.spec.restartVersion}' | tr -d "\"")
    export VERSION=$((VERSION+1))
    
    cat <<EOF >patch-file.json
    [
      {
        "op": "replace",
        "path": "/spec/restartVersion",
        "value": "${VERSION}"
      },
      {
        "op": "add",
        "path": "/spec/configuration/model/auxiliaryImages",
        "value": [{"image": "$ACR_LOGIN_SERVER/wlsaks-auxiliary-image:1.0", "imagePullPolicy": "IfNotPresent", "sourceModelHome": "/auxiliary/models", "sourceWDTInstallHome": "/auxiliary/weblogic-deploy"}]
      },
      {
        "op": "add",
        "path": "/spec/configuration/secrets",
        "value": ["${SECRET_NAME}"]
      }
    ]
    EOF
    
    kubectl -n ${WLS_DOMAIN_NS} patch domain ${WLS_DOMAIN_UID} \
        --type=json \
        --patch-file patch-file.json
    
    kubectl get pod -n ${WLS_DOMAIN_NS} -w
    
  5. 계속하기 전에 관리 서버와 관리형 서버가 다음 출력 블록의 값을 표시할 때까지 기다립니다.

    NAME                             READY   STATUS    RESTARTS   AGE
    sample-domain1-admin-server      1/1     Running   0          20m
    sample-domain1-managed-server1   1/1     Running   0          19m
    sample-domain1-managed-server2   1/1     Running   0          18m
    

    시스템이 이 상태에 도달하는 데 5-10분 정도 소요될 수 있습니다. 다음 목록에서는 대기하는 동안 발생하는 결과를 간단히 설명합니다.

    • sample-domain1-introspector가 먼저 실행 중인 것으로 표시됩니다. 이 소프트웨어는 Kubernetes 클러스터에서 필요한 작업을 수행할 수 있도록 도메인 사용자 지정 리소스에 대한 변경 내용을 찾습니다.
    • 변경 내용이 검색되면 도메인 Introspector가 Pod를 종료한 후 새 Pod를 시작하여 변경 내용을 롤아웃합니다.
    • 다음으로 sample-domain1-admin-server Pod가 종료되었다가 다시 시작되는 것을 볼 수 있습니다.
    • 그런 다음, 두 개의 관리되는 서버가 종료되었다가 다시 시작되는 것을 볼 수 있습니다.
    • 모든 세 Pod가 1/1 Running 상태를 나타내면 계속 진행해도 됩니다.

배포 기능 확인

다음 단계에 따라 WLS 관리 콘솔 및 샘플 앱을 보고 배포의 기능을 확인합니다.

  1. adminConsoleExternalUrl 값을 인터넷에 연결된 웹 브라우저의 주소 표시줄에 붙여 넣습니다. 친숙한 WLS 관리 콘솔 로그인 화면이 표시됩니다.

  2. Azure Portal에서 WLS를 배포할 때 입력한 사용자 이름 weblogic 및 암호로 로그인합니다. 이 값은 wlsAksCluster2022입니다.

  3. 도메인 구조 상자에서 서비스를 선택합니다.

  4. 서비스 아래에서 데이터 원본을 선택합니다.

  5. JDBC 데이터 원본 요약 패널에서 모니터링을 선택합니다. 화면은 다음 예제와 유사합니다. 관리형 서버에서 데이터 원본 상태가 실행 중으로 나타납니다.

    데이터 원본 상태의 스크린샷

  6. 도메인 구조 상자에서 배포를 선택합니다.

  7. 배포 테이블에는 하나의 행이 있습니다. 이름은 appmodel.yaml 파일의 Application 값과 같아야 합니다. 이름을 선택합니다.

  8. 설정 패널에서 테스트 탭을 선택합니다.

  9. weblogic-cafe를 선택합니다.

  10. weblogic-cafe 설정 패널에서 테스트 탭을 선택합니다.

  11. weblogic-cafe 옆에 있는+ 아이콘을 확장합니다. 화면은 다음 예제와 유사합니다. 특히 테스트 지점 열에 http://sample-domain1-managed-server1:8001/weblogic-cafe/index.xhtml과 유사한 값이 표시됩니다.

    weblogic-cafe 테스트 지점의 스크린샷

    참고 항목

    관리 콘솔을 실행 중인 외부 URL로 구성하지 않았기 때문에 테스트 지점 열의 하이퍼링크를 선택할 수 없습니다. 이 문서에서는 단지 데모를 통해서만 WLS 관리 콘솔을 보여 줍니다. AKS에서 WLS를 실행할 때 지속성 구성 변경에 WLS 관리 콘솔을 사용하지 마세요. AKS에서 WLS의 클라우드 네이티브 디자인을 사용하려면 Oracle 설명서에 설명된 대로 모델 업데이트와 같은 CI/CD 기술을 사용하여 모든 지속성 구성을 초기 Docker 이미지에 표시하거나 실행 중인 AKS 클러스터에 적용해야 합니다.

  12. 배포한 샘플 앱의 context-path 값을 이해합니다. 권장 샘플 앱을 배포했다면 context-pathweblogic-cafe입니다.

  13. context-pathclusterExternalUrl 값에 추가하여 샘플 앱의 정규화된 URL을 생성합니다. 권장 샘플 앱을 배포했다면 정규화된 URL은 http://wlsgw202401-wls-aks-domain1.eastus.cloudapp.azure.com/weblogic-cafe/와 비슷합니다.

  14. 인터넷에 연결된 웹 브라우저에 정규화된 URL을 붙여넣습니다. 권장 샘플 앱을 배포한 경우 다음 스크린샷과 유사한 결과가 표시됩니다.

    테스트 웹앱 스크린샷

리소스 정리

Azure 요금을 방지하려면 불필요한 리소스를 정리해야 합니다. 클러스터가 더 이상 필요하지 않은 경우 az group delete 명령을 사용합니다. 다음 명령은 리소스 그룹, 컨테이너 서비스, 컨테이너 레지스트리 및 모든 관련 리소스를 제거합니다.

az group delete --name <resource-group-name> --yes --no-wait
az group delete --name <db-resource-group-name> --yes --no-wait

다음 단계

다음 링크를 따라 AKS 또는 가상 머신에서 WLS를 실행하는 방법에 대해 자세히 알아봅니다.