Tanzu Kubernetes Grid 클러스터에 이미지 파일을 배포할 수 있습니다.

사전 요구 사항

  • Tanzu Kubernetes Grid 클러스터가 있어야 합니다.
  • Oracle WebLogic Server 구성 요소에서 성공적인 컨테이너화.
  • 다음 단계를 수행하여 클러스터에 Oracle의 WebLogic Kubernetes 운영자를 배포합니다.
    • 다음 명령을 실행합니다.
    • WebLogic 운영자를 설치합니다.
      • 운영자에 대한 네임스페이스 및 서비스 계정을 생성합니다.
        kubectl create namespace sample-weblogic-operator-ns
        kubectl create serviceaccount -n sample-weblogic-operator-ns sample-weblogic-operator-sa
      • 운영자에게 필요한 Helm을 설치합니다.
        helm install sample-weblogic-operator kubernetes/charts/weblogic-operator \
        --namespace sample-weblogic-operator-ns \
        --set image=oracle/weblogic-kubernetes-operator:3.1.0 \
        --set serviceAccount=sample-weblogic-operator-sa \
        --set "enableClusterRoleBinding=true" \
        --set "domainNamespaceSelectionStrategy=LabelSelector" \
        --set "domainNamespaceLabelSelector=weblogic-operator\=enabled" \
        --wait
        
        kubectl get pods -n sample-weblogic-operator-ns
         
        # Verify the status weblogic-operator pod
        kubectl get pods -n sample-weblogic-operator-ns
        #Output
        NAME                             	READY   STATUS	RESTARTS   AGE
        weblogic-operator-54c6f7464c-926xz   1/1     Running   0    2d12h

프로시저

  1. 구성 요소 세부 정보에 제공된 링크에서 이미지 아티팩트 ZIP 파일을 다운로드하고 압축을 풉니다.
  2. 모든 암호에 대해 네임스페이스, 사용자 이름, 암호와 같은 특정 세부 정보로 create_k8s_secrets.sh를 업데이트합니다.
  3. 도메인 네임스페이스를 생성합니다.
    # create domain namespace
    kubectl create namespace demo
     
    # upgrade weblogic-operator with the Domain namespace
    kubectl label ns demo weblogic-operator=enabled
  4. 동일한 네임스페이스에 레지스트리에 대한 암호를 생성합니다.
    #!/bin/bash
     set -eu
    
    # Edit these values to change the namespace or domain UID
    NAMESPACE=demo
    DOMAIN_UID=wldomain1
     
    function create_k8s_secret {
      kubectl -n $NAMESPACE delete secret ${DOMAIN_UID}-$1 --ignore-not-found
      kubectl -n $NAMESPACE create secret generic ${DOMAIN_UID}-$1 --from-literal=password=$2
      kubectl -n $NAMESPACE label secret ${DOMAIN_UID}-$1 weblogic.domainUID=${DOMAIN_UID}
    }
     
    function create_paired_k8s_secret {
      kubectl -n $NAMESPACE delete secret ${DOMAIN_UID}-$1 --ignore-not-found
      kubectl -n $NAMESPACE create secret generic ${DOMAIN_UID}-$1 --from-literal=username=$2 --from-literal=password=$3
      kubectl -n $NAMESPACE label secret ${DOMAIN_UID}-$1 weblogic.domainUID=${DOMAIN_UID}
    }
     
    # Update <admin-user> and <admin-password> for weblogic-credentials
    create_paired_k8s_secret weblogic-credentials <admin-user> <admin-password>
     
    # Update <user> and <password> for jdbc-jdbc-data-source-0
    create_paired_k8s_secret jdbc-jdbc-data-source-0 c##test <password>
     
    # Update <password> for runtime-encryption-secret, This is a special secret required by Model in Image.
    create_k8s_secret runtime-encryption-secret <password>
  5. 스크립트를 실행하고 네임스페이스에 암호가 성공적으로 생성되었는지 확인합니다.
    kubectl get secrets -n demo
    
    #Output
    NAME                                  TYPE                                  DATA   AGE
    default-token-6ls2z                   kubernetes.io/service-account-token   3      5d13h
    docker-secret                         kubernetes.io/dockerconfigjson        1      4d22h
    harbor-cred                           kubernetes.io/dockerconfigjson        1      4d22h
    wldomain1-jdbc-jdbc-data-source-0     Opaque                                2      3d14h
    wldomain1-runtime-encryption-secret   Opaque                                1      3d14h
    wldomain1-weblogic-credentials        Opaque                                2      3d14h
  6. 도메인을 준비하고 배포합니다.
    1. Domain.yaml.extn 파일을 다운로드하고 다음 매개 변수를 추가 및 업데이트하여 배포를 위한 Domain.yaml을 생성합니다.
      • image: WebLogic 도메인 이미지의 이름 입력
      • domainHomeSourceType: FromModel
      • webLogicCredentialsSecret
      • JAVA_OPTIONS "-Dweblogic.security.SSL.ignoreHostnameVerification=true"
      • runtimeEncryptionSecret
      • introspector 포드가 지속적으로 생성 및 종료를 반복하는 경우 느린 네트워크에 대해 초 단위의 시간(예: 600)으로 introspectorJobActiveDeadlineSeconds를 추가합니다.
      • 이전 스크립트를 실행한 후 생성된 추가 암호입니다(있는 경우).

    샘플 Domain.yaml

    kind: Domain
    metadata:
        name: wldomain1
    spec:
        domainHome: /home/oracle/WLDOMAIN1
        image: 'imthangadurai/wl_12_1_0_3:1.0.0'
        domainHomeSourceType: FromModel
        imagePullSecrets:
        -   name: 'docker-secret'
        webLogicCredentialsSecret:
          name: wldomain1-weblogic-credentials
        clusters:
        -   clusterName: 'Cluster-0'
            replicas: 2
            serverPod:
              env:
               - name: JAVA_OPTIONS
                 value: "-Dweblogic.security.SSL.ignoreHostnameVerification=true"
        configuration:
            introspectorJobActiveDeadlineSeconds: 600
            model:
                domainType: WLS
                runtimeEncryptionSecret: 'wldomain1-runtime-encryption-secret'
            secrets:
            -   'wldomain1-weblogic-credentials'
            -   'wldomain1-jdbc-jdbc-data-source-0'
  7. 업데이트된 Domain.yaml을 동일한 네임스페이스에 배포하면 Introspector 포드가 먼저 실행되고 Oracle WebLogic Server 이미지와 생성된 도메인 포드(예: admin, server-0, server-1 등)를 가져옵니다.
    kubectl apply -f Domain.yaml -n <namespace>
     
    # Watch for the status of the pods
    # admin server, managed-server1 and managed-server2 needs to be in running state
     
    kubectl get pods -n demo --watch
     
     
    NAME                       	READY   STATUS	RESTARTS   AGE
    wldomain1-introspector-bq4dt   1/1     Running   0      	100s
    wldomain1-introspector-bq4dt   0/1     Completed   0      	114s
    wldomain1-introspector-bq4dt   0/1     Terminating   0      	115s
    wldomain1-introspector-bq4dt   0/1     Terminating   0      	115s
    wldomain1-adminserver      	0/1     Pending   	0      	0s
    wldomain1-adminserver      	0/1     Pending   	0      	0s
    wldomain1-adminserver      	0/1     ContainerCreating   0      	0s
    wldomain1-adminserver      	0/1     Running         	0      	2s
     
    # This confirms the pods are running successfully
     
    kubectl get pods -n demo
    NAME                	READY   STATUS	RESTARTS   AGE
    wldomain1-adminserver   1/1     Running   0      	16m
    wldomain1-server-0  	1/1     Running   0      	15m
    wldomain1-server-1  	1/1     Running   0      	15m
    wldomain1-server-3  	1/1     Running   0      	15m
    wldomain1-server-4  	1/1     Running   0      	15m
  8. Oracle WebLogic Server 관리 서버에 액세스하려면 다음 중 하나를 수행합니다.
    • traefik와 같은 수신 컨트롤러를 생성합니다.
    • 다음 명령을 사용하여 서비스를 노출합니다.
      kubectl expose pod <pod-name>  --port=<port>  --target-port=<port> --name porname --type=LoadBalancer
      kubectl patch svc portname-p '{"spec": {"type" : "LoadBalancer", "externalIPs":["<LB-IP>"]}}'