Share via


在 Azure Kubernetes Service (AKS) 叢集上,使用 WebLogic Server 來部署 Java 應用程式

本文會示範如何:

  • 在 Oracle WebLogic Server (WLS) 上執行 Java、Java EE 或 Jakarta EE。
  • 使用 Azure Marketplace 供應項目來建立 WLS 叢集。
  • 建置應用程式 Docker 映像作為輔助映像,以提供 WebLogic Deploy Tooling (WDT) 模型和應用程式。
  • 使用與 Microsoft Azure SQL 的連線,將容器化應用程式部署至 AKS 上的現有 WLS 叢集。

本文使用適用於 WLS 的 Azure Marketplace 供應項目,以加速您的 AKS 旅程。 此供應項目會自動佈建數個 Azure 資源,包括下列資源:

  • Azure Container Registry 執行個體
  • AKS 叢集
  • Azure 應用程式閘道輸入控制器 (AGIC) 執行個體
  • WebLogic 運算子
  • 容器映像,包括 WebLogic 執行階段
  • 沒有應用程式的 WLS 叢集

然後,本文會逐步介紹如何建置輔助映像,以更新現有的 WLS 叢集。 輔助映像提供應用程式和 WDT 模型。

如需完全自動化,在供應項目部署之前,您可以從 Azure 入口網站中選取應用程式,並設定資料來源連線。 若要查看供應項目,請瀏覽 Azure 入口網站

如需在 Azure Kubernetes Service 上設定 WebLogic Server 的逐步指導,請參閱 Azure Kubernetes Service 的 Oracle 官方文件。

必要條件

  • 如果您沒有 Azure 訂用帳戶,請在開始之前先建立 Azure 免費帳戶
  • 請確定您用來登入的 Azure 身分識別具有目前訂用帳戶中的擁有者角色或目前訂用帳戶中的參與者使用者存取系統管理員角色,並完成本文。 如需 Azure 角色的概觀,請參閱什麼是 Azure 角色型存取控制 (Azure RBAC)?如需 AKS 上 WLS 所需特定角色的詳細資料,請參閱 Azure 內建角色
  • 具有 Oracle 單一登入 (SSO) 帳戶的認證。 若要建立帳戶,請參閱建立 Oracle 帳戶
  • 接受 WLS 的授權條款。
    • 請造訪 Oracle Container Registry,並登入。
    • 如果您有支援權利,則請選取 [中介軟體],然後搜尋並選取 [weblogic_cpu]
    • 如果您沒有來自 Oracle 的支援權利,則請選取 [中介軟體],然後搜尋並選取 [weblogic]

      注意

      進入生產環境之前,請取得來自 Oracle 的支援權利。 無法這麼做會導致執行不安全的映像,而這些映像未針對重大安全性缺陷進行修補。 如需 Oracle 重大修補更新的詳細資訊,請參閱來自 Oracle 的重大修補更新、安全性警示和公告

    • 接受授權合約。
  • 使用已安裝類似 Unix 的作業系統 (例如 Ubuntu、Azure Linux、macOS、Windows 子系統 Linux 版) 來準備本機電腦。
    • 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 版本。 Azure 建議使用 Microsoft Build of OpenJDK。 請確定您已在命令執行所在的殼層中正確設定 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 入口網站頂端的搜尋列中,輸入 [weblogic]。 在自動建議的搜尋結果中,於 [市集] 區段中,選取 [AKS 上的 WebLogic Server]

    顯示搜尋結果中 WLS 之 Azure 入口網站 螢幕快照。

    您也可以直接移至 AKS 上的 WebLogic Server 供應項目。

  2. 在供應項目頁面上,選取 [建立]

  3. 在 [基本] 窗格上,確定 [訂用帳戶] 欄位中所顯示的值與 Azure 中已登入的訂用帳戶相同。 請確定您擁有必要條件區段中所列出的角色。

    顯示 AKS 上 WebLogic Server 之 Azure 入口網站 的螢幕快照。

  4. 您必須在空的資源群組中部署供應項目。 在 [資源群組] 欄位中,選取 [新建],然後填入資源群組的值。 因為資源群組在訂用帳戶內必須是唯一的,所以請挑選唯一的名稱。 擁有唯一名稱的簡單方式是使用您的姓名縮寫、今天日期與某個識別碼的組合 - 例如,ejb0723wls

  5. 在 [執行個體詳細資料] 下方,選取部署的區域。 如需 AKS 可供使用的 Azure 區域清單,請參閱 AKS 區域可用性

  6. 在 [WebLogic 的認證] 下方,保留 [WebLogic 系統管理員的使用者名稱] 的預設值。

  7. 針對 [WebLogic 系統管理員的密碼],填入 wlsAksCluster2022。 使用相同的值進行確認,並將其用於 [WebLogic 模型加密的密碼] 欄位。

  8. 捲動至 [基本] 窗格底部,並注意文件、社群支援和問題報告方式的實用連結。

  9. 選取 [下一步]。

下列步驟顯示如何啟動部署程序。

  1. 捲動至標示為 [提供 Oracle 單一登入 (SSO) 帳戶] 的區段。 從前置條件中,填入 Oracle SSO 認證。

    顯示已設定 SSO 窗格之 Azure 入口網站 螢幕快照。

  2. 繼續之前,您必須接受 Oracle 標準條款和限制開始,遵循資訊方塊中的步驟。

  3. 根據 Oracle SSO 帳戶是否有 Oracle 支援權利,選取 [選取 WebLogic Server 映像的類型] 的適當選項。 如果帳戶具有支援權利,則請選取 [已修補的 WebLogic Server 映像]。 否則,請選取 [一般 WebLogic Server 映像]

  4. 將 [選取所需的 WebLogic Server 組合...] 的值保留為其預設值。 針對 WLS、JDK 和 OS 版本,您有很多的選擇。

  5. 在 [應用程式] 區段的 [部署應用程式?] 旁邊,選取 [否]

下列步驟可以執行此作業,因此,會向具有內建應用程式閘道輸入附加元件的公用網際網路公開 WLS 系統管理控制台和範例應用程式。 如需詳細資訊,請參閱什麼是應用程式閘道輸入控制器?

Azure 入口網站 的螢幕快照,其中顯示 Azure Kubernetes Service 頁面上建立 Oracle WebLogic Server 的最簡單負載平衡器設定。

  1. 選取 [下一步] 以查看 [TLS/SSL] 窗格。

  2. 選取 [下一步],以查看 [負載平衡] 窗格。

  3. 在 [負載平衡選項] 旁邊,選取 [應用程式閘道輸入控制器]

  4. 在 [應用程式閘道輸入控制器] 下方,您應該會看到所有欄位都預先填入 [虛擬網路] 和 [子網路] 的預設值。 保留預設值。

  5. 針對 [建立系統管理主控台的輸入],選取 [是]

    Azure 入口網站 的螢幕快照,其中顯示 Azure Kubernetes Service 頁面上 [建立 Oracle WebLogic Server] 頁面上 應用程式閘道 輸入控制器設定。

  6. 保留其他欄位的預設值。

  7. 選取 [檢閱 + 建立]。 請確定驗證未失敗。 如果失敗,則請修正任何驗證問題,然後再次選取 [檢閱 + 建立]

  8. 選取 建立

  9. 在 [正在進行部署] 頁面上,追蹤部署的進度。

根據所選取區域中的網路狀況和其他活動,部署最多可能需要 50 分鐘的時間才能完成。

等候時,您可以執行建立 Azure SQL Database 一節中的步驟。 當您完成資料庫的建立之後,請返回本節。

檢查部署輸出

使用本節中的步驟,來驗證部署已成功。

如果您離開 [正在進行部署] 頁面,則下列步驟顯示如何返回該頁面。 如果您仍然位於顯示 [部署已完成] 的頁面上,則可以在下一個螢幕擷取畫面之後跳到步驟 5。

  1. 在任何 Azure 入口網站頁面的角落,選取漢堡功能表,然後選取 [資源群組]

  2. 在包含 [篩選任何欄位] 文字的方塊中,輸入您先前建立資源群組的前幾個字元。 如果您遵循建議的慣例,請輸入您的縮寫,然後選取適當的資源群組。

  3. 在瀏覽窗格的 [設定] 區段中,選取 [部署]。 您會看到此資源群組的已排序部署清單,而且會先列出最新的部署。

  4. 捲動至此清單中的最舊項目。 此項目會對應至您已在上節中啟動的部署。 選取最舊部署,如下列螢幕擷取畫面所示。

    顯示資源群組部署清單之 Azure 入口網站 螢幕快照。

  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 資料庫 單一資料庫以搭配您的應用程式使用,請遵循快速入門:在 Azure SQL 資料庫 中建立單一資料庫中的步驟。 請仔細注意下列差異:

  • 在 [基本] 步驟中,記下資源群組、資料庫名稱、伺服器>名稱.database.windows.net<伺服器管理員登入密碼的值。 本文將資料庫 資源群組<db-resource-group>稱為 。

  • 在 [網络] 步驟中,將 [連線 ivity 方法] 設定[公用端點]、將 [允許 Azure 服務和資源存取此伺服器] 設定[是],並將 [新增目前的用戶端 IP 位址] 設定[是]。

    顯示 [建立 SQL 資料庫] 頁面 [網络] 索引標籤的 Azure 入口網站 螢幕快照,其中已醒目提示 [連線 ivity 方法和防火牆規則設定]。

注意

您為此資料庫選取的無伺服器計算層,可藉由讓資料庫在閑置期間進入睡眠狀態來節省成本。 如果資料庫在範例應用程式啟動時處於睡眠狀態,則該應用程式將會失敗。

若要強制資料庫喚醒,您可以使用查詢編輯器來執行查詢。 遵循查詢資料庫中的步驟。 以下是範例查詢: 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 部署期間輸入的值來登入。

您可以繼續準備 AKS 來裝載 WebLogic 應用程式。

設定和部署應用程式範例

供應項目會透過映像中的模型來佈建 WLS 叢集。 目前,WLS 叢集尚未部署任何應用程式。

本節使用輔助映像來部署範例應用程式,以更新 WLS 叢集。

查看應用程式

在本節中,您會複製本指南的範例程式碼。 此範例位於 javaee/weblogic-cafe/ 資料夾 weblogic-on-azure 存放庫中的 GitHub 上。 以下為應用程式的檔案結構。

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-cafe/target/weblogic-cafe.war。 如果您看不到套件,則必須先進行疑難排解並解決問題,再繼續進行。

使用 Docker 來建立輔助映像

本節中的步驟顯示如何建置輔助映像。 此映像包括下列元件:

  • 「映像中的模型」 模型檔案
  • 您的應用程式
  • JDBC 驅動程式封存檔案
  • WebLogic Deploy Tooling 安裝

「輔助映像」是包含應用程式和設定的 Docker 容器映像。 WebLogic Kubernetes Operator 會將輔助映像與 AKS 叢集中包含 WebLogic Server、JDK 和作業系統的 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 使用預留位置 (secret sqlserver-secret)。 請確定已正確地設定下列欄位。 下列模型會使用 jdbc/WebLogicCafeDB 來命名資源。

    項目名稱 欄位
    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. 使用下列命令,以在預備目錄中下載和安裝 WebLogic Deploy Tooling (WDT),並移除其 weblogic-deploy/bin/*.cmd 檔案,而這些檔案不會用於 UNIX 環境:

    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 入口網站,並移至您在部署 AKS 上的 WSL 小節中所佈建的資源群組。

    2. 從資源清單中,選取類型為 [容器登錄] 的資源。

    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 入口網站中的 SQL 資料庫資源。

    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_STRINGDB_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 叢集上採取必要的動作。
    • 偵測到變更時,網域內檢員會終止並啟動新的 Pod 來推出變更。
    • 接下來,您應該會看到 sample-domain1-admin-server Pod 終止並重新啟動。
    • 然後,您應該會看到兩個受控伺服器終止並重新啟動。
    • 只有在這三個 Pod 都顯示 1/1 Running 狀態時,才能繼續。

驗證部署的功能

檢視 WLS 系統管理主控台和範例應用程式,以使用下列步驟來驗證部署的功能:

  1. adminConsoleExternalUrl 值貼入已連線網際網路的網頁瀏覽器的網址列。 您應該會看到熟悉的 WLS 系統管理主控台登入畫面。onsole login screen.

  2. 使用您在從 Azure 入口網站中部署 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-café 測試點的螢幕快照。

    注意

    無法選取 [測試點] 資料行中的超鏈接,因為我們未使用其執行所在的外部 URL 來設定管理控制台。 本文透過示範,僅顯示 WLS 系統管理主控台。 執行 AKS 上的 WLS 時,請不要將 WLS 系統管理主控台用於任何永久性設定變更。 AKS 上 WLS 的雲端原生設計需要任何永久性設定都必須在初始 Docker 映像中代表,或使用 CI/CD 技術將其套用至執行中 AKS 叢集 (例如更新模型),如 Oracle 文件中所述。

  12. 瞭解您所部署範例應用程式的 context-path 值。 如果您已部署建議的範例應用程式,則 context-pathweblogic-cafe

  13. context-path 附加至 clusterExternalUrl 值,以建構範例應用程式的完整 URL。 如果您已部署建議的範例應用程式,則完整 URL 應該與 http://wlsgw202401-wls-aks-domain1.eastus.cloudapp.azure.com/weblogic-cafe/ 類似。

  14. 將完整 URL 貼入網際網路連線的網頁瀏覽器。 如果您已部署建議的範例應用程式,則應該會看到與下列螢幕擷取畫面類似的結果:

    測試 Web 應用程式的螢幕快照。

清除資源

若要避免 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: