在 Azure Kubernetes Service (AKS) 叢集上搭配 Open Liberty 或 WebSphere Liberty 使用 Java EE JCache
本文說明如何在部署至 AKS 的容器化應用程式中使用 Java EE JCache。
在本指南中,您將:
- 建立基礎結構,以在 Open Liberty 或 WebSphere Liberty 運行時間上執行 Java、Java EE、Jakarta EE 或 MicroProfile 應用程式。
- 使用 Azure Cache for Redis 支援的 Java EE JCache 作為會話快取。
- 使用 Open Liberty 或 WebSphere Liberty 容器映像,組建應用程式 Docker 映像。
- 使用 Open Liberty 運算子,將容器化應用程式部署至 AKS 叢集。
本文旨在協助您快速進行部署。 移至實際執行環境之前,您應該先探索微調 Liberty (英文)。
若您有興趣與開發 Azure 上 WebSphere 解決方案的工程團隊緊密合作以進行移轉,請填寫這份簡短的 WebSphere 移轉問卷,並附上您的連絡資訊。 專案經理、結構設計師和工程師組成的小組會立即連絡您,以展開緊密合作。
必要條件
- Azure 訂用帳戶。 如果您沒有 Azure 訂用帳戶,請在開始前建立免費帳戶。
- 使用已安裝類似 Unix 的作業系統 (例如 Ubuntu、macOS 或 Windows 子系統 Linux 版) 準備本機電腦。
- 安裝 Azure CLI 以執行 Azure CLI 命令。
- 使用 az login 命令以 Azure CLI 登入。 請遵循您終端機上顯示的步驟,完成驗證程序。 如需其他登入選項,請參閱 使用 Azure CLI 登入 Azure。
- 出現提示時,請在第一次使用時安裝 Azure CLI 延伸模組。 如需延伸模組的詳細資訊,請參閱 使用和管理 Azure CLI 的擴充功能。
- 執行 az version 以尋找已安裝的版本和相依程式庫。 若要升級至最新版本,請執行 az upgrade。
- 安裝 Java SE 實作第 17 版或更新版本 - 例如,Microsoft OpenJDK 的組建。
- 安裝 Maven 3.5.0 或更新版本。
- 安裝適用於作業系統的 Docker
- 確定 已安裝 Git 。
- 請確定您已獲
Owner
指派訂用帳戶的角色或Contributor
角色User Access Administrator
。 您可以依照列出使用者或群組的角色指派中的步驟來確認您的指派。
建立基礎結構
本節中的步驟會引導您在 Azure 上建立應用程式基礎結構。 完成這些步驟之後,您將會有 Azure Container Registry、Azure Kubernetes Service 叢集,以及執行範例應用程式的 Azure Cache for Redis 實例。
建立資源群組
Azure 資源群組是部署及管理 Azure 資源所在的邏輯群組。
使用 eastus 位置中的 az group create 命令,建立名為 java-liberty-project 的資源群組。 此資源群組稍後會用於建立 Azure Container Registry (ACR) 實例和 AKS 叢集。
export RESOURCE_GROUP_NAME=java-liberty-project
az group create --name $RESOURCE_GROUP_NAME --location eastus
建立 ACR 執行個體
使用 az acr create 命令建立 ACR 執行個體。 下列範例會建立名為 youruniqueacrname 的 ACR 實例。 請確定在 Azure 中 youruniqueacrname 是唯一的。
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",
或者,您可以依照快速入門:使用 Azure 入口網站 建立 Azure 容器登錄中的步驟來建立 Azure 容器登錄實例。
聯機到 ACR 實例
您必須先登入 ACR 實例,才能將映像推送至該實例。 執行下列命令來驗證連線:
export LOGIN_SERVER=$(az acr show \
--name $REGISTRY_NAME \
--resource-group $RESOURCE_GROUP_NAME \
--query 'loginServer' \
--output tsv)
az acr login \
--name $REGISTRY_NAME \
--resource-group $RESOURCE_GROUP_NAME
注意
不建議使用使用者名稱和密碼認證來授與容器登錄的存取權。 如果您的特定使用需求建議認證型存取是最佳方法,您可以使用 取得使用者名稱和密碼 az acr credential show
,並搭配 docker login
使用這些值。
如果您已成功登入 ACR 實體,您應該會在命令輸出結尾看到 Login Succeeded
。
如果您看到登入 Azure 容器登錄時發生問題,請參閱 針對登錄登入進行疑難解答。
建立 AKS 叢集
使用 az aks create 命令來建立 AKS 叢集,並將它映像提取許可權授與 ACR 實例。 下列範例會建立名為 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 \
--attach-acr $REGISTRY_NAME
幾分鐘后,命令會完成並傳回叢集的 JSON 格式資訊,包括下列幾行:
"nodeResourceGroup": "MC_java-liberty-project_myAKSCluster_eastus",
"privateFqdn": null,
"provisioningState": "Succeeded",
"resourceGroup": "java-liberty-project",
連線到 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
若要驗證針對您叢集的連線,請使用 kubectl get 命令來傳回叢集節點的清單。
kubectl get nodes
下列輸出範例會顯示上一個步驟中建立的單一節點。 請確定節點的狀態為 [ 就緒]。
NAME STATUS ROLES AGE VERSION
aks-nodepool1-xxxxxxxx-yyyyyyyyyy Ready agent 76s v1.18.10
安裝 Open Liberty 操作員
建立並連線到叢集之後,請執行下列命令來安裝 Open 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.3.3
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
建立 Azure Cache for Redis 執行個體
Azure Cache for Redis 會針對在 Open Liberty 或 WebSphere Liberty 伺服器內執行的 Java 應用程式,支持 HttpSession
持續性。 請遵循本節中的步驟來建立 Azure Cache for Redis 實例,並記下其聯機資訊。 我們稍後會使用這項資訊。
請遵循快速入門:在 Java 中使用 Azure Cache for Redis 中的步驟,但不包括瞭解 Java 範例。
注意
在建立 Azure Cache for Redis 一節的步驟 6 中,針對 [驗證] 選項選取 [存取金鑰驗證]。 此選項是範例應用程式使用 Re比森 用戶端連結庫連線到 Azure Cache for Redis 實例的必要選項。 如需詳細資訊,請參閱 Re設定 。
複製 Azure Cache for Redis 實例的主機名 和 主要存取密鑰 ,然後執行下列命令以新增環境變數:
export REDISCACHEHOSTNAME=<YOUR_HOST_NAME> export REDISCACHEKEY=<YOUR_PRIMARY_ACCESS_KEY>
建置應用程式
請遵循本節中的步驟來建置和容器化範例應用程式。 這些步驟使用 Maven、 liberty-maven-plugin
和 az acr build。 若要深入了解 liberty-maven-plugin
,請參閱使用 Maven 建置 Web 應用程式。
查看應用程式
使用下列命令來複製本指南的範例程序代碼。 此範例位於 GitHub 上的 open-liberty-on-aks 存放庫中。 存放庫中有幾個範例。 本文使用 java-app-jcache。
git clone https://github.com/Azure-Samples/open-liberty-on-aks.git
cd open-liberty-on-aks
git checkout 20240909
cd java-app-jcache
如果您看到有關處於「中斷連結的 HEAD」狀態的訊息,則可安全地略過此訊息。 那只是表示您已簽出標籤。
應用程式具有下列檔案結構:
java-app-jcache/
├── pom.xml
└── src
└── main
├── aks
│ └── openlibertyapplication.yaml
├── docker
│ ├── Dockerfile
│ └── Dockerfile-wlp
├── java
├── liberty
│ └── config
│ └── server.xml
├── redisson
│ └── redisson-config.yaml
├── resources
└── webapp
java、資源和 webapp 目錄包含範例應用程式的原始程式碼。
在 aks 目錄中,會使用部署檔案 openlibertyapplication.yaml 來部署應用程式映像。
在 docker 目錄中,我們會放置兩個 Dockerfiles。 Dockerfile 是用來使用 Open Liberty 建置映射,而 Dockerfile-wlp 則用來使用 WebSphere Liberty 建置映射。
在 liberty/config 目錄中, server.xml 檔案可用來設定 Open Liberty 和 WebSphere Liberty 叢集的會話快取。
在 re等目錄中,reisi-config.yaml 檔案是用來設定 Azure Cache for Redis 實例的連線。
將應用程式容器化
若要在 AKS 叢集上部署和執行您的 Liberty 應用程式,請使用下列步驟將應用程式容器化為 Docker 映像。 您可以使用 Open Liberty 容器映像 或 WebSphere Liberty 容器映射。
確認目前的工作目錄是 本機複製中的java-app-jcache 。
執行
mvn clean package
以封裝應用程式。執行
mvn -Predisson validate
以將Re組組態檔複製到指定的位置。 此步驟會將環境變數REDISCACHEHOSTNAME
的值插入REDISCACHEKEY
rerestricted-config.yaml 檔案中,此檔案由 server.xml 檔案參考。執行
mvn liberty:dev
以測試應用程式。 如果測試成功,您應該會在The defaultServer server is ready to run a smarter planet.
命令輸出中看到 。 如果 Redis 連線成功,您應該會看到類似下面的輸出。[INFO] [err] [Default Executor-thread-5] INFO org.redisson.Version - Redisson 3.23.4 [INFO] [err] [redisson-netty-2-7] INFO org.redisson.connection.pool.MasterPubSubConnectionPool - 1 connections initialized for redacted.redis.cache.windows.net/20.25.90.239:6380 [INFO] [err] [redisson-netty-2-20] INFO org.redisson.connection.pool.MasterConnectionPool - 24 connections initialized for redacted.redis.cache.windows.net/20.25.90.239:6380
您可以流覽
http://localhost:9080/
以查看執行中的應用程式,但 Redis 運作證明是上一個步驟中所列的輸出。使用 Ctrl+C 來停止應用程式。
使用下列命令來擷取屬性
artifactId
的值,並在version
pom.xml檔案中定義。export artifactId=$(mvn -q -Dexec.executable=echo -Dexec.args='${project.artifactId}' --non-recursive exec:exec) export version=$(mvn -q -Dexec.executable=echo -Dexec.args='${project.version}' --non-recursive exec:exec)
執行
cd target
以將目錄變更為範例的組建。執行下列其中一個命令來建置應用程式映像,並將它推送至 ACR 實例。
如果您想要使用 Open Liberty 作為輕量型 開放原始碼 Java™ 運行時間,請使用下列命令來建置 Open Liberty 基底映射:
# Build and tag application image. This causes the ACR instance to pull the necessary Open Liberty base images. az acr build -t ${artifactId}:${version} -r $REGISTRY_NAME --resource-group $RESOURCE_GROUP_NAME .
如果您想要使用商業版本的 Open Liberty,請使用下列命令來建置 WebSphere Liberty 基底映射:
# Build and tag application image. This causes the ACR instance to pull the necessary WebSphere Liberty base images. az acr build -t ${artifactId}:${version} -r $REGISTRY_NAME --resource-group $RESOURCE_GROUP_NAME --file=Dockerfile-wlp .
部署應用程式
請遵循本節中的步驟,在 AKS 叢集上部署容器化範例應用程式。
確認目前的工作目錄是 本機複製中的java-app-jcache/target 。
使用下列命令來建立具有Re設定資訊的秘密。 使用此秘密,應用程式可以連線到已建立的 Azure Cache for Redis 實例。
export REDISSON_CONFIG_SECRET_NAME=redisson-config-secret kubectl create secret generic ${REDISSON_CONFIG_SECRET_NAME} --from-file=$(pwd)/liberty/wlp/usr/servers/defaultServer/redisson-config.yaml
使用下列命令,將具有三個複本的 Liberty 應用程式部署到 AKS 叢集。 命令輸出也會內嵌顯示。
# Set number of application replicas export REPLICAS=3 # Create OpenLibertyApplication "javaee-cafe-jcache-cluster" envsubst < openlibertyapplication.yaml | kubectl create -f - openlibertyapplication.openliberty.io/javaee-cafe-jcache-cluster created # Check if OpenLibertyApplication instance is created kubectl get openlibertyapplication ${artifactId}-cluster NAME IMAGE EXPOSED RECONCILED AGE javaee-cafe-jcache-cluster youruniqueacrname.azurecr.io/javaee-cafe-jcache:1.0.0 True 59s # Check if deployment created by Operator is ready kubectl get deployment ${artifactId}-cluster --watch NAME READY UP-TO-DATE AVAILABLE AGE javaee-cafe-jcache-cluster 0/3 3 0 20s
等到您在數據
READY
行底下和3
數據行底下AVAILABLE
看到3/3
,然後使用 Ctrl+C 停止kubectl
監看程式。
測試應用程式
當應用程式執行時,Kubernetes 負載平衡器服務會將應用程式前端公開至因特網。 此程式可能需要一段時間才能完成。
若要監視進度,請使用 kubectl get service 命令搭配 --watch
引數。
kubectl get service ${artifactId}-cluster --watch
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
javaee-cafe-jcache-cluster LoadBalancer 10.0.50.29 20.84.16.169 80:31732/TCP 68s
當 EXTERNAL-IP 位址從擱置變更為實際的公用 IP 地址之後,請使用 Ctrl+C 停止kubectl
監看程式。
開啟網頁瀏覽器至您服務的外部 IP 位址(20.84.16.169
如上述範例所示),以查看應用程式首頁。 如果頁面未正確載入,這是因為應用程式正在啟動。 您可以等候一段時間,稍後重新整理頁面。 您應該會看到應用程式複本的 Pod 名稱顯示在頁面左上方(javaee-cafe-jcache-cluster-77d54bccd4-5xnzx
在此案例中為 )。
在 [工作階段中的新增咖啡] 表單中,設定 [名稱] 和 [價格] 字段的值,然後選取 [提交]。 幾秒鐘后,您會看到 [提交計數:1 ] 顯示在頁面左下方。
若要示範工作階段快取會儲存在應用程式的所有複本上,請執行下列命令,以刪除具有 Pod 名稱 javaee-cafe-jcache-cluster-<pod id from your running app>
的目前複本:
kubectl delete pod javaee-cafe-jcache-cluster-77d54bccd4-5xnzx
pod "javaee-cafe-jcache-cluster-77d54bccd4-5xnzx" deleted
然後,重新整理應用程式首頁。 您會在 [工作階段中的新增咖啡] 區段中看到相同的數據,但頁面左上角顯示的不同 Pod 名稱。
最後,使用下列步驟來示範會話數據會保存在 Azure Cache for Redis 實例中。 您可以使用 Redis 控制台,向 Azure Cache for Redis 實例發出命令。
從 Azure 入口網站 尋找您的 Azure Cache for Redis 實例。
選取 [主控台 ] 以開啟 Redis 控制台。
執行下列命令來檢視工作階段資料:
scan 0 count 1000 match '*' hgetall "com.ibm.ws.session.attr.default_host%2F"
從網頁搜尋 café.model.entity.Coffee[id=1, name=Coffee 3, price=30.0] 網頁,這是您在 Azure Cache for Redis 實例中建立並保存的咖啡。
清除資源
若要避免 Azure 費用,您應該清除不必要的資源。 如果不再需要叢集,請使用 az group delete 命令移除資源群組、容器服務、容器登錄及所有相關資源。
az group delete --name $RESOURCE_GROUP_NAME --yes --no-wait
若要刪除 Azure Cache for Redis 實例,請尋找其資源組名,然後執行下列命令:
az group delete --name <AZURE_CACHE_FOR_REDIS_RESOURCE_GROUP_NAME> --yes --no-wait
下一步
您可以從本指南中使用的參考深入瞭解:
若要探索在 Azure 上執行 WebSphere 產品的選項,請參閱 在 Azure 上執行 WebSphere 產品系列的解決方案為何?