你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
快速入门:在 Azure Red Hat OpenShift 上部署 JBoss EAP
本文介绍如何使用 Azure 门户在 Azure Red Hat OpenShift 上快速设置 JBoss Enterprise Application Platform (EAP)。
本文使用适用于 JBoss EAP 的 Azure 市场产品/服务来加速你的 Azure Red Hat OpenShift 之旅。 产品/服务会自动预配资源,这包括带有内置 OpenShift 容器注册表 (OCR) 的 Azure Red Hat OpenShift 群集、JBoss EAP Operator,以及(可选)使用源到映像 (S2I) 的容器映像(包括 JBoss EAP 和你的应用程序)。 若要查看该产品/服务,请访问 Azure 门户。 如果你想要通过手动分步指南了解如何在不使用产品/服务启用的自动化的 Azure Red Hat OpenShift 上运行 JBoss EAP,请参阅在 Azure Red Hat OpenShift 4 群集上使用 Red Hat JBoss Enterprise Application Platform (JBoss EAP) 部署 Java 应用程序。
如果你有兴趣提供反馈或与开发 Azure 上的 JBoss EAP 解决方案的工程团队就迁移方案展开密切合作,请填写这份简短的 Boss EAP 迁移调查并提供你的联系信息。 项目经理、架构师和工程师团队会及时与你联系,以开展密切合作。
先决条件
Azure 订阅。 如果没有 Azure 订阅,请在开始之前创建一个 Azure 免费帐户。
具有完整配置文件的 Red Hat 帐户。 如果没有,可以通过适用于个人的 Red Hat 开发人员订阅注册免费的开发人员订阅。
一个本地开发人员命令行,其安装有类似 UNIX 的命令环境(例如 Ubuntu、macOS 或适用于 Linux 的 Windows 子系统)和 Azure CLI。 要了解如何安装 Azure CLI,请参阅如何安装 Azure CLI。
mysql
CLI。 例如,可以在基于 Ubuntu 或 Debian 的系统上使用以下命令安装 CLI:sudo apt update sudo apt install mysql-server
用于登录的 Azure 标识具有当前订阅中的参与者角色、用户访问管理员角色或所有者角色。 有关 Azure 角色的概述,请参阅 什么是 Azure 基于角色的访问控制 (Azure RBAC)?
注意
Azure Red Hat OpenShift 至少需要 40 个核心才能创建和运行 OpenShift 群集。 新 Azure 订阅的默认 Azure 资源配额不满足此要求。 若要请求增加资源限制,请参阅增加 VM 系列 vCPU 配额。 请注意,免费试用版订阅不符合增加配额的条件。 在请求增加配额之前升级到即用即付订阅。 有关详细信息,请参阅升级 Azure 免费帐户或面向学生的 Azure 入门版帐户。
获取 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 群集管理器门户。 可能需要接受更多条款并更新帐户,如以下屏幕截图所示。 使用与创建帐户时相同的密码。
登录后,选择“OpenShift”,然后选择“下载”。
选择“所有类别”下拉列表,然后选择“令牌”。
在“拉取机密”下,选择“复制”或“下载”以获取值,如以下屏幕截图所示。
以下内容是从 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"}}}
将机密保存到文件中,以便稍后使用。
创建 Red Hat 容器注册表服务帐户
稍后,本文将介绍如何使用源到映像 (S2I) 手动将应用程序部署到 OpenShift。 需要 Red Hat 容器注册表服务帐户才能为运行应用程序的 JBoss EAP 拉取容器映像。 如果你有一个可供使用的 Red Hat 容器注册表服务帐户,请跳过此部分并转到下一部分,你将在其中部署该产品/服务。
使用以下步骤创建 Red Hat 容器注册表服务帐户并获取其用户名和密码。 有关详细信息,请参阅 Red Hat 文档中的创建注册表服务帐户。
- 使用 Red Hat 帐户登录注册表服务帐户管理应用程序。
- 在“注册表服务帐户”页中,选择“新建服务帐户”。
- 为服务帐户提供一个名称。 该名称以固定的随机字符串开头。
- 输入说明。
- 选择“创建”。
- 导航回你的服务帐户。
- 选择创建的服务帐户。
- 记下用户名,包括前面追加的字符串(即
XXXXXXX|username
)。 登录registry.redhat.io
时将使用此用户名。 - 记下密码。 将使用此密码登录
registry.redhat.io
。
- 记下用户名,包括前面追加的字符串(即
你创建了 Red Hat Container Registry 服务帐户。
从 Azure 门户创建 Microsoft Entra 服务主体
本文中使用的 Azure 市场产品/服务需要 Microsoft Entra 服务主体才能部署 Azure Red Hat OpenShift 群集。 该产品/服务会在部署期间为服务主体分配适当的权限,无需进行角色分配。 如果你有可供使用的服务主体,请跳过此部分并转到下一部分,你将在其中创建 Red Hat 容器注册表服务帐户。
使用以下步骤部署服务主体并从 Azure 门户获取其应用程序(客户端)ID 和机密。 有关详细信息,请参阅创建并使用服务主体来部署 Azure Red Hat OpenShift 群集。
注意
你必须具有足够的权限,才能向你的 Microsoft Entra 租户注册应用程序。 如果遇到问题,请查看所需权限,确保帐户可以创建标识。 有关详细信息,请参阅注册 Microsoft Entra 应用并创建服务主体。
通过 Azure 门户登录到 Azure 帐户。
选择“Microsoft Entra ID”。
选择“应用注册” 。
选择“新注册”。
为应用程序命名,例如
jboss-eap-on-aro-app
。 选择支持的帐户类型,它决定了谁可以使用应用程序。 设置好值后,选择“注册”,如以下屏幕截图所示。 预配应用程序需要几秒钟时间。 等待部署完成,然后再继续。从概述页保存应用程序(客户端)ID,如以下屏幕截图所示。 将指针悬停在该值(在屏幕截图中已编辑)上,然后选择出现的复制图标。 工具提示将显示“复制到剪贴板”。 请注意复制正确的值,因为该部分中的其他值也有复制图标。 将应用程序 ID 保存到文件中,以便稍后使用。
按照以下步骤创建新的客户端密码:
- 选择“证书和机密”。
- 选择“客户端密码”,然后选择“新建客户端密码”。
- 提供机密的说明和持续时间。 完成后,选择“添加”。
- 添加客户端密码后,将显示客户端密码的值。 请复制此值,因为以后无法检索此值。 请务必复制值,而不是 机密 ID。
你创建了 Microsoft Entra 应用程序、服务主体和客户端密码。
验证服务主体
运行以下命令以验证服务主体:
az login \
--service-principal \
--username <service-principal-client-id> \
--password <service-principal-client-secret> \
--tenant <tenant-id>
az account show
将 <service-principal-client-id>
、<service-principal-client-secret>
和 <tenant-id>
替换为在前面步骤中获得的值。 如果显示帐户信息,则服务主体有效。
在 Azure Red Hat OpenShift 上部署 JBoss EAP
本部分中的步骤将指导你在 Azure Red Hat OpenShift 上部署 JBoss EAP。
以下步骤演示了如何查找产品/服务并填写“基本信息”窗格。
在 Azure 门户顶部的搜索栏中输入 JBoss EAP。 在搜索结果的“市场”部分中,选择“Azure Red Hat OpenShift 上的 JBoss EAP”,如以下屏幕截图所示。
还可以直接转到 Azure 门户上的 Azure Red Hat OpenShift 上的 JBoss EAP。
在产品/服务页面,选择“创建”。
在“基本信息”窗格中,确保“订阅”字段中显示的值与先决条件部分中列出的角色的值相同。
必须在空资源组中部署产品/服务。 在“资源组”字段中,选择“新建”,然后填写资源组的值。 由于资源组在订阅中必须是唯一的,因此请选择一个唯一名称。 拥有唯一名称的一种简单方法是使用首字母缩写、今天的日期和一些标识符的组合。 例如,eaparo033123rg。
在“实例详细信息”下,选择部署的区域。 有关运行 OpenShift 的 Azure 区域的列表,请参阅 Azure 上的 Red Hat OpenShift 4.x 的区域。
选择“下一步: ARO”。
以下步骤演示如何填写 ARO 窗格,如以下屏幕截图所示:
在“创建新群集”下,选择“是”。
在“提供信息以创建新群集”下,对于“Red Hat 拉取机密”,填写在“获取 Red Hat 拉取机密”部分中获取的 Red Hat 拉取机密。 对“确认机密”使用相同的值。
使用在从 Azure 门户创建 Microsoft Entra 服务主体部分中获取的服务主体应用程序(客户端)ID 填写服务主体客户端 ID。
使用在从 Azure 门户创建 Microsoft Entra 服务主体部分中获取的服务主体应用程序密码填写服务主体客户端密码。 对“确认机密”使用相同的值。
选择“下一个 EAP 应用程序”。
以下步骤演示如何填写“EAP 应用程序”窗格(如以下屏幕截图所示),然后开始部署。
对于“使用源到映像(S2I)将应用程序部署到 OpenShift?”,保留默认选项“否”。
注意
稍后,本快速入门将演示如何使用数据库连接手动部署应用程序。
在完成时选择“下一步:查看 + 创建”。
选择“查看 + 创建”。 确保绿色的“验证通过”消息显示在顶部。 如果未显示该消息,请解决任何验证问题,然后再次选择“查看 + 创建”。
选择创建。
在“部署正在进行”页面跟踪部署进度。
根据所选区域中的网络状况和其他活动,部署可能需要长达 35 分钟才能完成。
在等待的同时,可以设置数据库。
设置 Azure Database for MySQL - 灵活服务器
以下部分介绍如何设置 Azure Database for MySQL - 灵活服务器。
在命令行 shell 中设置环境变量
此示例是由 MySQL 数据库支持的 Java 应用程序,并使用源到映像 (S2I) 部署到 OpenShift 群集。 有关 S2I 的更多信息,请参阅 S2I 文档。
注意
由于 Azure OpenShift 尚不支持 Azure 工作负载标识,本文仍使用用户名和密码进行身份验证,而不是使用无密码数据库连接。
打开 shell 并设置以下环境变量。 根据需要更换替换项。
RG_NAME=<resource-group-name>
SERVER_NAME=<database-server-name>
DB_DATABASE_NAME=testdb
ADMIN_USERNAME=myadmin
ADMIN_PASSWORD=Secret123456
DB_USERNAME=testuser
DB_PASSWORD=Secret123456
PROJECT_NAME=eaparo-sample
CON_REG_SECRET_NAME=eaparo-sample-pull-secret
CON_REG_ACC_USER_NAME="<red-hat-container-registry-service-account-username>"
CON_REG_ACC_PWD="<red-hat-container-registry-service-account-password>"
APPLICATION_NAME=javaee-cafe
APP_REPLICAS=3
使用以下值替换占位符,本文的其余部分将使用这些值:
<resource-group-name>
:先前创建的资源组的名称,例如eaparo033123rg
。<database-server-name>
:MySQL 服务器的名称,该名称应在整个 Azure 中唯一,例如eaparo033123mysql
。ADMIN_PASSWORD
:MySQL 数据库服务器的管理员密码。 本文使用所示密码进行了测试。 有关密码规则,请查看数据库文档。<red-hat-container-registry-service-account-username>
和<red-hat-container-registry-service-account-password>
:先前创建的 Red Hat 容器注册表服务帐户的用户名和密码。
最好将完整填写的名称/值对保存在文本文件中,以防 shell 在你完成命令执行之前退出。 这样,就可将它们粘贴到 shell 的新实例中并轻松继续操作。
这些名称/值对本质上是“机密”。 有关保护 Azure Red Hat OpenShift 安全的生产就绪方法(包括机密管理),请参阅 Azure Red Hat OpenShift 登陆区域加速器的安全性。
创建并初始化数据库
接下来,使用以下步骤创建 Azure Database for MySQL - 灵活服务器,并创建具有从特定数据库读取/写入的权限的用户。
使用以下命令创建 Azure Database for MySQL - 灵活服务器:
az mysql flexible-server create \ --resource-group ${RG_NAME} \ --name ${SERVER_NAME} \ --database-name ${DB_DATABASE_NAME} \ --public-access 0.0.0.0 \ --admin-user ${ADMIN_USERNAME} \ --admin-password ${ADMIN_PASSWORD} \ --yes
此命令可能需要 10 分钟或更长才能完成。 命令成功完成后,会显示类似于以下示例的输出:
{ "connectionString": "mysql testdb --host ejb010406adb.mysql.database.azure.com --user myadmin --password=Secret#123345", "databaseName": "testdb", "firewallName": "AllowAllAzureServicesAndResourcesWithinAzureIps_2023-4-6_21-21-3", "host": "ejb010406adb.mysql.database.azure.com", "id": "/subscriptions/redacted/resourceGroups/ejb010406a/providers/Microsoft.DBforMySQL/flexibleServers/ejb010406adb", "location": "East US", "password": "Secret#123345", "resourceGroup": "ejb010406a", "skuname": "Standard_B1ms", "username": "myadmin", "version": "5.7" }
使用以下命令获取创建的 MySQL 服务器的主机:
DB_HOST=$(az mysql flexible-server show \ --resource-group ${RG_NAME} \ --name ${SERVER_NAME} \ --query "fullyQualifiedDomainName" \ --output tsv) echo $DB_HOST
将名称/值对保存到文本文件。
使用以下命令创建临时防火墙规则以允许从公共互联网连接到 MySQL 服务器:
az mysql flexible-server firewall-rule create \ --resource-group ${RG_NAME} \ --name ${SERVER_NAME} \ --rule-name "AllowAllIPs" \ --start-ip-address 0.0.0.0 \ --end-ip-address 255.255.255.255
使用以下命令创建一个新的数据库用户,该用户具有读写特定数据库的权限。 此命令对于将 SQL 直接发送到数据库很有用。
mysql --host ${DB_HOST} --user ${ADMIN_USERNAME} --password=${ADMIN_PASSWORD} << EOF CREATE USER '${DB_USERNAME}'@'%' IDENTIFIED BY '${DB_PASSWORD}'; GRANT ALL PRIVILEGES ON ${DB_DATABASE_NAME} . * TO '${DB_USERNAME}'@'%'; FLUSH PRIVILEGES; EOF
使用以下命令删除临时防火墙规则:
az mysql flexible-server firewall-rule delete \ --resource-group ${RG_NAME} \ --name ${SERVER_NAME} \ --rule-name "AllowAllIPs" \ --yes
你现在已经运行 MySQL 数据库服务器,并已准备好与应用连接。
验证部署功能
本部分中的步骤演示了如何验证部署已成功完成。
如果你已离开“部署正在进行”页面,后续步骤将演示如何返回该页面。 如果你仍在显示“部署已完成”的页面上,则可以跳到步骤 5。
在任何 Azure 门户页面的一角,选择汉堡菜单,然后选择“资源组”。
在包含文本“筛选任何字段”的框中,输入之前创建的资源组的前几个字符。 如果遵循了建议的约定,请输入缩写,然后选择相应的资源组。
在导航窗格的“设置”部分,选择“部署”。 你将看到此资源组的部署的有序列表,最新的部署在最前面。
滚动到此列表中最早的条目。 此条目对应于在上一部分中启动的部署。 选择最早的部署,如以下屏幕截图所示。
在导航窗格中,选择“输出”。 此列表显示部署的输出值,其中包括一些有用的信息。
打开 shell,粘贴 cmdToGetKubeadminCredentials 字段中的值并执行它。 你将看到用于登录 OpenShift 群集控制台门户的管理员帐户和凭据。 以下示例显示了管理员帐户:
az aro list-credentials --resource-group eaparo033123rg --name clusterf9e8b9
此命令会生成类似于以下示例的输出:
{ "kubeadminPassword": "xxxxx-xxxxx-xxxxx-xxxxx", "kubeadminUsername": "kubeadmin" }
将 consoleUrl 字段中的值粘贴到连接到 Internet 的 Web 浏览器中,然后按 Enter。 填写管理员用户名和密码,然后选择“登录”。 在 Azure Red Hat OpenShift 的管理控制台中,选择“操作程序”>“已安装的操作程序”,可以看到 JBoss EAP 操作程序已成功安装,如下图所示。
接下来,按照以下步骤使用 OpenShift CLI 连接到 OpenShift 群集:
在 shell 中,使用以下命令下载适用于 GNU/Linux 的最新 OpenShift 4 CLI。 如果在 GNU/Linux 以外的操作系统上运行,请下载适合该操作系统的二进制文件。
cd ~ wget https://mirror.openshift.com/pub/openshift-v4/clients/ocp/latest/openshift-client-linux.tar.gz mkdir openshift tar -zxvf openshift-client-linux.tar.gz -C openshift echo 'export PATH=$PATH:~/openshift' >> ~/.bashrc && source ~/.bashrc
将 cmdToLoginWithKubeadmin 字段中的值粘贴到 shelll 中,然后执行它。 此时应该会看到
login successful
消息和正在使用的项目。 以下内容是使用 OpenShift CLI 连接到 OpenShift 群集的命令示例。oc login \ $(az aro show \ --resource-group ${RG_NAME} \ --name aro-cluster \ --query apiserverProfile.url \ --output tsv) \ -u $(az aro list-credentials \ --resource-group ${RG_NAME} \ --name aro-cluster \ --query kubeadminUsername \ --output tsv) \ -p $(az aro list-credentials \ --resource-group ${RG_NAME} \ --name aro-cluster \ --query kubeadminPassword \ --output tsv)
此命令会生成类似于以下示例的输出:
Login successful. You have access to 68 projects, the list has been suppressed. You can list all projects with 'oc projects' Using project "default".
将 JBoss EAP 应用部署到 OpenShift 群集
本部分中的步骤演示如何在群集上部署应用程序。
将应用部署到群集
使用以下步骤将应用部署到群集。 该应用程序托管在 GitHub 存储库 rhel-jboss-templates/eap-coffee-app 中。
在 shell 中运行以下命令。 这些命令会创建项目,应用权限以启用 S2I,对拉取密钥创建映像,并将密钥链接到项目中的相关服务帐户来进行映像拉取。 忽略有关“detached HEAD 状态”的 Git 警告。
git clone https://github.com/Azure/rhel-jboss-templates.git cd rhel-jboss-templates git checkout 20240904 cd .. oc new-project ${PROJECT_NAME} oc adm policy add-scc-to-user privileged -z default --namespace ${PROJECT_NAME} w0=-w0 if [[ $OSTYPE == 'darwin'* ]]; then w0= fi CON_REG_ACC_USER_NAME_BASE64=$(echo ${CON_REG_ACC_USER_NAME} | base64 $w0) CON_REG_ACC_PWD_BASE64=$(echo ${CON_REG_ACC_PWD} | base64 $w0)
由于下一节使用 HEREDOC 格式,因此最好将其包含在自己的代码摘录中并执行。
cat <<EOF | oc apply -f - apiVersion: v1 kind: Secret metadata: name: ${CON_REG_SECRET_NAME} type: Opaque data: username: ${CON_REG_ACC_USER_NAME_BASE64} password: ${CON_REG_ACC_PWD_BASE64} stringData: hostname: registry.redhat.io EOF
必须看到
secret/eaparo-sample-pull-secret created
,它表明已成功创建机密。 如果没有看到此输出,请先排除故障并解决问题,然后再继续。 最后,将机密链接到用于下载容器映像的默认服务帐户,以便群集可以运行它们。oc secrets link default ${CON_REG_SECRET_NAME} --for=pull oc secrets link builder ${CON_REG_SECRET_NAME} --for=pull
然后,使用以下命令拉取
jboss-eap74-openjdk11-openshift
映像。 然后,启动源到映像进程,并等待它完成。oc apply -f https://raw.githubusercontent.com/jboss-container-images/jboss-eap-openshift-templates/eap74/eap74-openjdk11-image-stream.json oc new-build --name=${APPLICATION_NAME} --binary --image-stream=jboss-eap74-openjdk11-openshift:7.4.0 -e CUSTOM_INSTALL_DIRECTORIES=extensions oc start-build ${APPLICATION_NAME} --from-dir=rhel-jboss-templates/eap-coffee-app --follow
成功输出的结尾应如下所示:
Writing manifest to image destination
Storing signatures
Successfully pushed image-registry.openshift-image-registry.svc:5000/eaparo-sample/javaee-cafe@sha256:754587c33c03bf42ba4f3ce5a11526bbfc82aea94961ce1179a415c2bfa73449
Push successful
如果没有看到类似的输出,请先排除故障并解决问题,然后再继续。
为数据库密码创建机密
接下来,使用以下步骤创建机密:
使用以下命令创建用于保存数据库密码的机密:
oc create secret generic db-secret --from-literal=password=${DB_PASSWORD}
使用以下命令在群集中部署和运行容器化应用的三个副本:
cat <<EOF | oc apply -f - apiVersion: wildfly.org/v1alpha1 kind: WildFlyServer metadata: name: ${APPLICATION_NAME} spec: applicationImage: ${APPLICATION_NAME}:latest replicas: ${APP_REPLICAS} env: - name: DB_SERVICE_PREFIX_MAPPING value: TEST-MYSQL=DS1 - name: TEST_MYSQL_SERVICE_HOST value: ${DB_HOST} - name: TEST_MYSQL_SERVICE_PORT value: '3306' - name: DS1_JNDI value: java:jboss/datasources/JavaEECafeDB - name: DS1_URL value: jdbc:mysql://${DB_HOST}:3306/${DB_DATABASE_NAME} - name: DS1_DRIVER value: mysql - name: DS1_DATABASE value: ${DB_DATABASE_NAME} - name: DS1_USERNAME value: ${DB_USERNAME} - name: DS1_PASSWORD valueFrom: secretKeyRef: name: db-secret key: password secrets: - db-secret EOF
如果命令成功完成,应会看到
wildflyserver.wildfly.org/javaee-cafe created
。 如果没有看到此输出,请先排除故障并解决问题,然后再继续。运行
oc get pod -w | grep 1/1
以监视应用的所有 Pod 是否正在运行。 看到类似于以下示例的输出时,按 Ctrl + C 停止监视:javaee-cafe-2 1/1 Running 0 31s javaee-cafe-1 1/1 Running 0 30s javaee-cafe-0 1/1 Running 0 30s
可能需要几分钟才能达到正确的状态。 在显示
Running
之前,你甚至可以看到STATUS
列值,包括ErrImagePull
和ImagePullBackOff
。运行以下命令以返回应用程序的 URL。 可以使用此 URL 访问已部署的示例应用程序。 将输出复制到剪贴板。
echo http://$(oc get route ${APPLICATION_NAME}-route -o=jsonpath='{.spec.host}')/javaee-cafe
将输出粘贴到连接 Internet 的 Web 浏览器中,然后按 Enter。 此时应该会看到 Java EE Cafe 应用的 UI,如以下屏幕截图所示:
添加和删除某些行以验证数据库连接是否正常工作。
清理资源
如果不打算继续使用 OpenShift 群集,请导航回工作资源组。 在页面顶部的“资源组”文本下,选择资源组。 然后,选择“删除资源组”。
下一步
有关部署 Azure 上的 JBoss EAP 的详细信息,请参阅 Azure 上的 Red Hat JBoss EAP。