在 Azure Kubernetes Service (AKS) 叢集上,使用 WebLogic Server 來部署 Java 應用程式
本文會示範如何:
- 在 Oracle WebLogic Server (WLS) 上執行 Java 應用程式。
- 使用 Azure Marketplace 供應項目,在 AKS 上建立 WebLogic Server 叢集。
- 建立包括 WebLogic Deploy Tooling (WDT) 模型的應用程式 Docker 映像。
- 將容器化應用程式部署至 AKS 上的 WebLogic Server 叢集,並連接至 Microsoft Azure SQL。
本文使用適用於 WebLogic Server 的 Azure Marketplace 供應項目,以加速您的 AKS 旅程。 此供應項目會自動佈建數個 Azure 資源,包括下列資源:
- Azure Container Registry 執行個體
- AKS 叢集
- Azure 應用程式閘道輸入控制器 (AGIC) 執行個體
- WebLogic Kubernetes 運算子
- 容器映像,包括 WebLogic 執行階段
- 沒有應用程式的 WebLogic Server 叢集
接著,本文將逐步介紹如何建立映像以更新 WebLogic Server 叢集。 映像會提供應用程式和 WDT 模型。
若偏好以較不自動的方式在 AKS 上部署 WebLogic,請參閱 Oracle 官方文件 Azure Kubernetes Service 中的逐步指導。
若您有興趣與開發 AKS 上 WebLogic 解決方案的工程團隊緊密合作以進行移轉,請填寫這份簡短的 WebLogic 移轉問卷,並附上您的連絡資訊。 專案經理、結構設計師和工程師組成的小組會立即連絡您,以展開緊密合作。
必要條件
- 如果您沒有 Azure 訂用帳戶,請在開始之前先建立 Azure 免費帳戶。
- 請確定您用來登入的 Azure 身分識別具有目前訂用帳戶中的擁有者角色或目前訂用帳戶中的參與者和使用者存取系統管理員角色,並完成本文。 如需 Azure 角色的概觀,請參閱什麼是 Azure 角色型存取控制 (Azure RBAC)?如需 AKS 上 WLS 所需特定角色的詳細資料,請參閱 Azure 內建角色。
- 具有 Oracle 單一登入 (SSO) 帳戶的認證。 若要建立帳戶,請參閱建立 Oracle 帳戶。
- 接受 WebLogic Server 的授權條款。
- 請造訪 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 版進行過測試。 - kubectl。 使用
kubectl version
來測試 kubectl 是否運作。 本文件已使用 v1.21.2 版進行過測試。 - Java 開發工具組(JDK)。 本文會引導您安裝 Microsoft OpenJDK 11 的組建。 請確定您已在命令執行所在的殼層中正確設定
JAVA_HOME
環境變數。 - Maven 3.5.0 或更高版本。
- 請確定您已安裝 zip/unzip 公用程式。 使用
zip/unzip -v
來測試zip/unzip
是否運作。
- Azure CLI。 使用
建立 Azure SQL Database
本節會使用已啟用受控識別連線的 Microsoft Entra 驗證,建立 Azure SQL 資料庫。
建立資源群組
使用 az group create 來建立資源群組。 因為資源群組在訂用帳戶內必須是唯一的,所以請挑選唯一的名稱。 擁有唯一名稱的簡單方式是使用您的姓名縮寫、今天日期與一些識別碼的組合。 例如: abc1228rg
。 此範例會在位置中eastus
建立名為 abc1228rg
的資源群組:
export RESOURCE_GROUP_NAME="abc1228rg"
az group create \
--name ${RESOURCE_GROUP_NAME} \
--location eastus
建立資料庫伺服器和資料庫
使用 az sql server create 命令建立伺服器。 此範例會建立名為 myazuresql20130213
的伺服器,其中包含系統管理員使用者 azureuser
和系統管理員密碼。 以您的密碼取代 <your-password>
。 如需詳細資訊,請參閱快速入門:建立單一資料庫 - Azure SQL 資料庫。
注意
即使您在這裡使用使用者名稱和密碼,這些認證也不會在資料庫外部公開。 應用層與資料庫之間的聯機會受到受控識別保護。
export AZURESQL_SERVER_NAME="myazuresql20130213"
export AZURESQL_ADMIN_USER="azureuser"
export AZURESQL_ADMIN_PASSWORD="<your-password>"
export DATABASE_NAME="mysingledatabase20230213"
az sql server create \
--resource-group $RESOURCE_GROUP_NAME \
--name $AZURESQL_SERVER_NAME \
--location westus \
--admin-user $AZURESQL_ADMIN_USER \
--admin-password $AZURESQL_ADMIN_PASSWORD
在無伺服器計算層中使用 az sql db create 命令建立資料庫。
az sql db create \
--resource-group $RESOURCE_GROUP_NAME \
--server $AZURESQL_SERVER_NAME \
--name $DATABASE_NAME \
--sample-name AdventureWorksLT \
--edition GeneralPurpose \
--compute-model Serverless \
--family Gen5 \
--capacity 2
設定 Microsoft Entra 系統管理員
如需 Azure SQL Server 如何與受控識別互動的資訊,請參閱 使用 Microsoft Entra 驗證進行連線。
使用下列步驟,從 Azure 入口網站 將 Microsoft Entra 系統管理員帳戶設定為 Azure SQL Server:
- 在 Azure 入口網站 中,開啟 Azure SQL Server 實例
myazuresql20130213
。 - 選取 [ 設定],然後選取 [Microsoft項目標識符]。 在 [ Microsoft項目標識符 ] 頁面上,選取 [ 設定系統管理員]。
- 在 [新增系統管理員] 頁面上,搜尋使用者、選取要成為系統管理員的使用者或群組,然後選取 [選取]。
- 在 [Microsoft項目標識符] 頁面頂端,選取 [儲存]。 針對Microsoft Entra 使用者和群組,[對象標識符] 會顯示在系統管理員名稱旁邊。
- 變更管理員的程序可能需要幾分鐘的時間。 然後,新的系統管理員會出現在 [Microsoft Entra ID ] 方塊中。
建立使用者指派的受控識別
接下來,在 Azure CLI 中,使用 az identity create 命令在您的訂用帳戶中建立 身分識別。 您可以使用此受控識別來連線到您的資料庫。
az identity create \
--resource-group ${RESOURCE_GROUP_NAME} \
--name myManagedIdentity
為您的受控識別建立資料庫使用者
現在,從 Azure 入口網站 以 Microsoft Entra 系統管理員使用者身分連線到 Azure SQL 資料庫,併為您的受控識別建立使用者。
首先,建立防火牆規則以從入口網站存取 Azure SQL 伺服器,如下列步驟所示:
- 在 Azure 入口網站 中,開啟 Azure SQL Server 實例
myazuresql20130213
。 - 選取 [安全性],然後選取 [網络]。
- 在 [防火牆規則] 底下,選取 [新增用戶端 IPV4 IP 位址]。
- 在 [例外狀況] 底下,選取 [允許 Azure 服務和資源存取此伺服器]。
- 選取儲存。
建立防火牆規則之後,您可以從入口網站存取 Azure SQL 伺服器。 使用下列步驟建立資料庫使用者:
選取 [ 設定],然後選取 [ SQL 資料庫]。 選取
mysingledatabase20230213
。選取 [ 查詢編輯器]。 在 [歡迎 SQL 資料庫 查詢編輯器] 頁面上,於 [Active Directory 驗證] 底下,尋找類似 的
Logged in as user@contoso.com
訊息。選取 [ 繼續] 作為 user@contoso.com,其中
user
是您的 AD 系統管理員帳戶名稱。登入之後,請在查詢 1 編輯器中執行下列命令來建立受控識別
myManagedIdentity
的資料庫使用者。CREATE USER "myManagedIdentity" FROM EXTERNAL PROVIDER ALTER ROLE db_datareader ADD MEMBER "myManagedIdentity"; ALTER ROLE db_datawriter ADD MEMBER "myManagedIdentity"; ALTER ROLE db_ddladmin ADD MEMBER "myManagedIdentity"; GO
在 [ 查詢 1 編輯器] 中,選取 [ 執行 ] 以執行 SQL 命令。
如果命令順利完成,您可以找到一則訊息,指出
Query succeeded: Affected rows: 0
。
使用下列命令來取得您在下一節中使用的 連接字串:
export CONNECTION_STRING="jdbc:sqlserver://${AZURESQL_SERVER_NAME}.database.windows.net:1433;database=${DATABASE_NAME};encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.database.windows.net;loginTimeout=30;"
echo ${CONNECTION_STRING}
建立範例應用程式的架構
選取[ 新增查詢 ],然後在查詢編輯器中執行下列查詢:
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);
成功執行之後,應會看到「查詢成功:受影響的資料列:1」訊息。 如果您看不到此訊息,則請先進行疑難排解並解決問題,再繼續進行。
您可以繼續在 AKS 供應專案上部署 WLS。
部署 AKS 上的 WebLogic Server
使用下列步驟來尋找 AKS 供應專案上的 WebLogic Server,並填寫 [ 基本] 窗格:
在 Azure 入口網站頂端的搜尋列中,輸入 [weblogic]。 在自動建議的搜尋結果的 [市集] 區段中,選取 [AKS 上的 WebLogic Server]。
您也可以直接移至 AKS 上的 WebLogic Server 供應項目。
在供應項目頁面上,選取 [建立]。
在 [基本] 窗格上,確定 [訂用帳戶] 欄位中所顯示的值與 Azure 中已登入的訂用帳戶相同。 請確定訂用帳戶內具有必要條件區段中所列出的角色。
您必須在空的資源群組中部署供應項目。 在 [資源群組] 欄位中,選取 [新建],然後填入資源群組的值。 因為資源群組在訂用帳戶內必須是唯一的,所以請挑選唯一的名稱。 擁有唯一名稱的簡單方式是使用您的姓名縮寫、今天日期與某個識別碼的組合 - 例如,
ejb0723wls
。在 [執行個體詳細資料] 下方,選取部署的區域。 如需 AKS 可供使用的 Azure 區域清單,請參閱 AKS 區域可用性。
在 [WebLogic 的認證] 下方,保留 [WebLogic 系統管理員的使用者名稱] 的預設值。
針對 [WebLogic 系統管理員的密碼],填入
wlsAksCluster2022
。 使用相同的值進行確認,並將其用於 [WebLogic 模型加密的密碼] 欄位。選取 [下一步]。
使用下列步驟開始部署程式:
捲動至標示為 [提供 Oracle 單一登入 (SSO) 帳戶] 的區段。 從前置條件中,填入 Oracle SSO 認證。
請務必記下資訊方塊中從 [繼續之前,必須先接受 Oracle 標準條款和限制] 開始的步驟。
根據 Oracle SSO 帳戶是否具有 Oracle 支援權利,選取適當的 [選取 WebLogic Server 映像類型] 選項。 如果帳戶具有支援權利,則請選取 [已修補的 WebLogic Server 映像]。 否則,請選取 [一般 WebLogic Server 映像]。
將 [選取所需的 WebLogic Server 組合...] 的值保留為其預設值。 針對 WebLogic Server、JDK 和 OS 版本,您有很多的選擇。
在 [應用程式] 區段的 [部署應用程式?] 旁邊,選取 [否]。
下列步驟可以執行此作業,因此,會向具有內建應用程式閘道輸入附加元件的公用網際網路公開 WebLogic Server 系統管理控制台和範例應用程式。 如需詳細資訊,請參閱什麼是應用程式閘道輸入控制器?
選取 [下一步] 以查看 [TLS/SSL] 窗格。
選取 [下一步],以查看 [負載平衡] 窗格。
在 [負載平衡選項] 旁邊,選取 [應用程式閘道輸入控制器]。
在 [應用程式閘道輸入控制器] 下方,您應該會看到所有欄位都預先填入 [虛擬網路] 和 [子網路] 的預設值。 保留預設值。
針對 [建立系統管理主控台的輸入],選取 [是]。
選取 [下一步 ] 以查看 [DNS ] 窗格。
選取 [下一步 ] 以查看 [ 資料庫] 窗格。
使用下列步驟來設定使用受控識別的資料庫連線:
- 針對 [ 連線到資料庫?],選取 [ 是]。
- 在 [連線設定] 底下,針對 [選擇資料庫類型],開啟下拉功能表,然後選取 [Microsoft SQL Server [支援無密碼連線]。
- 針對 JNDI 名稱,輸入 jdbc/WebLogicCafeDB。
- 針對 DataSource 連接字串,輸入您在上一節中取得的 連接字串。
- 選取 [ 使用無密碼數據源連線]。
- 針對 [ 使用者指派的受控識別],選取您在上一個步驟中建立的受控識別。 在這裡範例中,其名稱為
myManagedIdentity
。 - 選取 [新增]。
[ 連線設定 ] 區段看起來應該像下列螢幕快照:
使用下列步驟來完成部署:
- 選取 [檢閱 + 建立]。 請確定驗證不會失敗。 如果失敗,則請修正任何驗證問題,然後再次選取 [檢閱 + 建立]。
- 選取 建立。
- 在 [正在進行部署] 頁面上,追蹤部署的進度。
根據所選取區域中的網路狀況和其他活動,部署最多可能需要 50 分鐘的時間才能完成。
注意
如果您的組織要求您在不允許公用IP的公司虛擬網路內部署工作負載,您可以選擇內部Load Balancer 服務。 若要設定內部 Load Balancer 服務,請使用 [負載平衡] 索引卷標的下列步驟:
針對 [負載平衡選項],選取 [標準負載平衡器服務]。
選取 [使用內部負載平衡器]。
將以下行新增到資料表中:
服務名稱前置詞 Target 連接埠 wls-admin-internal
admin-server
7001 wls-cluster-internal
cluster-1
8001
[負載平衡] 索引標籤看起來應該像下列螢幕快照:
部署之後,您可以從輸出找到系統管理伺服器和叢集的存取 URL,並標示為 adminConsoleExternalUrl 和 clusterExternalUrl。
檢查部署輸出
使用本節中的步驟,來驗證部署已成功。
如果您離開 [正在進行部署] 頁面,則下列步驟顯示如何返回該頁面。 如果您仍然位於顯示 [部署已完成] 的頁面上,則可以在下一個螢幕擷取畫面之後跳到步驟 5。
在任何 Azure 入口網站頁面的角落,選取漢堡功能表,然後選取 [資源群組]。
在包含 [篩選任何欄位] 文字的方塊中,輸入您先前建立資源群組的前幾個字元。 如果您遵循建議的慣例,請輸入您的縮寫,然後選取適當的資源群組。
在瀏覽窗格的 [設定] 區段中,選取 [部署]。 您會看到此資源群組的已排序部署清單,而且會先列出最新的部署。
捲動至此清單中的最舊項目。 此項目會對應至您已在上節中啟動的部署。 選取最舊部署,如下列螢幕擷取畫面所示。
在瀏覽窗格中,選取 [輸出]。 此清單顯示來自部署的輸出值。 輸出中包括有用的資訊。
adminConsoleExternalUrl 值是此 AKS 叢集與 WebLogic Server 系統管理主控台的完整公用網際網路可見連結。 選取欄位值旁邊的複製圖示,以將連結複製至剪貼簿。 儲存此值以供稍後使用。
clusterExternalUrl 值是此 AKS 叢集上 WebLogic Server 中所部署範例應用程式的完整公用網際網路可見連結。 選取欄位值旁邊的複製圖示,以將連結複製至剪貼簿。 儲存此值以供稍後使用。
shellCmdtoOutputWlsImageModelYaml 值用於建置容器映像之 WDT 模型的 base64 字串。 儲存此值以供稍後使用。
shellCmdtoOutputWlsImageProperties 值用於建置容器映像之 WDT 模型屬性的 base64 字串。 儲存此值以供稍後使用。
shellCmdtoConnectAks 值是可連線至這個特定 AKS 叢集的 Azure CLI 命令。
輸出中的其他值超出本文的範圍,但會在 AKS 上的 WebLogic 使用者指南中詳細說明。
設定和部署應用程式範例
供應項目會透過映像中的模型來佈建 WebLogic Server 叢集。 目前,WebLogic Server 叢集尚未部署任何應用程式。
本節使用輔助映像來部署範例應用程式,以更新 WebLogic Server 叢集。
查看應用程式
在本節中,您會複製本指南的範例程式碼。 此範例位於 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。 如果您看不到套件,則必須先進行疑難排解並解決問題,再繼續進行。
使用 Azure Container Registry 建立輔助映射
本節中的步驟顯示如何建置輔助映像。 此映像包括下列元件:
- 「映像中的模型」 模型檔案
- 您的應用程式
- JAVA 資料庫連線 (JDBC) 驅動程式封存檔案
- WebLogic Deploy Tooling 安裝
「輔助映像」是包含應用程式和設定的 Docker 容器映像。 WebLogic Kubernetes Operator 會將輔助映像與 AKS 叢集中包含 WebLogic Server、JDK 和作業系統的 domain.spec.image
合併。 如需輔助映像的詳細資訊,請參閱 Oracle 文件中輔助映像。
本節需要已安裝 Azure CLI 和 kubectl 的 Linux 終端機。
使用下列步驟來建置映像:
使用下列命令來建立目錄,以暫存模型和應用程式:
mkdir -p ${BASE_DIR}/mystaging/models cd ${BASE_DIR}/mystaging/models
從部署輸出中,複製您所儲存的 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"
同樣地,複製 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
使用下列步驟來建立應用程式模型檔案。
使用下列命令來複製 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
使用下列命令,來建立已顯示內容的應用程式模型檔案。 將模型檔案儲存至 ${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
使用下列步驟來設定數據源連線。
使用下列步驟來下載並安裝Microsoft SQL Server JDBC 驅動程式和 Azure 身分識別延伸模組,以使用 Azure 受控識別啟用資料庫連線。
使用下列命令下載並安裝 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
使用下列命令將 Azure Identity Extension 安裝至
wlsdeploy/classpathLibraries
:curl -LO https://github.com/oracle/weblogic-azure/raw/refs/heads/main/weblogic-azure-aks/src/main/resources/azure-identity-extensions.xml mvn dependency:copy-dependencies -f azure-identity-extensions.xml mkdir -p ${BASE_DIR}/mystaging/models/wlsdeploy/classpathLibraries/azureLibraries mkdir ${BASE_DIR}/mystaging/models/wlsdeploy/classpathLibraries/jackson # fix JARs conflict issue in GA images, put jackson libraries to PRE_CLASSPATH to upgrade the existing libs. mv target/dependency/jackson-annotations-*.jar ${BASE_DIR}/mystaging/models/wlsdeploy/classpathLibraries/jackson/ mv target/dependency/jackson-core-*.jar ${BASE_DIR}/mystaging/models/wlsdeploy/classpathLibraries/jackson/ mv target/dependency/jackson-databind-*.jar ${BASE_DIR}/mystaging/models/wlsdeploy/classpathLibraries/jackson/ mv target/dependency/jackson-dataformat-xml-*.jar ${BASE_DIR}/mystaging/models/wlsdeploy/classpathLibraries/jackson/ # Thoes jars will be appended to CLASSPATH mv target/dependency/*.jar ${BASE_DIR}/mystaging/models/wlsdeploy/classpathLibraries/azureLibraries/
使用下列命令來清除資源:
rm target -f -r rm azure-identity-extensions.xml
複製您先前儲存的 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
導出資料庫連接模型,並將其儲存至 ${BASE_DIR}/mystaging/models/dbmodel.yaml。 下列步驟會從 ConfigMap
sample-domain1-wdt-config-map
擷取資料庫組態模型。 名稱會遵循 格式<domain-uid>-wdt-config-map
,其中<domain-uid>
會在供應專案部署期間設定。 如果您修改了預設值,請將它取代為您自己的網域 UID。數據金鑰為 db-secret-name.yaml>。< 使用下列命令來擷取資料庫秘密名稱:
export WLS_DOMAIN_UID=sample-domain1 export WLS_DOMAIN_NS=${WLS_DOMAIN_UID}-ns export DB_K8S_SECRET_NAME=$(kubectl get secret -n ${WLS_DOMAIN_NS} | grep "ds-secret" | awk '{print $1}')
接下來,使用此命令擷取資料庫模型:
kubectl get configmap sample-domain1-wdt-config-map -n ${WLS_DOMAIN_NS} -o=jsonpath="{['data']['${DB_K8S_SECRET_NAME}\.yaml']}" >${BASE_DIR}/mystaging/models/dbmodel.yaml
最後,使用下列命令來驗證 dbmodel.yaml 的內容。
cat ${BASE_DIR}/mystaging/models/dbmodel.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. resources: JDBCSystemResource: jdbc/WebLogicCafeDB: Target: 'cluster-1' JdbcResource: JDBCDataSourceParams: JNDIName: [ jdbc/WebLogicCafeDB ] GlobalTransactionsProtocol: OnePhaseCommit JDBCDriverParams: DriverName: com.microsoft.sqlserver.jdbc.SQLServerDriver URL: '@@SECRET:ds-secret-sqlserver-1727147748:url@@' PasswordEncrypted: '@@SECRET:ds-secret-sqlserver-1727147748:password@@' Properties: user: Value: '@@SECRET:ds-secret-sqlserver-1727147748:user@@' JDBCConnectionPoolParams: TestTableName: SQL SELECT 1 TestConnectionsOnReserve: true
使用下列命令來建立封存盤案,然後移除 您不再需要的 wlsdeploy 資料夾:
cd ${BASE_DIR}/mystaging/models zip -r archive.zip wlsdeploy rm -f -r wlsdeploy
使用下列命令,以在預備目錄中下載和安裝 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
使用下列命令清除 WDT 安裝程式:
rm weblogic-deploy.zip
使用下列命令來建立 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 COPY --chown=\$USER:\$GROUP ./ \${AUXILIARY_IMAGE_PATH}/ USER \$USER EOF
使用 ${BASE_DIR}/mystaging/Dockerfile 來執行
az acr build
命令,如下列範例所示:export ACR_NAME=<value-from-clipboard> export IMAGE="wlsaks-auxiliary-image:1.0"
使用下列命令來仔細檢查預備檔案:
cd ${BASE_DIR}/mystaging find -maxdepth 2 -type f -print
這些命令會產生類似下列範例的輸出:
./models/model.properties ./models/model.yaml ./models/appmodel.yaml ./models/dbmodel.yaml ./models/archive.zip ./Dockerfile ./weblogic-deploy/VERSION.txt ./weblogic-deploy/LICENSE.txt
使用
az acr build
建置映射,如下列範例所示:az acr build -t ${IMAGE} --build-arg AUXILIARY_IMAGE_PATH=/auxiliary -r ${ACR_NAME} --platform linux/amd64 .
當您成功建置映像時,輸出看起來會類似下列範例:
... Step 1/9 : FROM busybox latest: Pulling from library/busybox Digest: sha256:9ae97d36d26566ff84e8893c64a6dc4fe8ca6d1144bf5b87b2b85a32def253c7 Status: Image is up to date for busybox:latest ---> 65ad0d468eb1 Step 2/9 : ARG AUXILIARY_IMAGE_PATH=/auxiliary ---> Running in 1f8f4e82ccb6 Removing intermediate container 1f8f4e82ccb6 ---> 947fde618be9 Step 3/9 : ARG USER=oracle ---> Running in dda021591e41 Removing intermediate container dda021591e41 ---> f43d84be4517 Step 4/9 : ARG USERID=1000 ---> Running in cac4df6dfd13 Removing intermediate container cac4df6dfd13 ---> e5513f426c74 Step 5/9 : ARG GROUP=root ---> Running in 8fec1763270c Removing intermediate container 8fec1763270c ---> 9ef233dbe279 Step 6/9 : ENV AUXILIARY_IMAGE_PATH=${AUXILIARY_IMAGE_PATH} ---> Running in b7754f58157a Removing intermediate container b7754f58157a ---> 4a26a97eb572 Step 7/9 : RUN adduser -D -u ${USERID} -G $GROUP $USER ---> Running in b6c1f1a81af1 Removing intermediate container b6c1f1a81af1 ---> 97d3e5ad7540 Step 8/9 : COPY --chown=$USER:$GROUP ./ ${AUXILIARY_IMAGE_PATH}/ ---> 21088171876f Step 9/9 : USER $USER ---> Running in 825e0abc9f6a Removing intermediate container 825e0abc9f6a ---> b81d6430fcda Successfully built b81d6430fcda Successfully tagged wlsaksacru6jyly7kztoqu.azurecr.io/wlsaks-auxiliary-image:1.0 2024/08/28 03:06:19 Successfully executed container: build 2024/08/28 03:06:19 Executing step ID: push. Timeout(sec): 3600, Working directory: '', Network: '' 2024/08/28 03:06:19 Pushing image: wlsaksacru6jyly7kztoqu.azurecr.io/wlsaks-auxiliary-image:1.0, attempt 1 The push refers to repository [wlsaksacru6jyly7kztoqu.azurecr.io/wlsaks-auxiliary-image] ee589b3cda86: Preparing c1fd1adab3b9: Preparing d51af96cf93e: Preparing c1fd1adab3b9: Pushed d51af96cf93e: Pushed ee589b3cda86: Pushed 1.0: digest: sha256:c813eb75576eb07a179c3cb4e70106ca7dd280f933ab33a2f6858de673b12eac size: 946 2024/08/28 03:06:21 Successfully pushed image: wlsaksacru6jyly7kztoqu.azurecr.io/wlsaks-auxiliary-image:1.0 2024/08/28 03:06:21 Step ID: build marked as successful (elapsed time in seconds: 8.780235) 2024/08/28 03:06:21 Populating digests for step ID: build... 2024/08/28 03:06:22 Successfully populated digests for step ID: build 2024/08/28 03:06:22 Step ID: push marked as successful (elapsed time in seconds: 1.980158) 2024/08/28 03:06:22 The following dependencies were found: 2024/08/28 03:06:22 - image: registry: wlsaksacru6jyly7kztoqu.azurecr.io repository: wlsaks-auxiliary-image tag: "1.0" digest: sha256:c813eb75576eb07a179c3cb4e70106ca7dd280f933ab33a2f6858de673b12eac runtime-dependency: registry: registry.hub.docker.com repository: library/busybox tag: latest digest: sha256:9ae97d36d26566ff84e8893c64a6dc4fe8ca6d1144bf5b87b2b85a32def253c7 git: {} Run ID: ca1 was successful after 14s
映像會在成功建置之後推送至 ACR。
您可以執行
az acr repository show
來測試是否已成功將映像推送至遠端存放庫,如下列範例所示:az acr repository show --name ${ACR_NAME} --image ${IMAGE}
此命令所產生的輸出應該與下列範例類似:
{ "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。 使用下列步驟,將輔助映射套用至 WebLogic Server 叢集。
使用
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)) export ACR_LOGIN_SERVER=$(az acr show --name ${ACR_NAME} --query "loginServer" --output tsv) cat <<EOF >patch-file.json [ { "op": "replace", "path": "/spec/restartVersion", "value": "${VERSION}" }, { "op": "add", "path": "/spec/configuration/model/auxiliaryImages", "value": [{"image": "$ACR_LOGIN_SERVER/$IMAGE", "imagePullPolicy": "IfNotPresent", "sourceModelHome": "/auxiliary/models", "sourceWDTInstallHome": "/auxiliary/weblogic-deploy"}] }, { "op": "remove", "path": "/spec/configuration/model/configMap" } ] EOF kubectl -n ${WLS_DOMAIN_NS} patch domain ${WLS_DOMAIN_UID} \ --type=json \ --patch-file patch-file.json
由於資料庫連線是在輔助映射中設定,請執行下列命令來移除 ConfigMap:
kubectl delete configmap sample-domain1-wdt-config-map -n ${WLS_DOMAIN_NS}
在繼續之前,請等候下列命令產生下列系統管理伺服器和受管理伺服器的輸出:
kubectl get pod -n ${WLS_DOMAIN_NS} -w
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
狀態時,才能繼續。
驗證部署的功能
檢視 WebLogic Server 系統管理主控台和範例應用程式,以使用下列步驟來驗證部署的功能:
將 adminConsoleExternalUrl 值貼入已連線網際網路的網頁瀏覽器的網址列。 您應該會看到熟悉的 WebLogic Server 管理控制台登入畫面。
使用您在從 Azure 入口網站中部署 WebLogic Server 時所輸入的使用者名稱
weblogic
和密碼來登入。 請記住此值是wlsAksCluster2022
。在 [網域結構] 方塊中,選取 [服務]。
在 [服務] 下方,選取 [資料來源]。
在 [JDBC 資料來源摘要] 面板中,選取 [監視]。 您的畫面看起來應該與下列範例類似。 您會發現正在受控伺服器上執行資料來源的狀態。
在 [網域結構] 方塊中,選取 [部署]。
在 [部署] 資料表中,應該會有一個資料列。 名稱應該與 appmodel.yaml 檔案中的
Application
值相同。 選取名稱。選取 [測試] 索引標籤。
選取 [weblogic-cafe]。
在 [weblogic-cafe 的設定] 面板中,選取 [測試] 索引標籤。
展開 [weblogic-cafe] 旁邊的 + 圖示。 您的畫面看起來應該與下列範例類似。 特別的是,您應該會在 [測試點] 資料行中看到與
http://sample-domain1-managed-server1:8001/weblogic-cafe/index.xhtml
類似的值。注意
無法選取 [測試點] 資料行中的超連結,因為我們未使用其執行所在的外部 URL 來設定系統管理主控台。 本文透過示範,僅顯示 WebLogic Server 系統管理主控台。 執行 AKS 上的 WebLogic Server 時,請不要將 WebLogic Server 系統管理主控台用於任何永久性設定變更。 AKS 上 WebLogic Server 的雲端原生設計需要任何永久性設定都必須在初始 Docker 映像中代表,或使用 CI/CD 技術將其套用至執行中 AKS 叢集 (例如更新模型),如 Oracle 文件中所述。
瞭解您所部署範例應用程式的
context-path
值。 如果您已部署建議的範例應用程式,則context-path
是weblogic-cafe
。將
context-path
附加至 clusterExternalUrl 值,以建構範例應用程式的完整 URL。 如果您已部署建議的範例應用程式,則完整 URL 應該與http://wlsgw202401-wls-aks-domain1.eastus.cloudapp.azure.com/weblogic-cafe/
類似。將完整 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 或虛擬機器上執行 WebLogic Server:
如需 Azure Marketplace 中 Oracle WebLogic 供應項目的詳細資訊,請參閱 Azure 上的 Oracle WebLogic Server。 這些供應項目全都是自備授權。 其會假設您已向 Oracle 取得適當授權,並已獲得在 Azure 中執行供應項目的適當授權。