在 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 市场产品/服务在 Azure Red Hat OpenShift 上部署 IBM WebSphere Liberty 和 Open Liberty。
有关 Open Liberty 的详细信息,请参阅 Open Liberty 项目页。 有关 WebSphere Liberty 的详细信息,请参阅 WebSphere Liberty 产品页面。
本文旨在帮助你快速进行部署。 在进入生产环境之前,应探索 Tuning Liberty。
如果你有兴趣提供反馈或与开发 WebSphere on Azure 解决方案的工程团队就迁移方案展开密切合作,请填写这份简短的有关 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、适用于 Linux 的 Windows 子系统)的本地计算机。
Java 标准版 (SE) 实现,版本 17 - 例如 Eclipse Open J9。
Maven,版本 3.9.8 或更高版本。
用于 OS 的 Docker。
Azure CLI,版本 2.61.0 或更高版本。
Azure Red Hat OpenShift 4 群集。 要创建群集,请按照创建 Azure Red Hat OpenShift 4 群集中的说明操作,同时使用以下说明:
尽管“获取 Red Hat 拉取密钥”步骤标记为可选,但本文仍需执行此步骤。 请求机密允许 Azure Red Hat OpenShift 群集查找 Open Liberty Operator。
本文稍后将使用创建 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
凭据。 - 请确保使用
kubeadmin
凭证遵循“使用 OpenShift CLI 连接”中的步骤。
- 请务必按照“安装 OpenShift CLI”中的步骤进行操作,因为本文稍后将使用
安装 Open Liberty OpenShift Operator
创建并连接到群集后,按照以下步骤安装 Open Liberty Operator。 Open Liberty Operator 的主要起始页位于 GitHub 上。
使用
kubeadmin
凭据从浏览器登录到 OpenShift Web 控制台。导航到“Operator”“OperatorHub”并搜索“Open Liberty”>。
从搜索结果中选择“Open Liberty”。
选择“安装” 。
在安装运算符页面上,按照以下步骤进行操作:
- 对于 更新通道,请选择最新的通道 v1.4。
- 对于安装模式,请选择群集中的所有命名空间(默认值)。
- 在更新审批中,选择自动。
选择“ 安装 ”并等待几分钟,直到安装完成。
请观察 Open Liberty Operator 是否已成功安装并准备就绪。 如果未准备好,请先诊断并解决问题,然后再继续。
注意
本指南将安装 Open Liberty Operator 以管理 Azure Red Hat OpenShift 群集上的 Liberty 应用程序。 如果要使用 WebSphere Liberty Operator,请按照安装 WebSphere Liberty Operator 中的步骤在群集上安装 WebSphere Liberty Operator。
创建 Java 应用的 OpenShift 命名空间
使用以下步骤创建 OpenShift 命名空间以供应用程序使用:
确保使用
kubeadmin
凭据从浏览器登录 OpenShift Web 控制台。导航到“管理”“命名空间”>“创建命名空间”>。
在“名称”中填写
open-liberty-demo
并选择“创建”,如下所示。
创建 Azure Database for MySQL 灵活服务器
Azure Database for MySQL - 灵活服务器部署模型是一种部署模式,旨在为在数据库管理功能和配置设置方面提供比 Azure Database for MySQL 单一服务器部署模式更高的控制粒度和灵活性。 本部分将介绍如何使用 Azure CLI 创建 Azure Database for MySQL 灵活服务器实例。 有关详细信息,请参阅快速入门:使用 Azure CLI 创建 Azure Database for MySQL - 灵活服务器实例。
在终端中运行以下命令,创建 Azure Database for MySQL 灵活服务器实例。 将 <server-admin-password>
替换为符合 Azure Database for MySQL 灵活服务器密码复杂性要求的密码。
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 身份验证创建 Azure Database for MySQL 灵活服务器。 更安全的做法是使用 Microsoft Entra 身份验证 对数据库服务器连接进行身份验证。 Azure Red Hat OpenShift 目前 不支持Microsoft Entra 工作负荷 ID,因此 MySQL 身份验证是唯一可用的选项。
如果收到错误消息 No available SKUs in this location
,请使用 --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
如果您看到有关处于 detached 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 文件用于部署应用程序映像。
在根目录中,我们放置了两个 Dockerfile。 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
(可选)在本地测试应用程序
还可以选择在本地运行应用程序,以验证其是否按预期运行。 首先,需要添加防火墙规则,允许本地计算机连接到 Azure Database for MySQL 灵活服务器实例。 使用以下步骤添加防火墙规则:
- 登录 Azure 门户并导航到之前创建的 Azure Database for MySQL 灵活服务器实例。
- 在左窗格中,选择设置>网络。
- 选择“添加当前客户端 IP 地址”。
- 选择“保存”,等待添加防火墙规则。
使用以下步骤运行 liberty:devc
命令,在本地运行和测试项目和容器映像,然后再处理任何复杂的 Azure 问题。 有关 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
。 Operator 负责管理部署所需的 OpenShift 资源的所有方面。 使用以下步骤创建此实例:
使用
kubeadmin
凭据从浏览器登录到 OpenShift Web 控制台。访问主页>项目>open-liberty-demo以便选择项目。
导航到“工作负载”“机密”>。
从 YAML选择
创建 。 将生成的 YAML 替换为您的 YAML,它位于 <path-to-repo>/3-integration/connect-db/mysql/target/db-secret.yaml。
选择创建。 此选择将返回到 机密详细信息 页。
导航到“Operator”“安装的 Operator”>。
在页面中间,就会看到 Open Liberty。
在“提供的 API”中,选择 OpenLibertyApplication。 用户界面中的项目导航反映了所使用的技术的实际包含层次。
选择“创建 OpenLibertyApplication”。
对于“配置方式”,请选择“YAML 视图”。
将生成的 yaml 替换为您的 yaml,它位于 <path-to-repo>/3-integration/connect-db/mysql/target/openlibertyapplication.yaml。
选择创建。 返回 OpenLibertyApplications 列表。
导航至运算符>已安装运算符>Open Liberty>OpenLibertyApplication。
选择“javaee-cafe-mysql”。
在页面中间选择“资源”。
在表中,选择“种类”为“路由”的“javaee-cafe-mysql”的链接。
在打开的页面上选择“位置”下方的链接。
在浏览器中打开应用程序主页。
从 Web 控制台删除应用程序
使用完应用程序后,请使用以下步骤从 Open Shift 中删除应用程序:
- 在左侧导航窗格中展开“Operator”的条目。
- 选择“安装的 Operator”。
- 选择“打开 Liberty”。
- 在页面中间,选择 OpenLibertyApplication。
- 对于 javaee-cafe-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
- Open Liberty 服务器配置
- Liberty Maven 插件
- Open Liberty 容器映像
- WebSphere Liberty 容器映像
要了解在 Azure 上运行 WebSphere 产品的选项,请参阅在 Azure 上运行 WebSphere 系列产品的解决方案有哪些?