你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

在 Azure Red Hat OpenShift 上部署 WebSphere Liberty 和 Open Liberty

本文介绍如何在 Azure Red Hat OpenShift (ARO) 上快速建立 IBM WebSphere Liberty 和 Open Liberty。

本文使用 Open/WebSphere Liberty 的 Azure 市场产品/服务加速你的 ARO 之旅。 产品/服务会自动预配多个资源,包括带有内置 OpenShift 容器注册表 (OCR)、Liberty Operator 的 ARO 群集以及包括 Liberty 和应用程序的容器映像。 若要查看该产品/服务,请访问 Azure 门户。 如果想要不使用该产品/服务启用的自动化,而是在 ARO 上运行 Liberty 的手动分步指南,请参阅在 Azure Red Hat OpenShift 群集上使用 Open Liberty/WebSphere Liberty 手动部署 Java 应用程序

本文旨在帮助你快速进行部署。 在进入生产环境之前,应探索 Tuning Liberty

如果你有兴趣提供反馈或与开发 WebSphere on Azure 解决方案的工程团队就迁移方案展开密切合作,请填写这份简短的有关 WebSphere 迁移的调查并提供联系人信息。 项目经理、架构师和工程师团队会及时与你联系,以开展密切合作。

重要

虽然 ARO 由 Red Hat 和 Microsoft 共同设计、运营并提供支持,可以提供集成式支持体验,但你在 ARO 之上运行的软件(包括本文中所述的软件)受其自身的支持和许可条款约束。 有关 ARO 支持的详细信息,请参阅 Azure Red Hat OpenShift 4 的支持生命周期。 有关本文中所述软件支持的详细信息,请查看本文中列出的相应软件的主页。

注意

Azure Red Hat OpenShift 至少需要 40 个核心才能创建和运行 OpenShift 群集。 新 Azure 订阅的默认 Azure 资源配额不满足此要求。 若要请求增加资源限制,请参阅增加 VM 系列 vCPU 配额请求增加不可调整配额的部分。 由于需要请求增加的配额类型是“不可调整的”,因此必须提交支持票证。 请求增加不可调整配额的步骤显示如何使用正确的内容提交票证。

免费试用订阅不符合增加配额的条件。 在请求增加配额之前升级到即用即付订阅。 有关详细信息,请参阅升级 Azure 免费帐户或面向学生的 Azure 入门版帐户

先决条件

注意

还可以从 Azure Cloud Shell 执行本指南。 此方法预安装了所有必备工具,但 Docker 除外。

获取 Red Hat 拉取机密

本文中使用的 Azure 市场产品/服务需要 Red Hat 拉取机密。 本部分介绍如何获取 Azure Red Hat OpenShift 的 Red Hat 拉取机密。 要了解什么是 Red Hat 拉取机密以及为什么需要它,请参阅创建 Azure Red Hat OpenShift 4 群集获取 Red Hat 拉取机密部分。 若要获取要使用的拉取机密,请按照本部分中的步骤进行操作。

访问 Red Hat OpenShift 混合云控制台,使用 Red Hat 帐户登录 OpenShift 群集管理器门户。 可能需要接受更多条款并更新帐户,如以下屏幕截图所示。 使用与创建帐户时相同的密码。

Red Hat 更新帐户页的屏幕截图。

登录后,选择“OpenShift”,然后选择“下载”。 选择“所有类别”下拉列表,然后选择“令牌”。 在“拉取机密”下,选择“复制”或“下载”,如以下屏幕截图所示。

Red Hat 控制台门户的屏幕截图,其中显示了拉取机密。

以下内容是从 Red Hat 控制台门户复制的示例,其中身份验证代码替换为 xxxx...xxx

{"auths":{"cloud.openshift.com":{"auth":"xxxx...xxx","email":"contoso-user@contoso.com"},"quay.io":{"auth":"xxx...xxx","email":"contoso-user@test.com"},"registry.connect.redhat.com":{"auth":"xxxx...xxx","email":"contoso-user@contoso.com"},"registry.redhat.io":{"auth":"xxxx...xxx","email":"contoso-user@contoso.com"}}}

将机密保存到文件中,以便稍后使用。

从 Azure 门户创建 Microsoft Entra 服务主体

本文中使用的 Azure 市场产品/服务需要 Microsoft Entra 服务主体才能部署 Azure Red Hat OpenShift 群集。 该产品/服务会在部署期间为服务主体分配适当的权限,无需进行角色分配。 如果已准备好使用服务主体,请跳过此部分并转到下一部分,在其中部署产品/服务。

使用以下步骤部署服务主体并从 Azure 门户获取其应用程序(客户端)ID 和机密。 有关详细信息,请参阅创建并使用服务主体来部署 Azure Red Hat OpenShift 群集

注意

你必须具有足够的权限,才能向你的 Microsoft Entra 租户注册应用程序。 如果遇到问题,请查看所需权限,确保帐户可以创建标识。 有关详细信息,请参阅注册 Microsoft Entra 应用并创建服务主体

  1. 通过 Azure 门户登录到 Azure 帐户。

  2. 选择“Microsoft Entra ID”。

  3. 选择“应用注册” 。

  4. 选择“新注册”。

  5. 为应用程序命名,例如“liberty-on-aro-app”。 选择支持的帐户类型,它决定了谁可以使用应用程序。 设置好值后,选择“注册”,如以下屏幕截图所示。 预配应用程序需要几秒钟时间。 等待部署完成,然后再继续。

    Azure 门户的屏幕截图,其中显示了“注册应用程序”页。

  6. 从概述页保存应用程序(客户端)ID,如以下屏幕截图所示。 将指针悬停在该值(在屏幕截图中已编辑)上,然后选择出现的复制图标。 工具提示将显示“复制到剪贴板”。 请注意复制正确的值,因为该部分中的其他值也有复制图标。 将应用程序 ID 保存到文件中,以便稍后使用。

    Azure 门户的屏幕截图,其中显示了服务主体客户端 ID。

  7. 按照以下步骤创建新的客户端密码:

    1. 选择“证书和机密”。
    2. 选择“客户端密码”,然后选择“新建客户端密码”。
    3. 提供机密的说明和持续时间。 完成后,选择“添加”。
    4. 添加客户端密码后,将显示客户端密码的值。 请复制此值,因为以后无法检索此值。

你现在拥有 Microsoft Entra 应用程序、服务主体和客户端密码。

在 Azure Red Hat OpenShift 上部署 IBM WebSphere Liberty 或 Open Liberty

本部分中的步骤将指导你在 Azure Red Hat OpenShift 上部署 IBM WebSphere Liberty 或 Open Liberty。

以下步骤演示了如何查找产品/服务并填写“基本信息”窗格。

  1. 在 Azure 门户顶部的搜索栏中输入“Liberty”。 在自动建议的搜索结果的“市场”部分中,选择“IBM Liberty on ARO”,如以下屏幕截图所示。

    Azure 门户的屏幕截图,其中显示了搜索结果中 Azure Red Hat OpenShift 上的 IBM WebSphere Liberty 和 Open Liberty。

    还可以使用此门户链接直接转到该服务。

  2. 在产品/服务页面,选择“创建”。

  3. 在“基本信息”窗格中,确保“订阅”字段中显示的值与先决条件部分中列出的角色的值相同。

  4. 该服务必须部署在空资源组中。 在“资源组”字段中,选择“新建”,然后填写资源组的值。 由于资源组在订阅中必须是唯一的,因此请选择一个唯一名称。 拥有唯一名称的一种简单方法是使用首字母缩写、今天的日期和一些标识符的组合。 例如,abc1228rg

  5. 在 shell 中为群集的资源组名称创建环境变量。

    export RESOURCE_GROUP_NAME=<your-resource-group-name>
    
  6. 在“实例详细信息”下,选择部署的区域。 有关运行 OpenShift 的 Azure 区域的列表,请参阅 Azure 上的 Red Hat OpenShift 4.x 的区域

  7. 选择区域后,选择“下一步”

以下步骤演示如何填写 ARO 窗格,如以下屏幕截图所示:

Azure 门户的屏幕截图,其中显示了 Azure Red Hat OpenShift ARO 窗格上的 IBM WebSphere Liberty 和 Open Liberty。

  1. 在“创建新群集”下,选择“”。

  2. 在“提供信息以创建新群集”下,对于“Red Hat 拉取机密”,填写在“获取 Red Hat 拉取机密”部分中获取的 Red Hat 拉取机密。 对“确认机密”使用相同的值。

  3. 使用在从 Azure 门户创建 Microsoft Entra 服务主体部分中获取的服务主体应用程序(客户端)ID 填写服务主体客户端 ID

  4. 使用在从 Azure 门户创建 Microsoft Entra 服务主体部分中获取的服务主体应用程序密码填写服务主体客户端密码。 对“确认机密”使用相同的值。

  5. 填写值后,选择“下一步”。

以下步骤演示如何填写“运算符和应用程序”窗格(如以下屏幕截图所示),然后开始部署。

Azure 门户的屏幕截图,其中显示了 Azure Red Hat OpenShift 运算符和应用程序窗格上的 IBM WebSphere Liberty 和 Open Liberty。

  1. 在“IBM 支持?”下,选择“是”

    注意

    本快速入门部署 IBM 支持的 WebSphere Liberty Operator,但你可以选择“否”来部署 Open Liberty Operator。

  2. 保留“部署应用程序?”的默认“否”选项。

    注意

    本快速入门稍后手动部署示例应用程序,但如果需要,可以为“部署应用程序?”选择“是”。

  3. 选择“查看 + 创建”。 确保绿色的“验证通过”消息显示在顶部。 如果未显示该消息,请解决所有验证问题,然后选择“查看 + 创建”。

  4. 选择创建

  5. 在“部署正在进行”页面跟踪部署进度。

根据所选区域中的网络状况和其他活动,部署可能需要长达 40 分钟才能完成。

验证部署功能

本部分中的步骤演示了如何验证部署已成功完成。

如果你已离开“部署正在进行”页面,后续步骤将演示如何返回该页面。 如果你仍在显示“部署已完成”的页面上,则可以跳到步骤 5。

  1. 在任何门户页面的一角,选择汉堡菜单,然后选择“资源组”

  2. 在包含文本“筛选任何字段”的框中,输入之前创建的资源组的前几个字符。 如果遵循了建议的约定,请输入缩写,然后选择相应的资源组。

  3. 在导航窗格的“设置”部分,选择“部署”。 你将看到此资源组的部署的有序列表,最新的部署在最前面。

  4. 滚动到此列表中最早的条目。 此条目对应于在上一部分中启动的部署。 选择最早的部署,如以下屏幕截图所示。

    Azure 门户的屏幕截图,其中显示了 Azure Red Hat OpenShift 部署上的 IBM WebSphere Liberty 和 Open Liberty,其中突出显示了最早的部署。

  5. 在导航窗格中,选择“输出”。 此列表显示部署的输出值,其中包括一些有用的信息。

  6. 打开终端,粘贴 cmdToGetKubeadminCredentials 字段中的值。 将看到用于登录 OpenShift 群集控制台门户的管理员帐户和凭据。 以下内容是管理员帐户的示例。

    az aro list-credentials --resource-group abc1228rg --name clusterf9e8b9
    {
      "kubeadminPassword": "xxxxx-xxxxx-xxxxx-xxxxx",
      "kubeadminUsername": "kubeadmin"
    }
    
  7. 将 clusterConsoleUrl 字段中的值粘贴到连接到 Internet 的 Web 浏览器中,然后按 Enter。 填写管理员用户名和密码,并登录。

  8. 验证是否安装了适用于 Liberty 的相应 Kubernetes 运算符。 在导航窗格中,选择“运算符”,然后选择“安装运算符”,如以下屏幕截图所示:

    Red Hat OpenShift 群集控制台门户的屏幕截图,其中显示了“已安装运算符”页。

    如果安装了 WebSphere Liberty 运算符或 Open Liberty 运算符,请记下。 运算符变体与在部署时选择的内容匹配。 如果选择“IBM 支持”,则拥有 WebSphere Liberty 运算符。 否则,就拥有 Open Liberty 运算符。 在后续步骤中,此信息非常重要。

  9. 按照教程安装 OpenShift CLI 中的步骤下载并安装 OpenShift CLI oc,然后返回到本文档。

  10. 切换到“输出”窗格,复制 cmdToLoginWithKubeadmin 字段中的值,然后将其粘贴到终端中。 运行命令登录到 OpenShift 群集的 API 服务器。 在控制台中应会看到类似于以下示例的输出:

    Login successful.
    
    You have access to 71 projects, the list has been suppressed. You can list all projects with 'oc projects'
    
    Using project "default".
    

创建 Azure SQL 数据库

以下步骤将指导你创建 Azure SQL 数据库单一数据库,以便与你的应用配合使用:

  1. 按照快速入门:创建 Azure SQL 数据库单一数据库中的步骤在 Azure SQL 数据库中创建单一数据库,并仔细注意以下说明中的差别。 可以将数据库部署到与 OpenShift 群集相同的资源组。 创建并配置数据库服务器后,返回到本文。

    注意

    在“基本信息”步骤中,记下资源组、数据库名称、<server-name>.database.windows.net、服务器管理员登录名和密码的值。 数据库资源组在本文后面将被称为 <db-resource-group>

    在“网络”步骤中,将“连接方法”设置为“公用终结点”,将“允许 Azure 服务和资源访问此服务器”设置为“是”,将“当前客户端 IP 地址”设置为“是”。

    屏幕截图:Azure 门户,其中显示了“创建 SQL 数据库”页的“网络”选项卡,突出显示了连接方法和防火墙规则设置。

  2. 在 shell 中为数据库的资源组名称创建环境变量。

    export DB_RESOURCE_GROUP_NAME=<db-resource-group>
    

创建数据库和 ARO 群集后,可以准备 ARO 来托管 WebSphere Liberty 应用程序。

配置和部署示例应用程序

按照本部分中的步骤将示例应用程序部署到 Liberty 运行时。 这些步骤使用 Maven。

签出应用程序

使用以下命令克隆本指南的示例代码。 该示例位于 GitHub 上。

git clone https://github.com/Azure-Samples/open-liberty-on-aro.git
cd open-liberty-on-aro
export BASE_DIR=$PWD
git checkout 20240223
cd 3-integration/connect-db/mssql

如果看到消息显示正处于“拆离的 HEAD”状态,可以放心地忽略此消息。 这只标识你签出了一个标签。

存储库中有一些示例。 我们使用 3-integration/connect-db/mssql/。 下面是应用程序的文件结构:

mssql
├─ src/main/
│  ├─ aro/
│  │  ├─ db-secret.yaml
│  │  ├─ openlibertyapplication.yaml
│  │  ├─ webspherelibertyapplication.yaml
│  ├─ docker/
│  │  ├─ Dockerfile
│  │  ├─ Dockerfile-ol
│  ├─ liberty/config/
│  │  ├─ server.xml
│  ├─ java/
│  ├─ resources/
│  ├─ webapp/
├─ pom.xml

目录“java”、“resources”和“webapp”包含示例应用程序的源代码 。 代码声明并使用名为 jdbc/JavaEECafeDB 的数据源。

aro 目录中有三个部署文件。 db-secret.xml 用于创建包含数据库连接凭据的 Kubernetes Secret。 本快速入门使用 webspherelibertyapplication.yaml 文件来部署 WebSphere Liberty 应用程序。 如果在 Azure Red Hat OpenShift 上部署 IBM WebSphere Liberty 或 Open Liberty 部分中部署了 Open Liberty 运算符,请使用 openlibertyapplication.yaml 文件部署 Open Liberty 应用程序。

在 docker 目录中,有两个文件用于使用 Open Liberty 或 WebSphere Liberty 创建应用程序映像。 这些文件分别是 Dockerfile 和 Dockerfile-ol。 在本快速入门中,你使用 Dockerfile 文件构建包含 WebSphere Liberty 的应用程序映像。 同样,如果在 Azure Red Hat OpenShift 上部署 IBM WebSphere Liberty 或 Open Liberty 部分中部署了 Open Liberty Operator,请使用 Dockerfile-ol 文件生成包含 Open Liberty 的应用程序映像。

在目录 liberty/config中,server.xml 文件用于配置 Open Liberty 和 WebSphere Liberty 群集的数据库连接。

生成项目

收集必要的属性后,可以使用以下命令生成应用程序。 项目的 POM 文件从环境中读取多个变量。 在 Maven 生成中,这些变量用于填充位于 src/main/aro 中的 YAML 文件中的值。 如果需要,可以在 Maven 外部为应用程序执行类似操作。

cd ${BASE_DIR}/3-integration/connect-db/mssql

# The following variables are used for deployment file generation into target.
export DB_SERVER_NAME=<server-name>.database.windows.net
export DB_NAME=<database-name>
export DB_USER=<server-admin-login>@<server-name>
export DB_PASSWORD=<server-admin-password>

mvn clean install

(可选)在本地测试项目

现在可以在部署到 Azure 之前,可以使用以下步骤在本地运行和测试项目。 为方便起见,我们使用 liberty-maven-plugin。 如需详细了解 liberty-maven-plugin,请参阅使用 Maven 构建 Web 应用程序。 对于你的应用程序,可以使用任何其他机制(例如本地 IDE)执行类似操作。 还可以考虑使用用于容器开发的 liberty:devc 选项。 可以在 Liberty 文档中详细了解 liberty:devc

  1. 使用 liberty:run 启动应用程序,如以下示例所示。 liberty:run 也会使用在上一节中定义的环境变量。

    cd ${BASE_DIR}/3-integration/connect-db/mssql
    mvn liberty:run
    
  2. 验证应用程序是否按预期运行。 如果成功,你应该会在命令输出中看到类似于 [INFO] [AUDIT] CWWKZ0003I: The application javaee-cafe updated in 1.930 seconds. 的消息。 在浏览器中转到 http://localhost:9080/https://localhost:9443/,验证应用程序是否可访问,所有功能是否正常运作。

  3. Ctrl+C 可停止。

接下来,使用以下步骤来使用 Docker 容器化项目,并将其作为容器在本地运行,然后再部署到 Azure:

  1. 使用以下命令生成映像:

    cd ${BASE_DIR}/3-integration/connect-db/mssql/target
    docker buildx build --platform linux/amd64 -t javaee-cafe:v1 --pull --file=Dockerfile .
    
  2. 使用以下命令运行映像。 请注意,我们使用的是之前定义的环境变量。

    docker run -it --rm -p 9080:9080 -p 9443:9443 \
        -e DB_SERVER_NAME=${DB_SERVER_NAME} \
        -e DB_NAME=${DB_NAME} \
        -e DB_USER=${DB_USER} \
        -e DB_PASSWORD=${DB_PASSWORD} \
        javaee-cafe:v1
    
  3. 容器启动后,在浏览器中转到 http://localhost:9080/https://localhost:9443/ 以访问应用程序。

  4. Ctrl+C 可停止。

生成映像并推送到映像流

对应用程序的状态感到满意时,请使用以下步骤在群集上远程生成映像。

  1. 使用以下命令确定源目录和 Dockerfile:

    cd ${BASE_DIR}/3-integration/connect-db/mssql/target
    
    # If you are deploying the application with WebSphere Liberty Operator, the existing Dockerfile is ready for you
    
    # If you are deploying the application with Open Liberty Operator, uncomment and execute the following two commands to rename Dockerfile-ol to Dockerfile
    # mv Dockerfile Dockerfile.backup
    # mv Dockerfile-ol Dockerfile
    
  2. 使用以下命令创建图像流:

    oc create imagestream javaee-cafe
    
  3. 使用以下命令创建生成配置,该配置可指定生成输出的映像流标记:

    oc new-build --name javaee-cafe-config --binary --strategy docker --to javaee-cafe:v1
    
  4. 使用以下命令启动生成,以将本地内容上传、容器化以及输出到之前指定的映像流标记:

    oc start-build javaee-cafe-config --from-dir . --follow
    

部署并测试应用程序

使用以下步骤部署并测试应用程序:

  1. 使用以下命令应用数据库机密:

    cd ${BASE_DIR}/3-integration/connect-db/mssql/target
    oc apply -f db-secret.yaml
    

    你应该可以看到输出 secret/db-secret-mssql created

  2. 使用以下命令应用部署文件:

    oc apply -f webspherelibertyapplication.yaml
    
  3. 使用以下命令等待所有 Pod 启动并成功运行:

    oc get pods -l app.kubernetes.io/name=javaee-cafe --watch
    

    应会看到类似于以下示例的输出,指示所有 Pod 正在运行:

    NAME                          READY   STATUS    RESTARTS   AGE
    javaee-cafe-67cdc95bc-2j2gr   1/1     Running   0          29s
    javaee-cafe-67cdc95bc-fgtt8   1/1     Running   0          29s
    javaee-cafe-67cdc95bc-h47qm   1/1     Running   0          29s
    
  4. 使用以下步骤验证结果:

    1. 使用以下命令获取随应用程序一起部署的路由资源的主机

      echo "route host: https://$(oc get route javaee-cafe --template='{{ .spec.host }}')"
      
    2. 从输出复制 route host 的值,在浏览器中打开该值,然后测试应用程序。 如果网页未正确呈现,这是因为应用仍在后台启动。 请等待几分钟,并重试。

    3. 添加和删除一些咖啡,以验证应用和数据库连接的功能。

      运行应用程序的屏幕截图。

清理资源

若要避免 Azure 费用,应清除不需要的资源。 如果不再需要群集,可以使用 az group delete 命令删除资源组、ARO 群集、 Azure SQL 数据库及所有相关资源。

az group delete --name $RESOURCE_GROUP_NAME --yes --no-wait
az group delete --name $DB_RESOURCE_GROUP_NAME --yes --no-wait

后续步骤

有关在 Azure 上部署 IBM WebSphere 系列产品的详细信息,请参阅哪些解决方案可在 Azure 上运行 WebSphere 系列产品?