注意:

在 OKE 上部署 Oracle FLEXCUBE

簡介

Oracle FLEXCUBE Universal Banking 需要執行幾個步驟,才能啟動環境並執行。作為 Java Enterprise Edition (JEE) 應用程式,它包含安裝的最基本軟體,例如資料庫和應用程式伺服器。在此範例中,Oracle WebLogic 和 Oracle Database 會作為技術堆疊的一部分使用。若要啟用完整且正在執行的系統,標準部署會遵循下列步驟:

1. Install Oracle Database
2. Install Oracle Weblogic Fusion Middleware Infrastructure
3. Install Oracle FLEXCUBE database artifacts
4. Install Oracle FLEXCUBE application server artifacts
5. Configure initial setup
6. Tune database
7. Tune application
8. Personalize as per business needs

應用程式安裝程式會執行初始步驟。處理程序可重複,但也相當耗時,這表示視要建立的環境複雜性而定,部署系統可能需要數天的時間。改善此流程的其中一種方法是將大部分的流程自動化,也就是容器化策略可以使這些類型的架構受益。

在能夠使用容器 (例如 Docker 映像檔) 完全自動化之前列出的前 7 個步驟,以及維護和管理該容器的工具組合。資料庫中設定的資料會變成可複製的原始內建值使用者自建物件,而應用程式層會轉換為已經調整並儲存為主要複本的影像。Oracle Cloud Infrastructure (OCI) 接著會根據系統的主要複本,提供可隨時複寫的完整環境。

注意

目標

必要條件

注意

作業 1:建立 WebLogic 管理伺服器

開始在您的 Kubernetes 叢集中使用簡單的 WebLogic 管理伺服器 POD。

作業 2:取得 AES256 格式的資料庫密碼

檢查 FLEXCUBE 資料庫備份,並取得 AES256 格式的資料庫密碼。

作業 3:使用 kubectl 執行手動部署

您可以使用 kubectl 指令,在 OKE 叢集中部署 FLEXCUBE (fcubs)。如果已設定對 OKE 叢集的 kubectl 命令工具存取,可在本機機器上完成。

讓我們瞭解 integrated145.yaml 檔案

yaml 檔案包含一些建立 pod 的重要參數:包括部署名稱、辨識內部 IP/ 主機名稱、從 WebLogic 挑選映像檔的位置、jdbc 連線以及加密的資料庫存取。

yaml1.png

在相同的 yaml 檔案中,它也定義了 Pod 預期的大小,考慮到所需的資源數目,以及在增加耗用量時可成長的上限。

yaml2.png

要公開的連接埠也定義在 yaml 檔案中,以啟用個人化安全性。業務使用者可存取應用程式、管理員可存取的 WebLogic 主控台、開發人員的 Web 服務等等。

yaml3.png

注意:在此情況下,我們已在同一 POD 中建立所有服務。若要進行擴展,我們得以擴展所有規模。打破單一運算的好方法,就是使用不同 WebLogic 伺服器中公開的不同連接埠建立不同的 Pod。因此,Pod 可以個別調整規模。

舉例來說,使用大量在整合中的 Web 服務 POD 可能會在需要時要求使用 10 個核心和擴展,而應用程式 (部署於其他 Pod 中) 則只需要 2 個核心,而且行為更穩定。

這是 integrated145.yaml 檔案:

---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: flexcubeclaim
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: oci-bv
  resources:
    requests:
      storage: 500Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: integrated145-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: integrated145
  template:
    metadata:
      labels:
        app: integrated145
    spec:
      hostname: integrated145
      hostAliases:
      - ip: "127.0.0.1"
        hostnames:
        - "fcubs.oracle.com"
      containers:
      - name: integrated145
        image: gru.ocir.io/idvkxij5qkne/oraclefmw-infra:12.2.1.4.0_jdk8u281_pt34080315_apr22
        command: [ "/bin/sh", "-c"]
        args:
         [ "sleep 180; su - gsh ; cd /; yum -y install wget; wget https://objectstorage.us-ashburn-1.oraclecloud.com/p/dX80UuetlAvWOEbvQNMBv47H3ZPR-zZHJJmTsu_GQ66icfgFaPSSu_97j8q3Fyrp/n/idcci5ks1puo/b/flexcubeBucketNewVersion/o/initializeConfig.sh; yum -y install unzip; sh initializeConfig.sh jdbc:oracle:thin:@x.x.x.x:1521/prodpdb.sub0xxxxxxxxx0.arspvcn.oraclevcn.com {AES256}AgWyiXhc7aM112gNRUwBIWf5QpTpWMlI537LrIfPWjCcmwNCsynBxxg99; while true; do sleep 30; done;" ]
        ports:
        - name: port7001
          containerPort: 7001
        - name: port7002
          containerPort: 7002
        - name: port7003
          containerPort: 7003
        - name: port7004
          containerPort: 7004
        - name: port7005
          containerPort: 7005
        - name: port7006
          containerPort: 7006
        - name: port7007
          containerPort: 7007
        - name: port7008
          containerPort: 7008
        - name: port7009
          containerPort: 7009
        - name: port7010
          containerPort: 7010
        - name: port7011
          containerPort: 7011
        - name: port7012
          containerPort: 7012
        - name: port7013
          containerPort: 7013
        - name: port7014
          containerPort: 7014
        - name: port7015
          containerPort: 7015
        - name: port7016
          containerPort: 7016
        - name: port7017
          containerPort: 7017
        - name: port7018
          containerPort: 7018
        - name: port7019
          containerPort: 7019
        - name: port7020
          containerPort: 7020
        - name: port5556
          containerPort: 5556
#        livenessProbe:
#          httpGet:
#            path: /console
#            port: 7001
#          initialDelaySeconds: 3000
#          timeoutSeconds: 30
#          periodSeconds: 300
#          failureThreshold: 3
        volumeMounts:
          - name: data
            mountPath: /scratch/gsh/kernel145
            readOnly: false
        resources:
          requests:
            cpu: "5"
            memory: "36Gi"
            #ephemeral-storage: "500Gi"
          limits:
            cpu: "8"
            memory: "64Gi"
            #ephemeral-storage: "500Gi"
#      restartPolicy: Always
      volumes:
        - name: data
          persistentVolumeClaim:
            claimName: flexcubeclaim
      imagePullSecrets:
      - name: ocirsecret
---
apiVersion: v1
kind: Service
metadata:
  name: integrated145-service
  labels:
    app: integrated145
#  annotations:
#    service.beta.kubernetes.io/oci-load-balancer-internal: "true"
#    service.beta.kubernetes.io/oci-load-balancer-shape: "100Mbps"
#    service.beta.kubernetes.io/oci-load-balancer-subnet1: "ocid1.subnet.oc1.sa-saopaulo-1.aaaaaaa.........................zjyrza"
spec:
  selector:
    app: integrated145
  ports:
    - port: 7004
      targetPort: 7004
  type: LoadBalancer
---
apiVersion: v1
kind: Service
metadata:
  name: integrated145-service-weblogic
  labels:
    app: integrated145
#  annotations:
#    service.beta.kubernetes.io/oci-load-balancer-internal: "true"
#    service.beta.kubernetes.io/oci-load-balancer-shape: "100Mbps"
#    service.beta.kubernetes.io/oci-load-balancer-subnet1: "ocid1.subnet.oc1.sa-saopaulo-1.aaaaaaa.........................zjyrza"
spec:
  selector:
    app: integrated145
  ports:
    - port: 7001
      targetPort: 7001
  type: LoadBalancer
---
apiVersion: v1
kind: Service
metadata:
  name:  or Jenkins
  labels:
    app: integrated145
#  annotations:
#    service.beta.kubernetes.io/oci-load-balancer-internal: "true"
#    service.beta.kubernetes.io/oci-load-balancer-shape: "100Mbps"
#    service.beta.kubernetes.io/oci-load-balancer-subnet1: "ocid1.subnet.oc1.sa-saopaulo-1.aaaaaaa.........................zjyrza"
spec:
  selector:
    app: integrated145
  ports:
    - port: 7005
      targetPort: 7005
  type: LoadBalancer
---
apiVersion: v1
kind: Service
metadata:
  name: integrated145-webservices2
  labels:
    app: integrated145
#  annotations:
#    service.beta.kubernetes.io/oci-load-balancer-internal: "true"
#    service.beta.kubernetes.io/oci-load-balancer-shape: "100Mbps"
#    service.beta.kubernetes.io/oci-load-balancer-subnet1: "ocid1.subnet.oc1.sa-saopaulo-1.aaaaaaa.........................zjyrza"
spec:
  selector:
    app: integrated145
  ports:
    - port: 7009
      targetPort: 7009
  type: LoadBalancer

注意抗逆力 - FLEXCUBE 部署具有復原能力,因此如果 WebLogic 或 FLEXCUBE 停止運作,Kubernetes 叢集將會重新載入並執行。負責此行為 integrated145.yaml 檔案內的 livenessprobe。如果您要在容器中啟用支票,請取消下列明細行的備註。

#        livenessProbe:
#          httpGet:
#            path: /console
#            port: 7001
#          initialDelaySeconds: 3000
#          timeoutSeconds: 30
#          periodSeconds: 300
#          failureThreshold: 3
.
.
.
#      restartPolicy: Always

讓我們瞭解一些命令檔檔案

需要某些檔案:

FLEXCUBE-Package.zip

此套裝軟體為 zip 檔案。其中包含設定和執行 FLEXCUBE 執行處理所需的所有命令檔。此套裝軟體的內容位於 scripts.zip 資料夾中。此套裝軟體包含:

注意extra-scripts.zip 資料夾包含一些其他程序檔,對其他作業相當有用。這不是本教學課程核心的一部分。

準備 YAML 檔案

在此步驟中,您需要設定 integrated145.yaml 檔案。此 YAML 檔案負責部署應用程式、透過負載平衡器存取應用程式,以及建立儲存體以供保存。基本上,組態會將資料庫資訊放入 YAML 檔案中。

  1. integrated145.yaml 檔案中找到這一行:

    整合 yaml-line1

  2. 捲動並尋找下列行:sh initializeConfig.sh jdbc:oracle:thin:@x.x.x.x:1521/prodpdb.sub0xxxxxxxxx0.arspvcn.oraclevcn.com

  3. x.x.x.x:1521/prodpdb.sub0xxxxxxxxx0.arspvcn.oraclevcn.com 變更為您的 DBaaS 端點。

  4. 捲動並尋找下列行:{AES256}AgWyiXhc7aM112gNRUwBIWf5QpTpWMlI537LrIfPWjCcmwNCsynBxxg99

  5. 使用上一個步驟中產生的密碼變更 {AES256} 值。

執行 integrated145.yaml 檔案

FLEXCUBE 連接埠 7004 上的應用程式

彎曲方塊介面

連接埠 7005 上的 SOAP 服務

肥皂服務

作業 4:自動執行 FLEXCUBE 部署

讓我們與 Visual Builder Studio 一起執行此作業。此工具為 OCI 的一部分,類似於 Jenkins 。因此,如果您使用 Jenkins ,就可以設定具有少量調整的 CI/CD。

  1. 建立您對 FLEXCUBE Git 專案的約會。您必須在 Visual Builder Studio (或 Jenkins) 組態中設定 FLEXCUBE Git 專案。

    vbst-git-config.png

  2. 在管線中建立兩個變數。

    • JDBCString:包含 JDBC 字串。範例:jdbc:oracle:thin:@x.x.x.x:1521/prodpdb.sub0xxxxxxxxx0.arspvcn.oraclevcn.com

    • JDBCPassword:包含 AES256 密碼格式。範例:{AES256}AgWyiXhc7aM112gNRUwBIWf5QpTpWMlI537LrIfPWjCcmwNCsynBxxg99

    在 Visual Builder 中,您可以建立如下的變數:

    vbst-config-parameters.png

  3. 在管線中建立下列兩個步驟:OCI CLI 步驟:需要建立與 OKE 叢集租用戶的連線,以及 UNIX Shell 步驟:需要執行部署處理作業。

    1. Visual Builder Studio 中的工作組態上,按一下新增並選取 OCICli 。您必須使用 OCI 參數授權 Visual Builder Studio 與您的租用戶和 OKE 叢集搭配運作。

      • 使用者 OCID
      • 指紋:設定 OCI CLI 的存取並上傳公開金鑰
      • 租用戶 OCID
      • 私密金鑰:您上傳的公鑰與指紋中的私密金鑰對
      • 區域:OKE 叢集的區域
      • 密碼片語 :如果您有私密金鑰的密碼
    2. 按一下新增 (Add New) ,然後選取 UNIX Shell 。在方塊中新增此命令檔:

      #  Prepare for kubectl from OCI CLI
      mkdir -p $HOME/.kube
      oci ce cluster create-kubeconfig --cluster-id <OCID of your OKE Cluster> --file $HOME/.kube/config --region us-ashburn-1 --token-version 2.0.0
      export KUBECONFIG=$HOME/.kube/config
      # Set Variables
      export JDBCString=$JDBCString
      export JDBCPassword=$JDBCPassword
      # setup the JDBC variables in integrated145-devops.yaml
      sed -i "s~--JDBCString--~$JDBCString~g" ./files/scripts/integrated145-devops.yaml
      sed -i "s~--JDBCPassword--~$JDBCPassword~g" ./files/scripts/integrated145-devops.yaml
      # Deploy integrated145
      kubectl config view
      kubectl replace -f ./files/scripts/integrated145-devops.yaml --force
      
      

      注意:取得租用戶的 OKE OCID 並新增 "oci ce cluster..." 這一行。integrated145-devops.yaml 檔案與 integrated145.yaml 檔案類似,但已準備 CI/CD。

      Visual Builder Studio 中,會顯示下列詳細資訊:

      vbst 步驟 -config.png

  4. 啟動您的管線並等待部署。您可以透過下列指令列出可用的服務:

    kubectl get svc

    NAME 類型 叢集 IP 外部 IP 連接埠 (S) AGE
    integrated145-service LoadBalancer 10.x.x.x 210.x.x.x 7004:30868/TCP 200d
    integrated145-service-weblogic LoadBalancer 10.x.x.x 210.x.x.x 7001:32071/TCP 200d
    integrated145-webservices LoadBalancer 10.x.x.x 210.x.x.x 7005:30415/TCP 200d
    integrated145-webservices2 LoadBalancer 10.x.x.x 210.x.x.x 7009:30759/TCP 200d

作業 5:更新資料庫表格以設定您的 FLEXCUBE 執行環境

作業 6:刪除 FLEXCUBE 部署

確認

其他學習資源

探索 docs.oracle.com/learn 的其他實驗室,或者存取更多 Oracle Learning YouTube 頻道上的免費學習內容。此外,請瀏覽 education.oracle.com/learning-explorer 以成為 Oracle Learning 檔案總管。

如需產品文件,請造訪 Oracle Help Center