在 Azure Kubernetes Service (AKS) 叢集上使用 Open Liberty 或 WebSphere Liberty 手動部署 Java 應用程式
本文提供在 Azure 上執行 Open/WebSphere Liberty 的逐步手動指引。
具體來說,本文說明如何完成下列工作:
- 在 Open Liberty 或 WebSphere Liberty 執行階段上執行 JAVA、JAVE EE、Jakarta EE 或 MicroProfile 應用程式。
- 使用 Liberty 容器映射建置應用程式 Docker 映射
az acr build
。 - 使用 Liberty 操作員將容器化應用程式部署至 Azure Kubernetes Service (AKS) 叢集。
Liberty Operator 可簡化在 Kubernetes 叢集上執行之應用程式的部署和管理。 透過 Open Liberty 或 WebSphere Liberty Operator,也可以執行更進階的作業,例如收集追蹤與傾印。
如需加速 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 訂用帳戶,請在開始前建立免費帳戶。
- 準備已安裝 Windows、macOS 或 Linux 的本機電腦。
-
安裝 Azure CLI 2.61.0 或更新版本以執行 Azure CLI 命令。
- 使用
az login
命令以使用 Azure CLI 登入。 請遵循您終端機上顯示的步驟,完成驗證程序。 如需其他登入選項,請參閱 使用 Azure CLI 登入 Azure。 - 出現提示時,請在第一次使用時安裝 Azure CLI 延伸模組。 如需延伸模組的詳細資訊,請參閱透過 Azure CLI 使用和管理延伸模組 (部分機器翻譯)。
- 執行
az version
以尋找已安裝的版本和相依連結庫。 若要升級至最新版本,請執行az upgrade
。
- 使用
- 安裝 Java Standard Edition (SE) 實作,版本 17 (例如 Eclipse Open J9)。
- 安裝 Maven 3.5.0 版或更新版本。
- 確定 已安裝 Git 。
- 確定您已獲指派訂用帳戶的
Owner
角色或Contributor
和User Access Administrator
角色。 您可以依照使用 Azure 入口網站 列出 Azure 角色指派中的步驟來確認指派。
登入 Azure
如果您尚未這麼做,請使用 az login
命令登入您的 Azure 訂用帳戶,並遵循螢幕上的指示。
az login
注意
您可以在 PowerShell 中執行大部分的 Azure CLI 命令,與 Bash 中的命令相同。 只有在使用變數時,差異才會存在。 在下列各節中,差異會在需要時在不同的索引卷標中解決。
如果您有多個與 Azure 認證相關聯的 Azure 租使用者,您必須指定您要登入的租使用者。 您可以使用 選項來執行此動作 --tenant
。 例如: az login --tenant contoso.onmicrosoft.com
。
建立資源群組
Azure 資源群組是部署及管理 Azure 資源所在的邏輯群組。
使用 eastus2
位置中的 az group create
命令,建立名為 java-liberty-project
的資源群組。 此資源群組稍後會用於建立 Azure Container Registry 實例和 AKS 叢集。
export RESOURCE_GROUP_NAME=java-liberty-project
az group create --name $RESOURCE_GROUP_NAME --location eastus2
建立 Container Registry 實例
使用 az acr create
命令來建立 Container Registry 實例。 下列範例會建立名為 youruniqueacrname
的 Container Registry 實例。 請確定 youruniqueacrname
Azure 中是唯一的。
注意
本文使用 Container Registry 的建議無密碼驗證機制。 使用 取得使用者名稱和密碼之後docker login
,仍然可以搭配 使用使用者名稱和密碼az acr credential show
。 使用使用者名稱和密碼比無密碼驗證不安全。
export REGISTRY_NAME=youruniqueacrname
az acr create \
--resource-group $RESOURCE_GROUP_NAME \
--name $REGISTRY_NAME \
--sku Basic
在短時間內,您應該會看到包含下列幾行的 JSON 輸出:
"provisioningState": "Succeeded",
"publicNetworkAccess": "Enabled",
"resourceGroup": "java-liberty-project",
接下來,擷取 Container Registry 實例的登入伺服器。 當您稍後將應用程式映射部署至 AKS 叢集時,需要此值。
export LOGIN_SERVER=$(az acr show \
--name $REGISTRY_NAME \
--query 'loginServer' \
--output tsv)
建立 AKS 叢集
使用 az aks create
命令來建立 AKS 叢集。 下列範例會建立名為 myAKSCluster
且具有一個節點的叢集。 此命令需要幾分鐘才能完成。
export CLUSTER_NAME=myAKSCluster
az aks create \
--resource-group $RESOURCE_GROUP_NAME \
--name $CLUSTER_NAME \
--node-count 1 \
--generate-ssh-keys \
--enable-managed-identity
在幾分鐘之後,此命令就會完成,並以 JSON 格式傳回叢集的相關資訊,包括下列輸出:
"nodeResourceGroup": "MC_java-liberty-project_myAKSCluster_eastus2",
"privateFqdn": null,
"provisioningState": "Succeeded",
"resourceGroup": "java-liberty-project",
將 Container Registry 實例附加至 AKS 叢集
執行 az aks update
命令,將 Container Registry 實例附加至 AKS 叢集,讓 AKS 叢集經過驗證以從 Container Registry 實例提取映射,如下列範例所示:
az aks update \
--resource-group $RESOURCE_GROUP_NAME \
--name $CLUSTER_NAME \
--attach-acr $REGISTRY_NAME
連線到 AKS 叢集
若要管理 Kubernetes 叢集,請使用 kubectl
Kubernetes 命令行用戶端。 若要在本機安裝 kubectl
,請使用 az aks install-cli
命令,如下列範例所示:
az aks install-cli
若要將 kubectl
設定為連線到 Kubernetes 叢集,請使用 az aks get-credentials
命令。 此命令會下載憑證並設定 Kubernetes CLI 以供使用。
az aks get-credentials \
--resource-group $RESOURCE_GROUP_NAME \
--name $CLUSTER_NAME \
--overwrite-existing \
--admin
注意
上述命令會使用 Kubernetes 組態檔的預設位置,~/.kube/config。您可以使用 --file
為 Kubernetes 組態檔指定不同的位置。
若要確認叢集的連線,請使用 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 資料庫 單一資料庫,以搭配您的應用程式使用。
首先,設定資料庫相關的環境變數。 以 Azure SQL 資料庫 伺服器的唯一名稱取代 <your-unique-sql-server-name>
。
export SQL_SERVER_NAME=<your-unique-sql-server-name>
export DB_NAME=demodb
在終端機中執行下列命令,在 Azure SQL 資料庫 中建立單一資料庫,並將目前的登入使用者設定為 Microsoft Entra 管理員。如需詳細資訊,請參閱快速入門:建立單一資料庫 - Azure SQL 資料庫。
export ENTRA_ADMIN_NAME=$(az ad signed-in-user show --query userPrincipalName --output tsv)
az sql server create \
--name $SQL_SERVER_NAME \
--resource-group $RESOURCE_GROUP_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 \
--server $SQL_SERVER_NAME \
--name $DB_NAME \
--edition GeneralPurpose \
--compute-model Serverless \
--family Gen5 \
--capacity 2
然後,將本機 IP 位址新增至 Azure SQL 資料庫 伺服器防火牆規則,以允許本機電腦稍後連線到資料庫以進行本機測試。
export AZ_LOCAL_IP_ADDRESS=$(curl -s https://whatismyip.akamai.com)
az sql server firewall-rule create \
--resource-group $RESOURCE_GROUP_NAME \
--server $SQL_SERVER_NAME \
--name AllowLocalIP \
--start-ip-address $AZ_LOCAL_IP_ADDRESS \
--end-ip-address $AZ_LOCAL_IP_ADDRESS
注意
您可以針對安全性考慮,建立已停用 SQL 驗證的 Azure SQL Server。 只有Microsoft Entra標識碼可用來向伺服器進行驗證。 如果您需要啟用 SQL 驗證,請參閱 az sql server create
以取得詳細資訊。
使用服務連接器在 AKS 中建立服務連線
執行下列命令,以使用 Microsoft Entra 工作負載 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
注意
建議您使用 Microsoft Entra 工作負載標識碼,在不使用 SQL 驗證的情況下安全地存取 Azure SQL Database。 如果您需要使用 SQL 驗證,請忽略本節中的上述步驟,並使用使用者名稱和密碼連線到 Azure SQL 資料庫。
取得服務連接器所建立的服務帳戶和密鑰
若要向 Azure SQL 資料庫 進行驗證,您必須取得 Service Connector 所建立的服務帳戶和秘密。 請遵循更新容器一節。 使用提供的 YAML 範例代碼段直接建立部署選項,然後執行下列步驟:
從範例 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 叢集。
注意
Service Connector 所建立的秘密包含 AZURE_SQL_CONNECTIONSTRING
,這是 Azure SQL 資料庫 的無密碼 連接字串。 如需詳細資訊,請參閱使用者 指派的受控識別驗證 範例值。
安裝 Open Liberty 操作員
在本節中,您會在 AKS 叢集上安裝 Open Liberty 運算符,以裝載 Liberty 應用程式。
# Install cert-manager Operator
CERT_MANAGER_VERSION=v1.11.2
kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/${CERT_MANAGER_VERSION}/cert-manager.yaml
# Install Open Liberty Operator
export OPERATOR_VERSION=1.4.0
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
設定和建置應用程式映像
若要在 AKS 叢集上部署和執行您的 Liberty 應用程式,請使用 Open Liberty 容器映像或 WebSphere Liberty 容器映射,將您的應用程式容器化為 Docker 映像。
請依照本節的步驟,在 Liberty 執行階段上部署應用程式範例。 這些步驟會使用 Maven。
查看應用程式
複製本指南的範例程式碼。 此範例位於 GitHub 上。 存放庫中有幾個範例。 本文使用 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 20241029
如果您看到有關處於 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 資料庫 的變數azure.sql.connectionstring
。
pom.xml檔案是 Maven 項目物件模型 (POM) 檔案,其中包含專案的組態資訊。
pom-azure-identity.xml檔案會azure-identity
宣告相依性,其用來使用 Microsoft entra ID 向 Azure 服務進行驗證。
注意
此範例會使用 azure-identity
連結庫,使用 Microsoft Entra 驗證向 Azure SQL Database 進行驗證,這是基於安全性考慮的建議。 如果您需要在 Liberty 應用程式中使用 SQL 驗證,請參閱 與 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
在本地測試您的專案
您現在可以在部署 Azure 之前,在本機執行和測試專案。 為了方便起見,請使用 liberty-maven-plugin
。 若要深入了解 liberty-maven-plugin
,請參閱使用 Maven 建置 Web 應用程式。 針對您的應用程式,您可以使用任何其他機制執行類似動作,例如本機 IDE。 您也可以考慮使用適用於容器開發的 liberty:devc
選項。 您可以在 liberty:devc
(英文) 中,閱讀更多有關 的內容。
注意
如果您選取了「無伺服器」資料庫部署,請確認您的 SQL 資料庫尚未進入暫停模式。 若要這樣做,其中一個方法是登入資料庫查詢編輯器,如快速入門:使用 Azure 入口網站 查詢編輯器 (預覽) 查詢 Azure SQL 資料庫 中所述。
使用
liberty:run
啟動應用程式。cd $BASE_DIR/java-app # The value of environment variable AZURE_SQL_CONNECTIONSTRING is read by configuration variable `azure.sql.connectionstring` in server.xml export AZURE_SQL_CONNECTIONSTRING="jdbc:sqlserver://$SQL_SERVER_NAME.database.windows.net:1433;databaseName=$DB_NAME;authentication=ActiveDirectoryDefault" mvn liberty:run
確認應用程式如預期運作。 如果成功,您應該會在命令輸出中看到類似
[INFO] [AUDIT] CWWKZ0003I: The application javaee-cafe updated in 1.930 seconds.
的訊息。 在瀏覽器中移至http://localhost:9080/
,確認應用程式可供存取,且所有函式都正常運作。按 Ctrl+C 來停止。 如果您被要求終止批次作業,請選取 [Y]。
當您完成時,請使用下列命令,刪除允許本機 IP 位址存取 Azure SQL 資料庫 的防火牆規則:
az sql server firewall-rule delete \
--resource-group $RESOURCE_GROUP_NAME \
--server $SQL_SERVER_NAME \
--name AllowLocalIP
建置 AKS 部署的映像
您現在可以執行 az acr build
命令來建置映像,如下列範例所示:
cd $BASE_DIR/java-app/target
az acr build \
--registry ${REGISTRY_NAME} \
--image javaee-cafe:v1 \
.
命令 az acr build
會將 Dockerfile 中指定的成品上傳至 Container Registry 實例、建置映像,並將其儲存在 Container Registry 實例中。
將應用程式部署至 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
您應該會看到類似下列範例的結果:
NAME IMAGE EXPOSED RECONCILED RESOURCESREADY READY WARNING AGE javaee-cafe-cluster jiangma102924acr.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
命令搭配 --watch
自變數,如下列範例所示:
kubectl get service javaee-cafe-cluster --watch
您應該會看到類似下列範例的結果:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
javaee-cafe-cluster LoadBalancer 10.0.251.169 52.152.189.57 80:31732/TCP 68s
EXTERNAL-IP
位址從 pending
變更為實際的公用IP位址之後,使用 Ctrl+C 來停止 kubectl
監控程序。
如果執行本節中的步驟與前一節中的步驟之間經過一些時間,請視需要確定資料庫為使用中。 請參閱先前關於資料庫暫停的注意事項。
開啟網頁瀏覽器至您服務的外部 IP 位址(52.152.189.57
如上述範例所示),以查看應用程式首頁。 如果頁面未正確載入,這是因為應用程式正在啟動。 您可以等候一段時間,稍後重新整理頁面。 您應該會看到應用程式複本的 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 應用程式連線至 Azure SQL 資料庫 (預覽)
- 整合 Azure SQL 資料庫 與 Service Connector
- 使用 Microsoft Entra 驗證進行連線
- Open Liberty
- Open Liberty Operator
- 開啟 [Liberty 伺服器設定]
- Liberty Maven 外掛程式
- 開啟 Liberty 容器映像
- WebSphere Liberty 容器映像
若要將 Azure Cache for Redis 納入 Java 應用程式,請參閱 使用 Azure Cache for Redis 搭配 Reis 用戶端在 Java 中使用 Redis。
若要探索在 Azure 上執行 WebSphere 產品的選項,請參閱 在 Azure 上執行 WebSphere 產品系列的解決方案為何?