在 Azure Red Hat OpenShift 叢集上使用 Open Liberty/WebSphere Liberty 手動部署 Java 應用程式
本文提供在 Azure Red Hat OpenShift 叢集上執行 Open/WebSphere Liberty 的逐步手動指引。 它會逐步引導您準備 Liberty 應用程式、建置應用程式 Docker 映像,並在 Azure Red Hat OpenShift 叢集上執行容器化應用程式。
具體來說,您會瞭解如何完成下列工作:
- 準備 Liberty 應用程式
- 建置應用程式映像
- 使用 GUI 和 CLI 在 Azure Red Hat OpenShift 叢集上執行容器化應用程式
如需加速 Azure Red Hat OpenShift 叢集旅程的自動化解決方案,請參閱 使用 Azure Marketplace 供應專案在 Azure Red Hat OpenShift 上部署 IBM WebSphere Liberty 和 Open Liberty。
如需 Open Liberty 的詳細資訊,請參閱 Open Liberty 專案頁面 (英文)。 如需 WebSphere Liberty 的詳細資訊,請參閱 WebSphere Liberty 產品頁面。
本文旨在協助您快速進行部署。 移至實際執行環境之前,您應該先探索微調 Liberty (英文)。
若您有興趣與開發 Azure 上 WebSphere 解決方案的工程團隊緊密合作以進行移轉,請填寫這份簡短的 WebSphere 移轉問卷,並附上您的連絡資訊。 專案經理、結構設計師和工程師組成的小組會立即連絡您,以展開緊密合作。
重要
雖然 Azure Red Hat OpenShift 是由 Red Hat 和 Microsoft 共同設計、操作和支援,以提供整合式支持體驗,但您在 Azure Red Hat OpenShift 上執行的軟體,包括本文中所述的軟體,受限於其本身的支持和授權條款。 如需 Azure Red Hat OpenShift 支援的詳細資訊,請參閱 Azure Red Hat OpenShift 4 的支援生命週期。 如需本文所述軟體支持的詳細資訊,請參閱本文所列的軟體主頁面。
注意
Azure Red Hat OpenShift 至少需要 40 個核心,才能建立和執行 OpenShift 叢集。 新 Azure 訂用帳戶的預設 Azure 資源配額不符合這項需求。 若要要求增加資源限制,請參閱標準配額:透過 VM 序列提升限制。 請注意,免費試用訂用帳戶不符合增加配額的資格,請在要求增加配額之前升級至隨用隨付訂用帳戶。
必要條件
已安裝類似 Unix 作業系統的本機電腦,例如 Ubuntu、macOS 或 Windows 子系統 Linux 版。
Java Standard Edition (SE) 實作版本 17 - 例如 Eclipse Open J9。
Maven 3.9.8 版或更高版本。
適用於您作業系統的 Docker (英文)。
Azure CLI 2.61.0 版或更新版本。
Azure Red Hat OpenShift 4 叢集。 若要建立叢集,請遵循使用下列指示建立 Azure Red Hat OpenShift 4 叢集中 的指示:
雖然「取得 Red Hat 提取秘密」步驟已標示為選擇性,但本文是必要的。 提取密碼可讓您的 Azure Red Hat OpenShift 叢集尋找 Open Liberty 操作員。
本文稍後會使用建立 Azure Red Hat OpenShift 4 叢集中定義的下列環境變數:
-
RESOURCEGROUP
- 部署叢集的資源群組名稱。 -
CLUSTER
- 叢集的名稱。
-
如果您打算在叢集上執行需要大量記憶體的應用程式,請使用
--worker-vm-size
參數為背景工作節點指定適當的虛擬機大小。 如需詳細資訊,請參閱下列文章:
依照使用下列指示連線至 Azure Red Hat OpenShift 4 叢集中的步驟 來連線到叢集 :
- 請務必遵循「安裝 OpenShift CLI」中的步驟,因為您稍後會使用本文稍後的
oc
命令。 - 將叢集主控台 URL 儲存在一邊。 該名稱應會顯示為
https://console-openshift-console.apps.<random>.<region>.aroapp.io/
。 - 記下認證
kubeadmin
。 - 請務必遵循使用 OpenShift CLI 與
kubeadmin
認證進行連線中的步驟。
- 請務必遵循「安裝 OpenShift CLI」中的步驟,因為您稍後會使用本文稍後的
安裝 Open Liberty OpenShift 操作員
建立並連線到叢集之後,請使用下列步驟來安裝 Open Liberty 操作員。 Open Liberty 操作員的主要起始頁面位於 GitHub 上。
使用
kubeadmin
認證從瀏覽器登入 OpenShift Web 控制台。流覽至 Operator OperatorHub> 並搜尋 Open Liberty。
從搜尋結果中選取 [ 開啟自由 ]。
選取 [安裝]。
在 [ 安裝操作員] 頁面上,使用下列步驟:
- 針對 [更新通道],選取最新的通道 v1.4。
- 針對 安裝模式,選取集群上[所有命名空間](預設)。
- 針對 [ 更新核准],選取 [ 自動]。
選取 [ 安裝 ] 並等候幾分鐘,直到安裝完成為止。
請注意,Open Liberty 運算子已成功安裝並可供使用。 如果尚未就緒,請先診斷並解決問題,再繼續進行。
注意
本指南會安裝 Open Liberty 操作員來管理 Azure Red Hat OpenShift 叢集上的 Liberty 應用程式。 如果您想要使用 WebSphere Liberty 操作員,請遵循安裝 WebSphere Liberty 操作員中的步驟,在叢集上安裝 WebSphere Liberty 操作員。
建立 Java 應用程式的 OpenShift 命名空間
使用下列步驟來建立 OpenShift 命名空間,以搭配您的應用程式使用:
請確定您已使用
kubeadmin
認證從瀏覽器登入 OpenShift Web 控制台。流覽至 [系統管理>命名空間] [建立命名空間]。>
填入
open-liberty-demo
[ 名稱 ],然後選取 [建立],如下所示。
建立適用於 MySQL 的 Azure 資料庫彈性伺服器
適用於 MySQL 的 Azure 資料庫 彈性伺服器部署模型是一種部署模式,其設計目的是比 適用於 MySQL 的 Azure 資料庫 單一伺服器部署模式更細微地控制和彈性資料庫管理功能和組態設定。 本節說明如何使用 Azure CLI 建立 適用於 MySQL 的 Azure 資料庫 彈性伺服器實例。 如需詳細資訊,請參閱快速入門:使用 Azure CLI 建立 適用於 MySQL 的 Azure 資料庫 - 彈性伺服器的實例。
在終端機中執行下列命令,以建立 適用於 MySQL 的 Azure 資料庫 彈性伺服器實例。 將取代<server-admin-password>
為符合 適用於 MySQL 的 Azure 資料庫 彈性伺服器之密碼複雜度需求的密碼。
az mysql flexible-server create \
--name ${CLUSTER} \
--resource-group ${RESOURCEGROUP} \
--admin-user admin${RESOURCEGROUP} \
--admin-password '<server-admin-password>' \
--database-name ${RESOURCEGROUP}db \
--public-access 0.0.0.0 \
--yes
注意
本文會引導您使用 MySQL 驗證建立 適用於 MySQL 的 Azure 資料庫 彈性伺服器。 更安全的做法是使用 Microsoft Entra 驗證 來驗證資料庫伺服器連線。 Azure Red Hat OpenShift 目前不支援 Microsoft Entra 工作負載 ID,因此 MySQL 驗證是唯一可用的選項。
如果您收到錯誤訊息 此位置中沒有可用的 SKU,請使用 --location
參數指定不同的位置,然後再試一次。 使用下列命令來列出特定位置中的可用 SKU:
az mysql flexible-server list-skus --location <location>
尋找具有可用 SKU 的位置,然後重複上述 az mysql flexible-server create
命令,但附加適當的 --location <location>
參數,讓所有其他參數保持不變。
建立伺服器、資料庫、系統管理員使用者和防火牆規則需要幾分鐘的時間,以接受來自所有 Azure 資源的連線。 如果該命令成功,輸出會類似下列範例:
{
"connectionString": "mysql <database-name> --host <server-name>.mysql.database.azure.com --user <server-admin-username> --password=<server-admin-password>",
"databaseName": "<database-name>",
"firewallName": "AllowAllAzureServicesAndResourcesWithinAzureIps_2024-7-10_16-22-8",
"host": "<server-name>.mysql.database.azure.com",
"id": "/subscriptions/REDACTED/resourceGroups/<resource-group-of-the-OpenShift-cluster>/providers/Microsoft.DBforMySQL/flexibleServers/<server-name>",
"location": "West US",
"password": "<server-admin-password>",
"resourceGroup": "<resource-group-of-the-OpenShift-cluster>",
"skuname": "Standard_B1ms",
"username": "<server-admin-username>",
"version": "5.7"
}
準備 Liberty 應用程式
我們會使用 Java EE 8 應用程式作為本指南中的範例。 Open Liberty 是 Java EE 8 完整配置檔 相容伺服器,因此可以輕鬆地執行應用程式。 Open Liberty 也是 Jakarta EE 8 完整配置檔相容。
在 Open Liberty 上執行應用程式
若要在 Open Liberty 上執行應用程式,您必須建立 Open Liberty 伺服器組態檔, 讓 Liberty Maven 外掛程式 可以封裝應用程式以進行部署。 將應用程式部署至 OpenShift 不需要 Liberty Maven 外掛程式。 不過,在此範例中,我們會將其與Open Liberty的開發人員 (dev) 模式搭配使用。 開發人員模式可讓您輕鬆地在本機執行應用程式。 若要深入了解 liberty-maven-plugin
,請參閱使用 Maven 建置 Web 應用程式。
請遵循本節中的步驟,準備範例應用程式以供本文稍後使用。 以上步驟會使用 Maven 和 liberty-maven-plugin
。
查看應用程式
使用下列命令來複製本指南的範例程序代碼。 此範例位於 GitHub 上。
git clone https://github.com/Azure-Samples/open-liberty-on-aro.git
cd open-liberty-on-aro
export BASE_DIR=$PWD
git checkout 20240920
cd ${BASE_DIR}/3-integration/connect-db/mysql
如果您看到處於「中斷連結的 HEAD」狀態的訊息,則可安全地略過此訊息。 這只表示您已簽出標記。
存放庫中有幾個範例。 我們使用 open-liberty-on-aro/3-integration/connect-db/mysql。 以下為應用程式的檔案結構:
open-liberty-on-aro/3-integration/connect-db/mysql
├─ src/main/
│ ├─ aro/
│ │ ├─ db-secret.yaml
│ │ ├─ openlibertyapplication.yaml
│ ├─ liberty/config/
│ │ ├─ server.xml
│ ├─ java/
│ ├─ resources/
│ ├─ webapp/
├─ Dockerfile
├─ Dockerfile-wlp
├─ pom.xml
java、resources 及 webapp 目錄包含應用程式範例的原始程式碼。 程式碼會宣告並使用名為 jdbc/JavaEECafeDB
的資料來源。
在 aro 目錄中,我們放置了兩個部署檔案。 db-secret.xml可用來建立具有資料庫連線認證的秘密。 openlibertyapplication.yaml 檔案係用於部署應用程式映像。
在根目錄中,我們放置了兩個 Dockerfiles。 Dockerfile 和 Dockerfile-wlp 分別用於本機偵錯,以及建置 Azure Red Hat OpenShift 部署的映像,分別使用 Open Liberty 和 WebSphere Liberty。
在 liberty/config 目錄中, 會使用server.xml 來設定 Open Liberty 和 WebSphere Liberty 叢集的資料庫連線。
建置專案
使用先前定義的環境變數,在終端機中執行下列命令來建置專案。 專案的 POM 檔案會從環境讀取許多屬性。
cd ${BASE_DIR}/3-integration/connect-db/mysql
# The following variables are used for deployment file generation
export DB_SERVER_NAME=$CLUSTER.mysql.database.azure.com
export DB_PORT_NUMBER=3306
export DB_NAME=${RESOURCEGROUP}db
export DB_USER=admin${RESOURCEGROUP}
export DB_PASSWORD='<server-admin-password>'
export NAMESPACE=open-liberty-demo
mvn clean install
(選擇性)在本機測試您的應用程式
您可以選擇性地在本機執行應用程式,以確認它如預期般運作。 首先,您必須新增防火牆規則,以允許本機計算機連線到 適用於 MySQL 的 Azure 資料庫 彈性伺服器實例。 使用下列步驟來新增防火牆規則:
- 登入 Azure 入口網站,並流覽至您稍早建立的 適用於 MySQL 的 Azure 資料庫 彈性伺服器實例。
- 在左窗格中,選取 [設定>網络]。
- 選取 [新增目前的用戶端 IP 位址]。
- 選取 [ 儲存 ],並等候新增防火牆規則。
使用下列步驟,在處理任何 Azure 複雜度之前,先執行 liberty:devc
命令,在本機執行並測試專案和容器映射。 如需有關 liberty:devc
的詳細資訊,請參閱 Liberty 外掛程式文件 (英文)。
視需要啟動本機 Docker 環境。 執行此操作的指示會因主機作業系統而異。
使用下列命令以模式啟動應用程式
liberty:devc
:cd ${BASE_DIR}/3-integration/connect-db/mysql # If you are running with Open Liberty mvn liberty:devc -DcontainerRunOpts="-e DB_SERVER_NAME=${DB_SERVER_NAME} -e DB_PORT_NUMBER=${DB_PORT_NUMBER} -e DB_NAME=${DB_NAME} -e DB_USER=${DB_USER} -e DB_PASSWORD=${DB_PASSWORD}" -Dcontainerfile=Dockerfile # If you are running with WebSphere Liberty mvn liberty:devc -DcontainerRunOpts="-e DB_SERVER_NAME=${DB_SERVER_NAME} -e DB_PORT_NUMBER=${DB_PORT_NUMBER} -e DB_NAME=${DB_NAME} -e DB_USER=${DB_USER} -e DB_PASSWORD=${DB_PASSWORD}" -Dcontainerfile=Dockerfile-wlp
確認應用程式如預期運作。 如果成功,您應該會在命令輸出中看到類似
[INFO] [AUDIT] CWWKZ0003I: The application javaee-cafe updated in 1.930 seconds.
的訊息。 移至瀏覽器中的https://localhost:9443/
,並確認應用程式可存取,且所有函式皆正常運作。若要停止
liberty:devc
模式,請按 Control+C。
準備應用程式映像
若要在 Azure Red Hat OpenShift 叢集上部署和執行您的 Liberty 應用程式,請使用 Open Liberty 容器映像或 WebSphere Liberty 容器映射,將您的應用程式容器化為 Docker 映射。
建置應用程式並推送至映像數據流
由於您已使用 liberty:devc
命令成功在 Liberty Docker 容器中執行應用程式,因此您將使用下列步驟從遠端建置叢集上的映射:
請務必使用
kubeadmin
認證登入 OpenShift CLI。使用下列命令來識別來源目錄和 Dockerfile:
cd ${BASE_DIR}/3-integration/connect-db/mysql # If you are building with the Open Liberty base image, the existing Dockerfile is ready for you # If you are building with the WebSphere Liberty base image, uncomment and execute the following two commands to rename Dockerfile-wlp to Dockerfile # mv Dockerfile Dockerfile.backup # mv Dockerfile-wlp Dockerfile
使用下列命令將項目變更為 open-liberty-demo:
oc project open-liberty-demo
使用下列命令來建立映像串流:
oc create imagestream javaee-cafe-mysql
使用下列命令來建立組建設定,以指定組建輸出的映像串流標籤:
oc new-build --name javaee-cafe-mysql-config --binary --strategy docker --to javaee-cafe-mysql:v1
使用下列命令來啟動組建,以上傳本機內容、將內容容器化,並輸出至之前指定的映像串流標籤:
oc start-build javaee-cafe-mysql-config --from-dir . --follow
在 Azure Red Hat OpenShift 叢集上部署應用程式
現在,您可以將範例 Liberty 應用程式部署到您稍早在處理必要條件時建立的 Azure Red Hat OpenShift 叢集。
從 Web 控制台部署應用程式
因為我們使用 Open Liberty 運算子來管理 Liberty 應用程式,因此我們需要建立其 自定義資源定義的實例,類型為 OpenLibertyApplication
。 操作員會負責管理部署所需的 OpenShift 資源的所有層面。 使用下列步驟來建立此實例:
使用
kubeadmin
認證從瀏覽器登入 OpenShift Web 控制台。流覽 Home>>open-liberty-demo 來選取專案。
流覽至 [工作負載>秘密]。
選取 [ 從 YAML 建立> ]。
將產生的 yaml 取代為 yours,其位於 <path-to-repo>/3-integration/connect-db/mysql/target/db-secret.yaml。
選取 建立。 系統會返回 [秘密詳細數據] 頁面。
流覽至 [運算子已安裝的>運算子]。
在頁面中間,您會看到 Open Liberty。
從 [提供的 API] 中,選取 [OpenLibertyApplication]。 使用者介面中的項目導覽會反映使用中技術的實際內含階層。
選取 [ 建立 OpenLibertyApplication]。
針對 [透過] 選取 [YAML] 檢視。
將產生的 yaml 取代為 yours,其位於 <path-to-repo>/3-integration/connect-db/mysql/target/openlibertyapplication.yaml。
選取 建立。 系統會返回 OpenLibertyApplications 清單。
流覽至>Open Liberty>OpenLibertyApplication。
選取 javaee-café-mysql。
在頁面中間,選取 [資源]。
在數據表中,選取javaee-café-mysql 與 [路由種類] 的連結。
在開啟的頁面上,選取 [位置] 下方的連結。
應用程式首頁會在瀏覽器中開啟。
從 Web 控制台刪除應用程式
當您完成應用程式時,請使用下列步驟從 Open Shift 刪除應用程式:
- 在左側瀏覽窗格中,展開 [運算符] 的專案。
- 選取 [已安裝的運算符]。
- 選取 [ 開啟自由]。
- 在頁面中間,選取 [OpenLibertyApplication]。
- 針對 javaee-café-mysql,選取垂直省略號 (三個垂直點),然後選取 [ 刪除 OpenLibertyApplication]。
- 選取 [ 刪除] 以移除應用程式。
使用下列步驟從 Open Shift 刪除秘密:
- 流覽至 [工作負載>秘密]。
- 選取 db-secret-mysql。
- 選取 [動作>刪除秘密]。
- 選取 [ 刪除] 以刪除秘密。
清除資源
遵循教學課程:刪除 Azure Red Hat OpenShift 4 叢集中的步驟 ,刪除 Azure Red Hat OpenShift 叢集。 請確定資料庫和任何相關聯的資源也會一併刪除。
下一步
您可以從本指南中使用的參考深入瞭解:
- Open Liberty
- Azure Red Hat OpenShift
- Open Liberty Operator
- 開啟 [Liberty 伺服器設定]
- Liberty Maven 外掛程式
- 開啟 Liberty 容器映像
- WebSphere Liberty 容器映像
若要探索在 Azure 上執行 WebSphere 產品的選項,請參閱 在 Azure 上執行 WebSphere 產品系列的解決方案為何?