教學課程:根據 Prometheus 計量,使用 KEDA 調整器將 Oracle WebLogic Server 遷移至 Azure Kubernetes Service (AKS)
本教學課程說明如何將 Oracle WebLogic Server (WLS) 移轉至 Azure Kubernetes Service (AKS),並根據 Prometheus 計量設定自動水平調整。
在本教學課程中,您將完成下列工作:
- 瞭解您可以使用 WebLogic Monitoring Export 導出哪些 WebLogic 應用程式計量。
- 使用 Azure Marketplace 供應專案在 AKS 上部署和執行 WebLogic 應用程式。
- 使用 Azure Marketplace 供應專案啟用 Prometheus 的 Azure 監視器受控服務。
- 使用 Azure Marketplace 供應專案將 WLS 計量饋送至 Azure 監視器工作區。
- 使用 Azure Marketplace 供應專案將 Kubernetes 事件驅動自動調整 (KEDA) 與 AKS 叢集整合。
- 根據 Prometheus 計量建立 KEDA 縮放程式。
- 驗證調整器組態。
下圖說明您所建置的架構:
AKS 供應專案的 Oracle WebLogic Server 會在 AKS 上執行 WLS 運算符和 WLS 網域。 WLS 運算子會管理使用 映射 網域來源類型中的模型所部署的 WLS 網域。 若要深入瞭解 WLS 運算符,請參閱 Oracle WebLogic Kubernetes 運算符。
WebLogic Monitoring 導出工具會抓取 WebLogic Server 計量,並將其饋送至 Prometheus。 匯出工具會使用 WebLogic Server 12.2.1.x RESTful 管理介面 來存取運行時間狀態和計量。
Prometheus 的 Azure 監視器受控服務會根據 Cloud Native Computing Foundation 的 Prometheus 專案,使用與 Prometheus 相容的監視解決方案,大規模收集及儲存 WLS 的計量。 如需更多資訊,請參閱適用於 Prometheus 的 Azure 監視器受控服務。
本文整合 KEDA 與您的 AKS 叢集,以根據來自 Azure 監視器工作區的 Prometheus 計量調整 WLS 叢集。 KEDA 會監視 Prometheus 的 Azure 監視器受控服務,並將該數據饋送給 AKS 和水準 Pod 自動調整程式 (HPA),以推動 WLS 工作負載的快速調整。
預設會匯出下列 WLS 狀態和計量。 您可以設定匯出工具以視需要匯出其他計量。 如需 WebLogic Monitoring 匯出工具組態和使用方式的詳細描述,請參閱 WebLogic Monitoring 導出工具。
必要條件
- Azure 訂用帳戶。 如果您沒有 Azure 訂用帳戶,請在開始前建立免費帳戶。
- 請確定您有訂用
Owner
帳戶中的角色或Contributor
和User Access Administrator
角色。 您可以依照使用 Azure 入口網站 列出 Azure 角色指派中的步驟來確認指派。 - 使用已安裝 WSL、GNU/Linux 或 macOS 的 Windows 準備本機電腦。
- 安裝 Azure CLI 2.54.0 版或更高版本以執行 Azure CLI 命令。
- 安裝和設定 kubectl。
- 安裝 cURL。
- 具有 Oracle 單一登入 (SSO) 帳戶的認證。 若要建立帳戶,請參閱建立 Oracle 帳戶。
- 使用下列步驟來接受 WLS 的授權條款:
- 請造訪 Oracle Container Registry,並登入。
- 如果您有支援權利,則請選取 [中介軟體],然後搜尋並選取 [weblogic_cpu]。
- 如果您沒有來自 Oracle 的支援權利,則請選取 [中介軟體],然後搜尋並選取 [weblogic]。
- 接受授權合約。
準備範例應用程式
本文使用來自 weblogic-kubernetes-operator 存放庫的 testwebapp 作為範例應用程式。
使用下列命令來下載預先建置的範例應用程式,並將其展開至目錄。 由於本文會寫入數個檔案,因此這些命令會建立最上層目錄以包含所有專案。
export BASE_DIR=$PWD/wlsaks
mkdir $BASE_DIR && cd $BASE_DIR
curl -L -o testwebapp.war https://aka.ms/wls-aks-testwebapp
unzip -d testwebapp testwebapp.war
修改範例應用程式
本文使用計量 openSessionsCurrentCount
來相應增加和相應減少 WLS 叢集。 根據預設,WebLogic Server 上的會話逾時為 60 分鐘。 若要快速觀察相應減少功能,請使用下列步驟來設定簡短逾時:
使用下列命令,使用 來指定會話逾時 150 秒
wls:timeout-secs
。 格式HEREDOC
可用來以所需的內容覆寫 testwebapp/WEB-INF/weblogic.xml 的檔案。cat <<EOF > testwebapp/WEB-INF/weblogic.xml <?xml version="1.0" encoding="UTF-8"?> <wls:weblogic-web-app xmlns:wls="http://xmlns.oracle.com/weblogic/weblogic-web-app" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd http://xmlns.oracle.com/weblogic/weblogic-web-app http://xmlns.oracle.com/weblogic/weblogic-web-app/1.4/weblogic-web-app.xsd"> <wls:weblogic-version>12.2.1</wls:weblogic-version> <wls:jsp-descriptor> <wls:keepgenerated>false</wls:keepgenerated> <wls:debug>false</wls:debug> </wls:jsp-descriptor> <wls:context-root>testwebapp</wls:context-root> <wls:session-descriptor> <wls:timeout-secs>150</wls:timeout-secs> </wls:session-descriptor> </wls:weblogic-web-app> EOF
使用下列命令來重新壓縮範例應用程式:
cd testwebapp && zip -r ../testwebapp.war * && cd ..
建立 Azure 儲存體 帳戶並上傳應用程式
使用下列步驟來建立記憶體帳戶和容器。 其中一些步驟會引導您前往其他指南。 完成這些步驟之後,您可以上傳範例應用程式以部署在 WLS 上。
- 登入 Azure 入口網站。
- 依照建立記憶體帳戶中的 步驟建立記憶體帳戶。 針對該文章中的值使用下列特製化:
- 建立記憶體帳戶的新資源群組。
- 在 [區域] 中,選取 [美國東部]。
- 針對 記憶體帳戶名稱,請使用與資源組名相同的值。
- 針對 [效能],請選取 [標準]。
- 其餘索引標籤不需要特製化。
- 繼續驗證並建立帳戶,然後返回本文。
- 遵循快速入門:使用 Azure 入口網站 上傳、下載及列出 Blob 中的建立容器一節中的步驟,在帳戶內建立記憶體容器。
- 在相同的文章中 ,請遵循上傳區塊 Blob 區段中的步驟來上傳 testwebapp.war 檔案。 然後,返回這篇文章。
使用 Azure Marketplace 供應專案在 AKS 上部署 WLS
在本節中,您會使用 AKS 供應專案的 Oracle WebLogic Server 在 AKS 上建立 WLS 叢集。 供應專案提供完整的功能集,可讓您輕鬆地在 AKS 上部署 WebLogic Server。 本文著重於供應項目的進階動態調整功能。 如需供應專案的詳細資訊,請參閱 在 Azure Kubernetes Service (AKS) 叢集上使用 WebLogic Server 部署 Java 應用程式。 如需供應專案的完整參考檔,請參閱 Oracle 檔。
此供應項目會實作下列水平自動調整選項:
Kubernetes 計量伺服器。 此選項會在部署時間設定所有必要的設定。 水準 Pod 自動調整程式 (HPA) 會部署計量選擇。 您可以在部署後進一步自定義 HPA。
WebLogic Monitoring 導出工具。 此選項會自動布建 WebLogic Monitoring 匯出工具、適用於 Prometheus 和 KEDA 的 Azure 監視器受控服務。 供應專案部署完成之後,WLS 計量會匯出並儲存在 Azure 監視器工作區中。 KEDA 已安裝,能夠從 Azure 監視器工作區擷取計量。
使用此選項,您必須在部署之後採取更多步驟來完成設定。
本文說明第二個選項。 使用下列步驟來完成設定:
在瀏覽器中開啟 AKS 供應專案的 Oracle WebLogic Server,然後選取 [建立]。 您應該會看到 供應專案的 [基本] 窗格。
使用下列步驟填寫 [基本] 窗格:
- 請確定 [ 訂用帳戶 ] 所顯示的值與必要條件區段中所列角色的值相同。
- 您必須在空的資源群組中部署供應項目。 在 [資源群組] 字段中,選取 [新建] 並填入資源群組的唯一值 ,例如 wlsaks-eastus-20240109。
- 在 [實例詳細數據] 底下,針對 [區域],選取 [美國東部]。
- 在 [認證 WebLogic] 底下,分別提供 WebLogic 系統管理員和 WebLogic 模型加密的密碼。 請保留 WebLogic Administrator 的使用者名稱和密碼。
- 在 [選擇性基本設定] 旁,選取 [ 否]。
- 在 [選擇性基本組態] 下,將 [動態叢集大小上限] 設定為 10。 這個值可讓您觀察自動調整行為。
選取 [下一步] ,然後移至 [AKS ] 索引標籤。
在 [影像選取] 底下,使用下列步驟:
- 如需 Oracle 單一登錄驗證的使用者名稱,請從必要條件填入 Oracle SSO 用戶名稱。
- 如需 Oracle 單一登錄驗證的密碼,請從必要條件填入您的 Oracle SSO 認證。
在 [應用程式] 底下,使用下列步驟:
將預設值 保留在 [TLS/SSL 組態 ] 窗格中。 選取 [下一步 ] 以移至 [負載平衡 ] 窗格,然後使用下列步驟:
- 保留 [為管理控制台建立輸入] 以外的 所有選項的預設值。請確定沒有路徑 /console* 的應用程式,這會導致與管理控制台路徑發生衝突。 針對此選項,選取 [ 是]。
- 保留其餘欄位的預設值。
- 選取 [下一步]。
保留 DNS 窗格的預設值,然後選取 [下一步] 以移至 [資料庫] 窗格。
保留 [資料庫] 窗格的預設值,選取 [下一步] 以移至 [自動調整] 窗格,然後使用下列步驟:
- 在 [布建水平自動調整的資源?] 旁,選取 [ 是]。
- 在 [水平自動調整設定] 底下,選取 [選取自動調整] 選項旁的 [WebLogic Monitor 導出工具] [進階自動調整]。
- 選取 [檢閱 + 建立]。
等到 執行最終驗證 ...成功完成,然後選取 [ 建立]。 一段時間之後,您應該會看到 [部署進行中] 頁面。
如果您在執行最終驗證期間 看到任何問題...,請加以修正,然後再試一次。
連線到 AKS 叢集
下列各節需要已安裝 的 kubectl
終端機來管理 WLS 叢集。 若要在本機安裝 kubectl
,請使用 az aks install-cli 命令。
使用下列步驟連線到 AKS 叢集:
- 開啟 Azure 入口網站,然後移至您在使用 Azure Marketplace 供應專案部署 AKS 上的 WLS 一節中布建的資源群組。
- 從資源清單中選取 Kubernetes 服務類型的資源。
- 選取 Connect。 線上 AKS 叢集的指引隨即出現。
- 選取 [Azure CLI ],然後依照步驟連線到本機終端機中的 AKS 叢集。
從 Azure 監視器工作區擷取計量
使用下列步驟來查看使用 Prometheus 查詢語言 (PromQL) 查詢在 Azure 監視器工作區中的計量:
在 Azure 入口網站 中,檢視您在使用 Azure Marketplace 供應專案部署 AKS 上的 WLS 一節中使用的資源群組。
選取 Azure 監視器工作區類型的資源。
在 [受控 Prometheus] 下,選取 [Prometheus 總管]。
輸入
webapp_config_open_sessions_current_count
以查詢開啟會話的目前帳戶,如下列螢幕快照所示:
注意
您可以藉由公開 WebLogic Monitoring 匯出工具,使用下列命令來存取計量:
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Service
metadata:
name: sample-domain1-cluster-1-exporter
namespace: sample-domain1-ns
spec:
ports:
- name: default
port: 8080
protocol: TCP
targetPort: 8080
selector:
weblogic.domainUID: sample-domain1
weblogic.clusterName: cluster-1
sessionAffinity: None
type: LoadBalancer
EOF
kubectl get svc -n sample-domain1-ns -w
等候數據列中EXTERNAL-IP
的數據sample-domain1-cluster-1-exporter
行切換<pending>
至IP位址。 然後,在瀏覽器中開啟 URL http://<exporter-public-ip>:8080/metrics
,並使用您在部署供應專案時指定的認證登入。 您可以在這裡找到所有可用的計量。 您可以在 PromQL 視窗中輸入其中任何一項,以在 Azure 監視器中顯示它們。 例如, heap_free_percent
顯示有趣的圖表。 若要在載入套用至應用程式時監看記憶體壓力,請將 [自動重新整理] 和 [時間範圍] 設定為最小可能的間隔,並將索引卷標保持開啟狀態。
建立 KEDA 縮放程式
縮放器會定義 KEDA 應如何及何時縮放部署。 本文使用 Prometheus 縮放程式 ,從 Azure 監視器工作區擷取 Prometheus 計量。
本文使用 openSessionsCurrentCount
做為觸發程式。 此計量的規則如下所述。 當平均開啟的會話計數超過 10 時,請相應增加 WLS 叢集,直到達到複本大小上限為止。 否則,請相應減少 WLS 叢集,直到達到其最小復本大小為止。 下表列出重要參數:
參數名稱 | 值 |
---|---|
serverAddress |
Azure 監視器工作區的查詢端點。 |
metricName |
webapp_config_open_sessions_current_count |
query |
sum(webapp_config_open_sessions_current_count{app="app1"}) |
threshold |
10 |
minReplicaCount |
1 |
maxReplicaCount |
預設值是 5。 如果您在供應專案部署期間修改了叢集大小上限,請將 取代為叢集大小上限。 |
由於您在部署時選取 了 WebLogic Monitoring 匯出工具 ,因此 KEDA 縮放程式已準備好進行部署。 下列步驟示範如何設定 KEDA 縮放程式以搭配 AKS 叢集使用:
開啟 Azure 入口網站,然後移至您在使用 Azure Marketplace 供應專案部署 AKS 上的 WLS 一節中布建的資源群組。
在瀏覽窗格的 [設定] 區段中,選取 [部署]。 您會看到此資源群組的已排序部署清單,而且會先列出最新的部署。
捲動至此清單中的最舊項目。 這個項目對應至您在上一節中啟動的部署。 選取最舊的部署,其名稱開頭類似
oracle.20210620-wls-on-aks
。選取 [輸出]。 這個選項會顯示部署的輸出清單。
kedaScalerServerAddress 值是儲存 WLS 計量的伺服器位址。 KEDA 能夠從位址存取和擷取計量。
shellCmdtoOutputKedaScalerSample 值是
base64
scaler 範例的字串。 複製值並在終端機中執行。 命令看起來應類似下列範例:echo -e YXBpVm...XV0aAo= | base64 -d > scaler.yaml
此命令會在目前目錄中產生 scaler.yaml 檔案。
metric:
修改 scaler.yamlquery:
和 行,如下列範例所示:metricName: webapp_config_open_sessions_current_count query: sum(webapp_config_open_sessions_current_count{app="app1"})
注意
當您使用供應專案部署應用程式時,預設會命名
app1
它。 您可以使用下列步驟來存取 WLS 管理主控台,以取得應用程式名稱:- 使用上述步驟來檢視部署輸出。
- adminConsoleExternalUrl 值是 WLS 管理控制台的完整公用因特網可見連結。 選取欄位值旁邊的複製圖示,以將連結複製至剪貼簿。
- 將值貼到您的瀏覽器,然後開啟 WLS 管理控制台。
- 使用您在使用 Azure Marketplace 供應專案部署 AKS 上的 WLS 一節中儲存的 WLS 系統管理員帳戶登入。
- 在 [定義域結構] 底下,選取 [部署]。 您找到 列出 app1 。
- 選取 app1 以尋找應用程式的 [名稱] 值。
app1
使用app1
做為查詢中的應用程式名稱。
如有需要,請修改
maxReplicaCount:
scaler.yaml 中的行,如下列範例所示。 設定此值高於您在 AKS 索引標籤上的部署時間所指定的值是錯誤的。maxReplicaCount: 10
使用下列命令來套用 scaler.yaml 來建立 KEDA 調整器規則:
kubectl apply -f scaler.yaml
KEDA 需要幾分鐘的時間,才能從 Azure 監視器工作區擷取計量。 您可以使用下列命令來監看縮放程式狀態:
kubectl get hpa -n sample-domain1-ns -w
當調整器準備好運作之後,輸出看起來會類似下列內容。 資料列中的
TARGETS
值會從<unknown>
切換為0
。NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE keda-hpa-azure-managed-prometheus-scaler Cluster/sample-domain1-cluster-1 0/10 (avg) 1 5 2 15s
測試自動調整
現在,您已準備好觀察自動調整功能。 本文會使用 curl
開啟新的會話,以存取應用程式。 平均會話計數大於 10 之後,就會發生相應增加動作。 會話會持續 150 秒,而開啟的會話計數會在會話到期時減少。 在平均會話計數小於 10 之後,就會發生相應減少動作。 使用下列步驟來造成相應增加和相應減少動作:
使用下列步驟來取得應用程式 URL:
- 使用上述步驟來檢視部署輸出。
- clusterExternalUrl 值是此 AKS 叢集上部署於 WLS 中範例應用程式的完整公用因特網可見連結。 若要複製剪貼簿的連結,請選取域值旁的複製圖示。
- 存取 testwebapp.war 的 URL 是
${clusterExternalUrl}testwebapp
, 例如http://wlsgw202403-wlsaks0314-domain1.eastus.cloudapp.azure.com/testwebapp/
。
curl
執行 命令以存取應用程式並造成新的工作階段。 下列範例會開啟 22 個新的工作階段。 會話會在 150 秒後過期。 以 您的 取代WLS_CLUSTER_EXTERNAL_URL 值。COUNTER=0 MAXCURL=22 WLS_CLUSTER_EXTERNAL_URL="http://wlsgw202403-wlsaks0314-domain1.eastus.cloudapp.azure.com/" APP_URL="${WLS_CLUSTER_EXTERNAL_URL}testwebapp/" while [ $COUNTER -lt $MAXCURL ]; do curl ${APP_URL}; let COUNTER=COUNTER+1; sleep 1;done
在兩個不同的殼層中,使用下列命令:
使用下列命令觀察縮放程式:
kubectl get hpa -n sample-domain1-ns -w
這個指令會產生類似下列範例的輸出:
$ kubectl get hpa -n sample-domain1-ns -w NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE keda-hpa-azure-managed-prometheus-scaler Cluster/sample-domain1-cluster-1 0/10 (avg) 1 10 1 24m keda-hpa-azure-managed-prometheus-scaler Cluster/sample-domain1-cluster-1 0/10 (avg) 1 10 1 24m keda-hpa-azure-managed-prometheus-scaler Cluster/sample-domain1-cluster-1 5/10 (avg) 1 10 1 26m keda-hpa-azure-managed-prometheus-scaler Cluster/sample-domain1-cluster-1 22/10 (avg) 1 10 1 27m keda-hpa-azure-managed-prometheus-scaler Cluster/sample-domain1-cluster-1 7334m/10 (avg) 1 10 3 29m keda-hpa-azure-managed-prometheus-scaler Cluster/sample-domain1-cluster-1 14667m/10 (avg) 1 10 3 48m keda-hpa-azure-managed-prometheus-scaler Cluster/sample-domain1-cluster-1 0/10 (avg) 1 10 3 30m keda-hpa-azure-managed-prometheus-scaler Cluster/sample-domain1-cluster-1 0/10 (avg) 1 10 3 35m keda-hpa-azure-managed-prometheus-scaler Cluster/sample-domain1-cluster-1 0/10 (avg) 1 10 1 35m keda-hpa-azure-managed-prometheus-scaler Cluster/sample-domain1-cluster-1 0/10 (avg) 1 10 5 53m
在不同的殼層中,使用下列命令來觀察 WLS Pod:
kubectl get pod -n sample-domain1-ns -w
這個指令會產生類似下列範例的輸出:
$ kubectl get pod -n sample-domain1-ns -w NAME READY STATUS RESTARTS AGE sample-domain1-admin-server 2/2 Running 0 28h sample-domain1-managed-server1 2/2 Running 0 28h sample-domain1-managed-server1 2/2 Running 0 28h sample-domain1-managed-server2 0/2 Pending 0 0s sample-domain1-managed-server2 0/2 Pending 0 0s sample-domain1-managed-server2 0/2 ContainerCreating 0 0s sample-domain1-managed-server3 0/2 Pending 0 0s sample-domain1-managed-server3 0/2 Pending 0 0s sample-domain1-managed-server3 0/2 ContainerCreating 0 0s sample-domain1-managed-server3 1/2 Running 0 1s sample-domain1-admin-server 2/2 Running 0 95m sample-domain1-managed-server1 2/2 Running 0 94m sample-domain1-managed-server2 2/2 Running 0 56s sample-domain1-managed-server3 2/2 Running 0 55s sample-domain1-managed-server4 1/2 Running 0 9s sample-domain1-managed-server5 1/2 Running 0 9s sample-domain1-managed-server5 2/2 Running 0 37s sample-domain1-managed-server4 2/2 Running 0 42s sample-domain1-managed-server5 1/2 Terminating 0 6m46s sample-domain1-managed-server5 1/2 Terminating 0 6m46s sample-domain1-managed-server4 1/2 Running 0 6m51s sample-domain1-managed-server4 1/2 Terminating 0 6m53s sample-domain1-managed-server4 1/2 Terminating 0 6m53s sample-domain1-managed-server3 1/2 Running 0 7m40s sample-domain1-managed-server3 1/2 Terminating 0 7m45s sample-domain1-managed-server3 1/2 Terminating 0 7m45s
Azure 監視器工作區中的圖表看起來類似下列螢幕快照:
清除資源
若要避免 Azure 費用,您應該清除不必要的資源。 當您不再需要叢集時,請使用 az group delete 命令加以刪除。 下列命令會移除資源群組、容器服務、容器登錄和所有相關資源:
az group delete --name <wls-resource-group-name> --yes --no-wait
az group delete --name <ama-resource-group-name> --yes --no-wait
下一步
繼續探索下列參考,以取得更多選項,以建置自動調整解決方案並在 Azure 上執行 WLS: