本文提供在 Azure 上手動部署 Open/WebSphere Liberty 的逐步指引。
具體來說,本文說明如何完成下列工作:
- 在 Open Liberty 或 WebSphere Liberty 運行時間上執行 Java、Java Enterprise Edition (EE)、Jakarta EE 或 MicroProfile 應用程式。
- 使用 Liberty 容器映射建置應用程式 Docker 映射
az acr build
。 - 使用 Liberty 作員將容器化應用程式部署至 Azure Kubernetes Service (AKS) 叢集。
自由作員可簡化在 Kubernetes 叢集上執行之應用程式的部署和管理。 透過 Open Liberty Operator 或 WebSphere Liberty Operator,您還可以執行更進階的操作,例如收集追蹤資料和轉儲。
如需使用 Azure 入口網站上的 Marketplace 解決方案更快速地自動化您的 AKS 旅程,請參閱 在 Azure Kubernetes Service (AKS) 叢集中使用 Open Liberty/WebSphere Liberty 部署 Java 應用程式。
如需 Open Liberty 的詳細資訊,請參閱 Open Liberty 專案頁面 (英文)。 如需 IBM WebSphere Liberty 的詳細資訊,請參閱 WebSphere Liberty 產品頁面 (英文)。
本文旨在協助您快速進行部署。 移至實際執行環境之前,您應該先探索微調 Liberty。
若您有興趣與開發 Azure 上 WebSphere 解決方案的工程團隊緊密合作以進行移轉,請填寫這份簡短的 WebSphere 移轉問卷,並附上您的連絡資訊。 專案經理、結構設計師和工程師組成的小組會立即連絡您,以展開緊密合作。
必要條件
- Azure 訂用帳戶。 如果您沒有 Azure 訂用帳戶,請在開始前建立免費帳戶。
- Azure CLI 2.71.0+ 版
- Java Standard Edition (SE), 版本 17 - 例如 Eclipse Open J9。
- Maven 3.5.0 版+
- Git
- Azure 訂用帳戶中的
Owner
角色或是Contributor
和User Access Administrator
角色。 您可以透過使用 Azure 入口網站中列出 Azure 角色指派的步驟來確認指派。
登入 Azure
如果您尚未這麼做,請使用下列步驟來登入您的 Azure 訂用帳戶:
開啟 Azure CLI 或 PowerShell,然後使用
az login
登入。 請遵循您終端機上顯示的步驟,完成驗證程序。 如需查看其他登入選項,請參閱 使用 Azure CLI 登入 Azure。注意
如果您有多個與 Azure 認證相關聯的 Azure 租使用者,您必須指定您要登入的租使用者。 您可以使用
--tenant
選項來指定租戶,例如az login --tenant contoso.onmicrosoft.com
。查找用
az version
所安裝的版本和相依的程式庫。使用
az upgrade
升級至最新版本。
注意
使用 Azure CLI 時,如果系統提示您安裝 Azure CLI 擴充功能,請執行此動作。 如需延伸模組的詳細資訊,請參閱透過 Azure CLI 使用和管理延伸模組 (部分機器翻譯)。
您可以在 PowerShell 中執行大部分的 Azure CLI 命令,與 Bash 中的命令相同。 只有在使用變數時,差異才會存在。 在下列各節中,差異會在不同的標籤中處理,視需要而定。
建立資源群組
Azure 資源群組是部署及管理 Azure 資源所在的邏輯群組。
使用 java-liberty-project
在 az group create
位置建立名為 eastus2
的資源群組。 此資源群組稍後會用於建立 Azure Container Registry 實例和 AKS 叢集。
export RESOURCE_GROUP_NAME=java-liberty-project
az group create --name $RESOURCE_GROUP_NAME --location eastus2
建立容器登錄實例
使用 az acr create
來建立容器登錄實例。 下列範例會建立名為 <your-unique-ACR-name>
的容器登錄實例。 將此佔位符替換為 Azure 中唯一的值。
注意
本文使用 Azure Container Registry 的建議無密碼驗證機制。 使用 docker login
取得使用者名稱和密碼後,仍可以搭配 az acr credential show
使用此使用者名稱和密碼。 然而,使用使用者名稱和密碼比無密碼驗證安全性更低。
export REGISTRY_NAME=<your-unique-ACR-name>
az acr create \
--resource-group $RESOURCE_GROUP_NAME \
--name $REGISTRY_NAME \
--sku Basic
在短時間內,您應該會看到包括下列幾行的 JSON 輸出:
"provisioningState": "Succeeded",
"publicNetworkAccess": "Enabled",
"resourceGroup": "java-liberty-project",
擷取容器登錄實例的登入伺服器名稱。 當您稍後將應用程式映射部署至 AKS 叢集時,需要此值。
export LOGIN_SERVER=$(az acr show \
--name $REGISTRY_NAME \
--query 'loginServer' \
--output tsv)
建立 AKS 叢集
使用 az aks create
來建立 AKS 叢集,如下列範例所示。 此範例會建立名為 且具有一個節點的 myAKSCluster
AKS 叢集,並將容器登錄實例附加至該叢集。 命令需要幾分鐘的時間才能完成。
export CLUSTER_NAME=myAKSCluster
az aks create \
--resource-group $RESOURCE_GROUP_NAME \
--name $CLUSTER_NAME \
--node-count 1 \
--node-vm-size Standard_DS2_V2 \
--generate-ssh-keys \
--enable-managed-identity \
--attach-acr $REGISTRY_NAME
命令完成之後,它會傳回叢集的 JSON 格式資訊,包括下列輸出:
"nodeResourceGroup": "MC_java-liberty-project_myAKSCluster_eastus2",
"privateFqdn": null,
"provisioningState": "Succeeded",
"resourceGroup": "java-liberty-project",
連線到 AKS 叢集
使用下列步驟來管理 Kubernetes 叢集:
使用
kubectl
安裝az aks install-cli
,這是 Kubernetes 命令列用戶端。如以下範例所示:az aks install-cli
使用
az aks get-credentials
配置kubectl
以連接到 Kubernetes 叢集。 此命令會下載認證並設定 Kubernetes CLI 以使用它們,如下列範例所示:注意
此命令會使用 Kubernetes 組態檔的預設位置,也就是 ~/.kube/config。您可以使用 來指定 Kubernetes 組態檔
--file
的不同位置。az aks get-credentials \ --resource-group $RESOURCE_GROUP_NAME \ --name $CLUSTER_NAME \ --overwrite-existing \ --admin
使用
kubectl get
來傳回叢集節點清單來確認叢集的連線,如下列範例所示:kubectl get nodes
下列輸出範例會顯示上一個步驟中建立的單一節點。 請確定節點的狀態為
Ready
:NAME STATUS ROLES AGE VERSION aks-nodepool1-xxxxxxxx-yyyyyyyyyy Ready <none> 76s v1.29.9
建立 Azure SQL Database
使用下列步驟為您的應用程式建立 Azure SQL Database 單一資料庫:
使用下列命令來設定資料庫相關的環境變數。 以 Azure SQL 資料庫 伺服器的唯一名稱取代
<your-unique-sql-server-name>
。export SQL_SERVER_NAME=<your-unique-sql-server-name> export DB_NAME=demodb
使用下列命令建立單一資料庫,並將目前的登入用戶設定為 Microsoft Entra 系統管理員。如需詳細資訊,請參閱 快速入門:建立單一資料庫 - Azure SQL Database。
export ENTRA_ADMIN_NAME=$(az account show \ --query user.name \ --output tsv) az sql server create \ --resource-group $RESOURCE_GROUP_NAME \ --name $SQL_SERVER_NAME \ --enable-ad-only-auth \ --external-admin-principal-type User \ --external-admin-name $ENTRA_ADMIN_NAME \ --external-admin-sid $(az ad signed-in-user show --query id --output tsv) az sql db create \ --resource-group $RESOURCE_GROUP_NAME \ --name $DB_NAME \ --server $SQL_SERVER_NAME \ --edition GeneralPurpose \ --compute-model Serverless \ --family Gen5 \ --capacity 2
注意
您可以針對安全性考慮,建立已停用 SQL 驗證的 Azure SQL Server。 只有Microsoft Entra標識碼可用來向伺服器進行驗證。 如需啟用 SQL 驗證的詳細資訊,請參閱 az sql server create
。
使用服務連接器在 AKS 中建立服務連線
使用下列命令,使用 Microsoft Entra Workload ID 搭配 Service Connector,在 AKS 叢集與 SQL 資料庫之間建立連線。 如需詳細資訊,請參閱 使用服務連接器在AKS中建立服務連線。
# Register the Service Connector and Kubernetes Configuration resource providers
az provider register --namespace Microsoft.ServiceLinker --wait
az provider register --namespace Microsoft.KubernetesConfiguration --wait
# Install the Service Connector passwordless extension
az extension add \
--name serviceconnector-passwordless \
--upgrade \
--allow-preview true
# Retrieve the AKS cluster and Azure SQL Server resource IDs
export AKS_CLUSTER_RESOURCE_ID=$(az aks show \
--resource-group $RESOURCE_GROUP_NAME \
--name $CLUSTER_NAME \
--query id \
--output tsv)
export AZURE_SQL_SERVER_RESOURCE_ID=$(az sql server show \
--resource-group $RESOURCE_GROUP_NAME \
--name $SQL_SERVER_NAME \
--query id \
--output tsv)
# Create a user-assigned managed identity used for workload identity
export USER_ASSIGNED_IDENTITY_NAME=workload-identity-uami
az identity create \
--resource-group ${RESOURCE_GROUP_NAME} \
--name ${USER_ASSIGNED_IDENTITY_NAME}
# Retrieve the user-assigned managed identity resource ID
export UAMI_RESOURCE_ID=$(az identity show \
--resource-group ${RESOURCE_GROUP_NAME} \
--name ${USER_ASSIGNED_IDENTITY_NAME} \
--query id \
--output tsv)
# Create a service connection between your AKS cluster and your SQL database using Microsoft Entra Workload ID
az aks connection create sql \
--connection akssqlconn \
--client-type java \
--source-id $AKS_CLUSTER_RESOURCE_ID \
--target-id $AZURE_SQL_SERVER_RESOURCE_ID/databases/$DB_NAME \
--workload-identity $UAMI_RESOURCE_ID
對錯誤訊息進行疑難排解
az aks connection create sql
如果命令產生錯誤訊息,請在下列清單中尋找錯誤訊息,然後使用指示來針對問題進行疑難解答:
Dependency pyodbc can't be installed, please install it manually
此錯誤訊息表示
pyodbc
無法安裝套件,很可能是因為許可權問題。 使用下列步驟修正問題:執行下列命令來尋找與 Azure CLI 搭配運作的 Python 位置:
az --version
輸出應該包含
Python location
─ 例如Python location '/opt/az/bin/python3'
。複製
Python location
值。使用以下命令在
pyodbc
模式中安裝sudo
套件。 用您在上一個步驟中複製的 Python 位置取代<python-location>
。sudo <python-location> -m pip install pyodbc
libodbc.so:無法開啟共享物件檔案:沒有這類檔案或目錄
請手動安裝 ODBC 17/18 for SQL Server
這些錯誤表示
odbc
驅動程式未安裝。 使用下列步驟修正問題:注意
您應該使用 Microsoft Entra Workload ID,在不使用 SQL 驗證的情況下安全地存取 Azure SQL Database。 如果您需要使用 SQL 驗證,請忽略本節中的步驟,並使用使用者名稱和密碼連線到 Azure SQL Database。
如果您使用 Linux,請開啟 [安裝 Microsoft ODBC Driver for SQL Server (Linux)]。 如果您使用 MacOS,請開啟 [安裝 Microsoft ODBC Driver for SQL Server (macOS) 。
請依照指示安裝適用於 SQL Server 的 Microsoft ODBC Driver (18 或 17)。
再次使用
az aks connection create sql
來建立服務連線,如下列範例所示:az aks connection create sql \ --connection akssqlconn \ --client-type java \ --source-id $AKS_CLUSTER_RESOURCE_ID \ --target-id $AZURE_SQL_SERVER_RESOURCE_ID/databases/$DB_NAME \ --workload-identity $UAMI_RESOURCE_ID
取得服務連接器所建立的服務帳戶和密鑰
若要向 Azure SQL Database 進行驗證,請使用下列步驟:
請依照教學課程:將 AKS 應用程式連線至 Azure SQL Database中 更新您的容器部分的指示,來獲取由 Service Connector 創建的服務帳戶和密碼。 直接使用提供的 YAML 範例代碼段選項來建立部署。
注意
Service Connector 所建立的秘密包含值
AZURE_SQL_CONNECTIONSTRING
,這是 Azure SQL Database 的無密碼連接字串。 如需詳細資訊,請參閱 整合 Azure SQL Database 與 Service Connector中 使用者指派的受控識別 一節中的範例值。從 Kubernetes 部署 YAML 範例中標出部分複製
serviceAccountName
和secretRef.name
值,如下列範例所示:serviceAccountName: <service-account-name> containers: - name: raw-linux envFrom: - secretRef: name: <secret-name>
使用下列命令定義環境變數。 請務必將
<service-account-name>
和<secret-name>
替換為您在上一個步驟中複製的值。export SERVICE_ACCOUNT_NAME=<service-account-name> export SECRET_NAME=<secret-name>
下一節會使用這些值,將 Liberty 應用程式部署至 AKS 叢集。
安裝 Open Liberty 操作員
在本節中,您會在 AKS 叢集上安裝 Open Liberty 運算符,以裝載 Liberty 應用程式。
使用下列命令安裝 Open Liberty 運算子 :
注意
本指南會引導您安裝 Open Liberty 運算子。 若要使用 WebSphere Liberty作員,請參閱 使用 Kubernetes CLI 安裝 WebSphere Liberty 運算符。
# Install cert-manager Operator
export CERT_MANAGER_VERSION=v1.11.2
kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/${CERT_MANAGER_VERSION}/cert-manager.yaml
# Install the Open Liberty Operator
export OPERATOR_VERSION=1.4.2
mkdir -p overlays/watch-all-namespaces
wget https://raw.githubusercontent.com/OpenLiberty/open-liberty-operator/main/deploy/releases/${OPERATOR_VERSION}/kustomize/overlays/watch-all-namespaces/olo-all-namespaces.yaml -q -P ./overlays/watch-all-namespaces
wget https://raw.githubusercontent.com/OpenLiberty/open-liberty-operator/main/deploy/releases/${OPERATOR_VERSION}/kustomize/overlays/watch-all-namespaces/cluster-roles.yaml -q -P ./overlays/watch-all-namespaces
wget https://raw.githubusercontent.com/OpenLiberty/open-liberty-operator/main/deploy/releases/${OPERATOR_VERSION}/kustomize/overlays/watch-all-namespaces/kustomization.yaml -q -P ./overlays/watch-all-namespaces
mkdir base
wget https://raw.githubusercontent.com/OpenLiberty/open-liberty-operator/main/deploy/releases/${OPERATOR_VERSION}/kustomize/base/kustomization.yaml -q -P ./base
wget https://raw.githubusercontent.com/OpenLiberty/open-liberty-operator/main/deploy/releases/${OPERATOR_VERSION}/kustomize/base/open-liberty-crd.yaml -q -P ./base
wget https://raw.githubusercontent.com/OpenLiberty/open-liberty-operator/main/deploy/releases/${OPERATOR_VERSION}/kustomize/base/open-liberty-operator.yaml -q -P ./base
wget https://raw.githubusercontent.com/OpenLiberty/open-liberty-operator/main/deploy/releases/${OPERATOR_VERSION}/kustomize/base/open-liberty-roles.yaml -q -P ./base
kubectl create namespace open-liberty
kubectl apply --server-side -k overlays/watch-all-namespaces
# Remove the downloaded files
rm -rf overlays base
設定和建置應用程式映像
若要在 AKS 叢集上部署和執行您的 Liberty 應用程式,請使用 Open Liberty 映射 或 WebSphere Liberty 容器映射,將您的應用程式容器化為 Docker 映像。
請依照本節的步驟,在 Liberty 執行階段上部署應用程式範例。 這些步驟會使用 Maven。
查看應用程式
使用下列命令複製本指南的範例程式碼。 此範例位於 Azure Kubernetes Service 範例 GitHub 存放庫中的 Open Liberty/WebSphere Liberty 中,其中包含一些範例。 本文使用 java-app
範例。
git clone https://github.com/Azure-Samples/open-liberty-on-aks.git
cd open-liberty-on-aks
export BASE_DIR=$PWD
git checkout 20250424
如果您看到有關處於 detached HEAD
狀態的訊息,則可以忽略此訊息。 這只是表示您查看了一個標籤。 複製存放庫會建立下列檔案結構:
java-app
├─ src/main/
│ ├─ aks/
│ │ ├─ openlibertyapplication-passwordless-db.yaml
│ ├─ docker/
│ │ ├─ Dockerfile
│ │ ├─ Dockerfile-wlp
│ ├─ liberty/config/
│ │ ├─ server.xml
│ ├─ java/
│ ├─ resources/
│ ├─ webapp/
├─ pom.xml
├─ pom-azure-identity.xml
java、resources 及 webapp 目錄包含應用程式範例的原始程式碼。 程式碼會宣告並使用名為 jdbc/JavaEECafeDB
的資料來源。
在 aks 目錄中,openlibertyapplication-passwordless-db.yaml 檔案會用來部署應用程式映像。 在 docker 目錄中,有兩個檔案可透過 Open Liberty 或 WebSphere Liberty 建立應用程式映像。
在 liberty/config 目錄中,server.xml 檔案可用來設定 Open Liberty 和 WebSphere Liberty 叢集的資料庫連線。 它會定義 azure.sql.connectionstring
用來連線到 Azure SQL Database 的變數。
pom.xml檔案是 Maven 項目物件模型 (POM) 檔案,其中包含專案的組態資訊。
pom-azure-identity.xml 檔案會宣告 azure-identity
相依性,用來使用 Microsoft entra ID 向 Azure 服務進行驗證。
注意
此範例會使用 azure-identity
連結庫,使用 Microsoft Entra 驗證向 Azure SQL Database 進行驗證,這是基於安全性考慮的建議。 如需在 Liberty 應用程式中使用 SQL 驗證的詳細資訊,請參閱 使用 Java Database Connectivity (JDBC) 的關係資料庫連線。
建置專案
既然您已收集必要的屬性,請使用下列命令來建置應用程式。 專案的 POM 檔案會從環境中讀取許多變數。 作為 Maven 組建的一部分,這些變數可用來在位於 src/main/aks 的 YAML 檔案中填入值。 您可以視需要在 Maven 外部,為應用程式執行類似動作。
cd $BASE_DIR/java-app
# The following variables are used for deployment file generation into target/
export LOGIN_SERVER=${LOGIN_SERVER}
export SC_SERVICE_ACCOUNT_NAME=${SERVICE_ACCOUNT_NAME}
export SC_SECRET_NAME=${SECRET_NAME}
mvn clean install
mvn dependency:copy-dependencies -f pom-azure-identity.xml -DoutputDirectory=target/liberty/wlp/usr/shared/resources
建立 AKS 部署的映像檔
使用 az acr build
來建置映射,如下列範例所示:
cd $BASE_DIR/java-app/target
az acr build \
--registry ${REGISTRY_NAME} \
--image javaee-cafe:v1 \
.
命令 az acr build
會將 Dockerfile 中指定的成品上傳至容器登錄實例、建置映像,並將其儲存在容器登錄實例中。
將應用程式部署至 AKS 叢集
使用下列步驟在 AKS 叢集上部署 Liberty 應用程式:
使用下列命令來套用部署檔案:
cd $BASE_DIR/java-app/target # Apply deployment file kubectl apply -f openlibertyapplication-passwordless-db.yaml
使用下列命令判斷
OpenLibertyApplication
實例是否已建立:kubectl get openlibertyapplication javaee-cafe-cluster --watch
下列輸出是典型的。 使用 Ctrl+C 結束。
NAME IMAGE EXPOSED RECONCILED RESOURCESREADY READY WARNING AGE javaee-cafe-cluster <registry-name>.azurecr.io/javaee-cafe:v1 True True True 57s
使用下列命令來判斷作員所建立的部署是否已就緒:
kubectl get deployment javaee-cafe-cluster --watch
下列輸出是典型的:
NAME READY UP-TO-DATE AVAILABLE AGE javaee-cafe-cluster 0/3 3 0 20s
等到您看到
3/3
在READY
欄位下,以及3
在AVAILABLE
欄位下,然後使用Ctrl+C來停止kubectl
監看程式。
測試應用程式
當應用程式執行時,Kubernetes 負載平衡器服務會將應用程式前端公開至因特網。 此過程可能需要一些時間才能完成。
使用 kubectl get service
來取得服務的外部IP位址,如下列範例所示:
export APP_URL=http://$(kubectl get service javaee-cafe-cluster -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
echo $APP_URL
注意
如果您沒有從輸出看到有效的 URL,請稍候一段時間,然後再次執行命令。
在網頁瀏覽器中開啟 URL,並檢查應用程式首頁。 如果頁面未正確載入,請等應用程式啟動後再重新整理頁面。 您應該會看到應用程式複本的 Pod 名稱顯示在頁面左上角。 等候幾分鐘並重新整理頁面,以查看因 AKS 叢集的負載平衡功能而顯示的不同 Pod 名稱。
注意
目前,應用程式不會使用 HTTPS。 建議您使用您自己的憑證來啟用傳輸層安全性 (TLS)。 如需詳細資訊,請參閱 在 Azure Kubernetes Service (AKS) 上搭配輸入控制器使用 TLS。
清除資源
若要避免 Azure 費用,您應該清除不必要的資源。 不再需要叢集時,請使用 az group delete
移除資源群組、容器服務、容器登錄、資料庫和所有相關資源。
az group delete --name $RESOURCE_GROUP_NAME --yes --no-wait
下一步
您可以從本指南中使用的下列參考深入瞭解:
- 什麼是 Azure Kubernetes Service (AKS)?
- 教學課程:將 AKS 應用程式連線至 Azure SQL 資料庫
- 將 Azure SQL 資料庫 與 Service Connector 整合
- 使用 Microsoft Entra 驗證進行連線
- 開放自由
- Open Liberty 運算符
- Open Liberty Server 組態概觀
- Liberty Maven 外掛程式
- 開放自由圖像
- WebSphere Liberty 容器映像
若要將 Azure Cache for Redis 納入 Java 應用程式,請參閱 快速入門:在 Java 中使用 Azure Cache for Redis 搭配 Redisson Redis 客戶端。
若要探索在 Azure 上執行 WebSphere 產品的選項,請參閱 在 Azure 上執行 WebSphere 產品系列的解決方案為何?