在 Azure Kubernetes 服务 (AKS) 群集上使用 WebLogic Server 部署 Java 应用程序
本文演示了以下内容的操作方法:
- 在 Oracle WebLogic Server (WLS) 上运行 Java 应用程序。
- 使用 Azure 市场产品/服务在 AKS 上建立 WebLogic Server 群集。
- 生成包含 WebLogic 部署工具 (WDT) 模型的应用程序 Docker 映像。
- 将容器化应用程序部署到 AKS 上的 WebLogic 服务器群集,并连接到 Azure SQL。
本文使用适用于 WebLogic Server 的 Azure 市场产品/服务来加速你的 AKS 之旅。 该产品/服务会自动预配多种 Azure 资源,包括以下资源:
- Azure 容器注册表实例
- 一个 AKS 群集
- Azure 应用程序网关入口控制器 (AGIC) 实例
- WebLogic 运算符
- 包含 WebLogic 运行时的容器映像
- 没有应用程序的 WebLogic Server 群集
然后,本文介绍如何生成映像以更新 WebLogic Server 群集。 该映像提供应用程序和 WDT 模型。
如果希望采用自动化程度较低的方法在 AKS 上部署 WebLogic,请参阅 Oracle 官方文档 Azure Kubernetes 服务中包含的分步指南。
如果你有兴趣提供反馈或与开发 WebLogic on AKS 解决方案的工程团队就迁移方案展开密切合作,请填写这份简短的有关 WebLogic 迁移的调查并提供联系人信息。 项目经理、架构师和工程师团队会及时与你联系,以开展密切合作。
先决条件
- 如果没有 Azure 订阅,可在开始前创建一个试用帐户。
- 确保用于登录并完成本文的 Azure 标识具有当前订阅中的所有者角色,或当前订阅中的参与者和 用户访问管理员角色。 有关 Azure 角色的概述,请参阅什么是 Azure 基于角色的访问控制 (Azure RBAC)? 有关 AKS 上的 WLS 所需的特定角色的详细信息,请参阅Azure 内置角色。
- 具有 Oracle 单一登录 (SSO) 帐户的凭据。 要创建帐户,请参阅创建 Oracle 帐户。
- 接受 WebLogic Server 的许可条款。
- 访问Oracle 容器注册表并登录。
- 如果有支持权利,请选择“中间件”,然后搜索并选择“weblogic_cpu”。
- 如果没有 Oracle 的支持权利,请选择“中间件”,然后搜索并选择“Weblogic”。
- 接受许可协议。
注意
在进入生产之前,获取 Oracle 的支持权利。 否则会导致运行不安全的映像,这些映像未针对严重安全漏洞进行修补。 有关 Oracle 的关键补丁更新的详细信息,请参阅 Oracle 中的关键补丁更新、安全警报和公告。
- 准备安装了 Unix 之类操作系统(如 Ubuntu、Azure Linux、macOS、适用于 Linux 的 Windows 子系统)的本地计算机。
- Azure CLI。 使用
az --version
测试 az 是否有效。 本文档已使用版本 2.55.1 进行测试。 - kubectl。 使用
kubectl version
测试 kubectl 是否有效。 本文档已使用版本 v1.21.2 进行测试。 - 与你打算运行的 WebLogic Server 版本兼容的 Java 开发工具包 (JDK)。 本文指导你安装使用 JDK 11 的 WebLogic Server 版本。 确保在运行命令的 shell 中正确设置
JAVA_HOME
环境变量。 - Maven 3.5.0 或更高版本。
- 确保已安装 zip/unzip 实用工具。 使用
zip/unzip -v
测试zip/unzip
是否有效。
- Azure CLI。 使用
部署 AKS 上的 WebLogic Server
以下步骤演示了如何查找 AKS 上的 WebLogic Server 产品/服务并填写“基本信息”窗格。
在 Azure 门户顶部的搜索栏中输入“weblogic”。 在自动建议的搜索结果的“Azure 市场”部分中,选择“AKS 上的 WebLogic Server”。
也可以直接访问 AKS 上的 WebLogic Server 产品/服务。
在产品/服务页面,选择“创建”。
在“基本信息”窗格中,确保“订阅”字段中显示的值与你在登录 Azure 时使用的值相同。 确保你在订阅中使用“先决条件”部分中列出的角色。
必须在空资源组中部署产品/服务。 在“资源组”字段中,选择“新建”,然后填写资源组的值。 由于资源组在订阅中必须是唯一的,因此请选择一个唯一名称。 拥有唯一名称的一种简单方法是使用首字母缩写、今天的日期和一些标识符的组合,例如
ejb0723wls
。在“实例详细信息”下,选择部署的区域。
在“WebLogic 的凭据”下,保留““WebLogic 管理员用户名”的默认值。
填写“WebLogic 管理员密码”的
wlsAksCluster2022
。 对确认和“WebLogic 模型加密的密码”字段使用相同的值。选择下一步。
以下步骤演示了如何启动部署流程。
滚动到标记为“提供 Oracle 单一登录 (SSO) 帐户”的部分。 填写先决条件中的 Oracle SSO 凭据。
确保记下信息框中从“在继续之前,必须先接受 Oracle 标准条款和限制”开始的步骤。
根据 Oracle SSO 帐户是否具有 Oracle 支持权利,为“选择 WebLogic Server 映像的类型”选择适当的选项。 如果帐户具有支持权利,请选择“修补的 WebLogic Server 映像”。 否则,请选择“常规 WebLogic Server 映像”。
将“选择所需的 WebLogic Server 组合...”中的值保留为默认值。 有多种 WebLogic Server、JDK 和 OS 版本可供选择。
在“应用程序”部分中,选择“部署应用程序?”旁边的“否”。
以下步骤使 WebLogic Server 管理控制台和示例应用通过内置的应用程序网关入口加载项向公共 Internet 公开。 有关详细信息,请参阅什么是应用程序网关入口控制器?
选择“下一步”以查看“TLS/SSL”窗格。
选择“下一步”以查看“负载均衡”窗格。
在“负载均衡选项”旁边,选择“应用程序网关入口控制器”。
在“应用程序网关入口控制器”下,应该会看到所有字段均已预填充“虚拟网络”和“子网”的默认值。 保留默认值。
对于“为管理控制台创建入口”,选择“是”。
对于其他字段,保留默认值。
选择“查看 + 创建”。 确保验证不会失败。 如果失败,请解决任何验证问题,然后再次选择“查看 + 创建”。
选择创建。
在“部署正在进行”页面跟踪部署进度。
根据所选区域中的网络状况和其他活动,部署可能需要长达 50 分钟才能完成。
可以在等待期间执行“创建 Azure SQL 数据库”部分中的步骤。 完成数据库创建后,返回到本部分。
检查部署输出
使用本部分中的步骤验证部署是否成功。
如果你已离开“部署正在进行”页面,后续步骤将演示如何返回该页面。 如果仍在显示“部署已完成”的页面上,则可以跳到下一个屏幕截图后的步骤 5。
在任何 Azure 门户页面的一角,依次选择汉堡菜单和“资源组”。
在包含文本“筛选任何字段”的框中,输入之前创建的资源组的前几个字符。 如果遵循了建议的约定,请输入缩写,然后选择相应的资源组。
在导航窗格的“设置”部分,选择“部署”。 你将看到此资源组的部署的有序列表,最新的部署在最前面。
滚动到此列表中最早的条目。 此条目对应于在上一部分中启动的部署。 选择最早的部署,如以下屏幕截图所示。
在导航窗格中,选择“输出”。 此列表显示了部署的输出值。 输出中包含有用的信息。
adminConsoleExternalUrl 值是指向此 AKS 群集的 WebLogic Server 管理控制台的完全限定的公共 Internet 可见链接。 选择该字段值旁边的复制图标以将链接复制到剪贴板。 保存此值供稍后使用。
clusterExternalUrl 值是指向此 AKS 群集上部署在 WebLogic Server 中的示例应用的完全限定的公共 Internet 可见链接。 选择该字段值旁边的复制图标以将链接复制到剪贴板。 保存此值供稍后使用。
shellCmdtoOutputWlsImageModelYaml 值是用于生成容器映像的 WDT 模型的 base64 字符串。 保存此值供稍后使用。
shellCmdtoOutputWlsImageProperties 值是用于生成容器映像的 WDT 模型属性的 base64 字符串。 保存此值供稍后使用。
shellCmdtoConnectAks 值是用于连接到此特定 AKS 群集的 Azure CLI 命令。
输出中的其他值超出了本文范围,但在AKS 上的 WebLogic 用户指南中对此进行了详细说明。
创建 Azure SQL 数据库
若要创建用于应用的 Azure SQL 数据库单一数据库,请按照快速入门:在 Azure SQL 数据库中创建单一数据库中的步骤操作。 请仔细注意以下差异:
在“基本信息”步骤中,记下“资源组”、“数据库名称”、“<server-name>.database.chinacloudapi.cn”、“服务器管理员登录名”和“密码”的值。 本文将数据库资源组值称为
<db-resource-group>
。在“网络”步骤中,将“连接方法”设置为“公用终结点”,将“允许 Azure 服务和资源访问此服务器”设置为“是”,将“当前客户端 IP 地址”设置为“是”。
注意
你为此数据库选择的无服务器计算层通过在处于非活动状态期间使数据库进入睡眠状态来节省资金。 如果当应用启动时数据库处于睡眠状态,则示例应用将失败。
若要强制数据库唤醒,可以使用查询编辑器运行查询。 请按照查询数据库中的步骤进行操作。 下面是一个示例查询:SELECT * FROM COFFEE;
。
然后,使用以下步骤为示例应用程序创建架构:
按照快速入门:创建单一数据库 - Azure SQL 数据库的查询数据库部分中的步骤,打开“查询编辑器”窗格。
键入并运行以下查询:
CREATE TABLE COFFEE (ID NUMERIC(19) NOT NULL, NAME VARCHAR(255) NULL, PRICE FLOAT(32) NULL, PRIMARY KEY (ID)); CREATE TABLE SEQUENCE (SEQ_NAME VARCHAR(50) NOT NULL, SEQ_COUNT NUMERIC(28) NULL, PRIMARY KEY (SEQ_NAME)); INSERT INTO SEQUENCE VALUES ('SEQ_GEN',0);
成功运行后,应该会看到消息“查询成功: 受影响的行: 1”。 如果没有看到此消息,请先排除故障并解决问题,然后再继续。
数据库、表、AKS 集群和 WebLogic Server 群集已创建。 如果需要,可以通过打开浏览器并导航到 adminConsoleExternalUrl 地址来探索管理控制台。 使用在部署 AKS 上的 WebLogic Server 期间输入的值登录。
可以继续准备 AKS 来托管 WebLogic 应用程序。
配置和部署示例应用程序
产品/服务通过映像中的模型来预配 WebLogic Server 群集。 目前,WebLogic Server 群集尚未部署任何应用程序。
本部分使用辅助映像部署示例应用程序,以此来更新 WebLogic Server 群集。
签出应用程序
在本部分,你将克隆本指南的示例代码。 该示例位于 GitHub 上 weblogic-on-azure 存储库的 javaee/weblogic-cafe/ 文件夹中。 下面是应用程序的文件结构。
weblogic-cafe
├── pom.xml
└── src
└── main
├── java
│ └── cafe
│ ├── model
│ │ ├── CafeRepository.java
│ │ └── entity
│ │ └── Coffee.java
│ └── web
│ ├── rest
│ │ └── CafeResource.java
│ └── view
│ └── Cafe.java
├── resources
│ ├── META-INF
│ │ └── persistence.xml
│ └── cafe
│ └── web
│ ├── messages.properties
│ └── messages_es.properties
└── webapp
├── WEB-INF
│ ├── beans.xml
│ ├── faces-config.xml
│ └── web.xml
├── index.xhtml
└── resources
└── components
└── inputPrice.xhtml
使用以下命令克隆存储库:
cd <parent-directory-to-check-out-sample-code>
export BASE_DIR=$PWD
git clone --single-branch https://github.com/microsoft/weblogic-on-azure.git --branch 20240201 $BASE_DIR/weblogic-on-azure
如果看到消息显示正处于“拆离的 HEAD”状态,可以放心地忽略此消息。 这只标识你签出了一个标签。
使用以下命令构建 javaee/weblogic-cafe/:
mvn clean package --file $BASE_DIR/weblogic-on-azure/javaee/weblogic-cafe/pom.xml
该软件包应已成功生成并位于 $BASE_DIR/weblogic-on-azure/javaee/weblogic-cafe/target/weblogic-cafe.war。 如果没有看到该包,则必须先排查并解决问题,然后才能继续。
使用 ACR 创建辅助映像
本节中的步骤说明如何构建辅助映像。 该映像包括以下组件:
- 映像中的模型模型文件
- 应用程序
- Java 数据库连接 (JDBC) 驱动程序存档文件
- WebLogic 部署工具安装
辅助映像是包含应用程序和配置的 Docker 容器映像。 WebLogic Kubernetes 运算符将辅助映像与包含 WebLogic Server、JDK 和操作系统的 AKS 群集中的 domain.spec.image
相结合。 有关辅助映像的更多信息,请参阅 Oracle 文档中的辅助映像。
本部分需要安装 Azure CLI 和 kubectl 的 Linux 终端。
使用以下步骤构建映像:
使用以下命令创建一个目录来暂存模型和应用程序:
mkdir -p ${BASE_DIR}/mystaging/models cd ${BASE_DIR}/mystaging/models
复制从部署输出中保存的 shellCmdtoOutputWlsImageModelYaml 值,将其粘贴到 Bash 窗口中,然后运行命令。 命令应类似于以下示例:
echo -e IyBDb3B5cmlna...Cgo= | base64 -d > model.yaml
此命令会生成一个 ${BASE_DIR}/mystaging/models/model.yaml 文件,其内容类似于以下示例:
# Copyright (c) 2020, 2021, Oracle and/or its affiliates. # Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. # Based on ./kubernetes/samples/scripts/create-weblogic-domain/model-in-image/model-images/model-in-image__WLS-v1/model.10.yaml # in https://github.com/oracle/weblogic-kubernetes-operator. domainInfo: AdminUserName: "@@SECRET:__weblogic-credentials__:username@@" AdminPassword: "@@SECRET:__weblogic-credentials__:password@@" ServerStartMode: "prod" topology: Name: "@@ENV:CUSTOM_DOMAIN_NAME@@" ProductionModeEnabled: true AdminServerName: "admin-server" Cluster: "cluster-1": DynamicServers: ServerTemplate: "cluster-1-template" ServerNamePrefix: "@@ENV:MANAGED_SERVER_PREFIX@@" DynamicClusterSize: "@@PROP:CLUSTER_SIZE@@" MaxDynamicClusterSize: "@@PROP:CLUSTER_SIZE@@" MinDynamicClusterSize: "0" CalculatedListenPorts: false Server: "admin-server": ListenPort: 7001 ServerTemplate: "cluster-1-template": Cluster: "cluster-1" ListenPort: 8001 SecurityConfiguration: NodeManagerUsername: "@@SECRET:__weblogic-credentials__:username@@" NodeManagerPasswordEncrypted: "@@SECRET:__weblogic-credentials__:password@@" resources: SelfTuning: MinThreadsConstraint: SampleMinThreads: Target: "cluster-1" Count: 1 MaxThreadsConstraint: SampleMaxThreads: Target: "cluster-1" Count: 10 WorkManager: SampleWM: Target: "cluster-1" MinThreadsConstraint: "SampleMinThreads" MaxThreadsConstraint: "SampleMaxThreads"
以类似的方式复制 shellCmdtoOutputWlsImageProperties 值,将其粘贴到 Bash 窗口中,然后运行命令。 命令应类似于以下示例:
echo -e IyBDb3B5cml...pFPTUK | base64 -d > model.properties
此命令会生成一个 ${BASE_DIR}/mystaging/models/model.properties 文件,其内容类似于以下示例:
# Copyright (c) 2021, Oracle Corporation and/or its affiliates. # Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. # Based on ./kubernetes/samples/scripts/create-weblogic-domain/model-in-image/model-images/model-in-image__WLS-v1/model.10.properties # in https://github.com/oracle/weblogic-kubernetes-operator. CLUSTER_SIZE=5
使用以下步骤创建应用程序模型文件。
使用以下命令复制 weblogic-cafe.war 并将其保存到 wlsdeploy/applications:
mkdir -p ${BASE_DIR}/mystaging/models/wlsdeploy/applications cp $BASE_DIR/weblogic-on-azure/javaee/weblogic-cafe/target/weblogic-cafe.war ${BASE_DIR}/mystaging/models/wlsdeploy/applications/weblogic-cafe.war
使用以下命令创建具有所示内容的应用程序模型文件。 将模型文件保存到 ${BASE_DIR}/mystaging/models/appmodel.yaml。
cat <<EOF >appmodel.yaml appDeployments: Application: weblogic-cafe: SourcePath: 'wlsdeploy/applications/weblogic-cafe.war' ModuleType: ear Target: 'cluster-1' EOF
使用以下命令将 Microsoft SQL Server JDBC 驱动程序下载并安装到 wlsdeploy/externalJDBCLibraries:
export DRIVER_VERSION="10.2.1.jre8" export MSSQL_DRIVER_URL="https://repo.maven.apache.org/maven2/com/microsoft/sqlserver/mssql-jdbc/${DRIVER_VERSION}/mssql-jdbc-${DRIVER_VERSION}.jar" mkdir ${BASE_DIR}/mystaging/models/wlsdeploy/externalJDBCLibraries curl -m 120 -fL ${MSSQL_DRIVER_URL} -o ${BASE_DIR}/mystaging/models/wlsdeploy/externalJDBCLibraries/mssql-jdbc-${DRIVER_VERSION}.jar
接下来,使用以下命令创建数据库连接模型文件,其内容如下所示。 将模型文件保存到 ${BASE_DIR}/mystaging/models/dbmodel.yaml。 该模型使用占位符(机密
sqlserver-secret
)作为数据库用户名、密码和 URL。 确保以下字段设置正确。 以下模型使用jdbc/WebLogicCafeDB
命名资源。项名称 字段 值 JNDI 名称 resources.JDBCSystemResource.<resource-name>.JdbcResource.JDBCDataSourceParams.JNDIName
jdbc/WebLogicCafeDB
驱动程序名称 resources.JDBCSystemResource.<resource-name>.JDBCDriverParams.DriverName
com.microsoft.sqlserver.jdbc.SQLServerDriver
数据库 URL resources.JDBCSystemResource.<resource-name>.JDBCDriverParams.URL
@@SECRET:sqlserver-secret:url@@
数据库密码 resources.JDBCSystemResource.<resource-name>.JDBCDriverParams.PasswordEncrypted
@@SECRET:sqlserver-secret:password@@
数据库用户名 resources.JDBCSystemResource.<resource-name>.JDBCDriverParams.Properties.user.Value
'@@SECRET:sqlserver-secret:user@@'
cat <<EOF >dbmodel.yaml resources: JDBCSystemResource: jdbc/WebLogicCafeDB: Target: 'cluster-1' JdbcResource: JDBCDataSourceParams: JNDIName: [ jdbc/WebLogicCafeDB ] GlobalTransactionsProtocol: None JDBCDriverParams: DriverName: com.microsoft.sqlserver.jdbc.SQLServerDriver URL: '@@SECRET:sqlserver-secret:url@@' PasswordEncrypted: '@@SECRET:sqlserver-secret:password@@' Properties: user: Value: '@@SECRET:sqlserver-secret:user@@' JDBCConnectionPoolParams: TestTableName: SQL SELECT 1 TestConnectionsOnReserve: true EOF
使用以下命令创建应用程序存档文件,然后移除不再需要的 wlsdeploy 文件夹:
cd ${BASE_DIR}/mystaging/models zip -r archive.zip wlsdeploy rm -f -r wlsdeploy
使用以下命令在暂存目录中下载并安装 WebLogic 部署工具 (WDT),然后移除其 weblogic-deploy/bin/*.cmd 文件(这些文件在 UNIX 环境中不使用):
cd ${BASE_DIR}/mystaging curl -m 120 -fL https://github.com/oracle/weblogic-deploy-tooling/releases/latest/download/weblogic-deploy.zip -o weblogic-deploy.zip unzip weblogic-deploy.zip -d . rm ./weblogic-deploy/bin/*.cmd
使用以下命令移除 WDT 安装程序:
rm weblogic-deploy.zip
使用以下命令创建一个 dockerfile:
cd ${BASE_DIR}/mystaging cat <<EOF >Dockerfile FROM busybox ARG AUXILIARY_IMAGE_PATH=/auxiliary ARG USER=oracle ARG USERID=1000 ARG GROUP=root ENV AUXILIARY_IMAGE_PATH=\${AUXILIARY_IMAGE_PATH} RUN adduser -D -u \${USERID} -G \$GROUP \$USER # ARG expansion in COPY command's --chown is available in docker version 19.03.1+. # For older docker versions, change the Dockerfile to use separate COPY and 'RUN chown' commands. COPY --chown=\$USER:\$GROUP ./ \${AUXILIARY_IMAGE_PATH}/ USER \$USER EOF
使用 ${BASE_DIR}/mystaging/Dockerfile 运行
az acr build
命令,如以下示例所示:export ACR_NAME=<value-from-clipboard> export IMAGE="wlsaks-auxiliary-image:1.0"
使用以下命令仔细检查暂存文件:
cd ${BASE_DIR}/mystaging find -maxdepth 2 -type f -print
此命令会生成类似于以下示例的输出:
./models/model.properties ./models/model.yaml ./models/archive.zip ./Dockerfile ./weblogic-deploy/VERSION.txt ./weblogic-deploy/LICENSE.txt
使用
az acr build
以下示例所示生成映像:az acr build -t ${IMAGE} --build-arg AUXILIARY_IMAGE_PATH=/auxiliary -r ${ACR_NAME} --platform linux/amd64 .
成功构建映像后,输出类似于以下示例:
... Step 1/9 : FROM busybox latest: Pulling from library/busybox Digest: sha256:9ae97d36d26566ff84e8893c64a6dc4fe8ca6d1144bf5b87b2b85a32def253c7 Status: Image is up to date for busybox:latest ---> 65ad0d468eb1 Step 2/9 : ARG AUXILIARY_IMAGE_PATH=/auxiliary ---> Running in 1f8f4e82ccb6 Removing intermediate container 1f8f4e82ccb6 ---> 947fde618be9 Step 3/9 : ARG USER=oracle ---> Running in dda021591e41 Removing intermediate container dda021591e41 ---> f43d84be4517 Step 4/9 : ARG USERID=1000 ---> Running in cac4df6dfd13 Removing intermediate container cac4df6dfd13 ---> e5513f426c74 Step 5/9 : ARG GROUP=root ---> Running in 8fec1763270c Removing intermediate container 8fec1763270c ---> 9ef233dbe279 Step 6/9 : ENV AUXILIARY_IMAGE_PATH=${AUXILIARY_IMAGE_PATH} ---> Running in b7754f58157a Removing intermediate container b7754f58157a ---> 4a26a97eb572 Step 7/9 : RUN adduser -D -u ${USERID} -G $GROUP $USER ---> Running in b6c1f1a81af1 Removing intermediate container b6c1f1a81af1 ---> 97d3e5ad7540 Step 8/9 : COPY --chown=$USER:$GROUP ./ ${AUXILIARY_IMAGE_PATH}/ ---> 21088171876f Step 9/9 : USER $USER ---> Running in 825e0abc9f6a Removing intermediate container 825e0abc9f6a ---> b81d6430fcda Successfully built b81d6430fcda Successfully tagged wlsaksacru6jyly7kztoqu.azurecr.cn/wlsaks-auxiliary-image:1.0 2024/08/28 03:06:19 Successfully executed container: build 2024/08/28 03:06:19 Executing step ID: push. Timeout(sec): 3600, Working directory: '', Network: '' 2024/08/28 03:06:19 Pushing image: wlsaksacru6jyly7kztoqu.azurecr.cn/wlsaks-auxiliary-image:1.0, attempt 1 The push refers to repository [wlsaksacru6jyly7kztoqu.azurecr.cn/wlsaks-auxiliary-image] ee589b3cda86: Preparing c1fd1adab3b9: Preparing d51af96cf93e: Preparing c1fd1adab3b9: Pushed d51af96cf93e: Pushed ee589b3cda86: Pushed 1.0: digest: sha256:c813eb75576eb07a179c3cb4e70106ca7dd280f933ab33a2f6858de673b12eac size: 946 2024/08/28 03:06:21 Successfully pushed image: wlsaksacru6jyly7kztoqu.azurecr.cn/wlsaks-auxiliary-image:1.0 2024/08/28 03:06:21 Step ID: build marked as successful (elapsed time in seconds: 8.780235) 2024/08/28 03:06:21 Populating digests for step ID: build... 2024/08/28 03:06:22 Successfully populated digests for step ID: build 2024/08/28 03:06:22 Step ID: push marked as successful (elapsed time in seconds: 1.980158) 2024/08/28 03:06:22 The following dependencies were found: 2024/08/28 03:06:22 - image: registry: wlsaksacru6jyly7kztoqu.azurecr.cn repository: wlsaks-auxiliary-image tag: "1.0" digest: sha256:c813eb75576eb07a179c3cb4e70106ca7dd280f933ab33a2f6858de673b12eac runtime-dependency: registry: registry.hub.docker.com repository: library/busybox tag: latest digest: sha256:9ae97d36d26566ff84e8893c64a6dc4fe8ca6d1144bf5b87b2b85a32def253c7 git: {} Run ID: ca1 was successful after 14s
映像在成功生成后推送到 ACR。
可以运行
az acr repository show
来测试映像是否成功已推送到远程存储库,如以下示例所示:az acr repository show --name ${ACR_NAME} --image ${IMAGE}
此命令应生成类似于以下示例的输出:
{ "changeableAttributes": { "deleteEnabled": true, "listEnabled": true, "readEnabled": true, "writeEnabled": true }, "createdTime": "2024-01-24T06:14:19.4546321Z", "digest": "sha256:a1befbefd0181a06c6fe00848e76f1743c1fecba2b42a975e9504ba2aaae51ea", "lastUpdateTime": "2024-01-24T06:14:19.4546321Z", "name": "1.0", "quarantineState": "Passed", "signed": false }
应用辅助映像
在前面的步骤中,你创建了包括模型和 WDT 的辅助映像。 在将辅助映像应用到 WebLogic Server 群集之前,请使用以下步骤为数据源 URL、用户名和密码创建密钥。 该机密用作 dbmodel.yaml 中占位符的一部分。
通过复制之前保存的 shellCmdtoConnectAks 值,将其粘贴到 Bash 窗口中,然后运行命令来连接到 AKS 群集。 命令应类似于以下示例:
az account set --subscription <subscription>; az aks get-credentials \ --resource-group <resource-group> \ --name <name>
应会看到与如下示例类似的输出。 如果没有看到此输出,请先排除故障并解决问题,然后再继续。
Merged "<name>" as current context in /Users/<username>/.kube/config
使用以下步骤获取下表中显示的变量的值。 你将使用这些值为数据源连接创建机密。
变量 说明 示例 DB_CONNECTION_STRING
SQL Server 的连接字符串。 jdbc:sqlserver://server-name.database.chinacloudapi.cn:1433;database=wlsaksquickstart0125
DB_USER
用于登录 SQL Server 的用户名。 welogic@sqlserverforwlsaks
DB_PASSWORD
用于登录 SQL Server 的密码。 Secret123456
访问 Azure 门户中的 SQL 数据库资源。
在导航窗格的“设置”下,选择“连接字符串”。
选择“JDBC”选项卡。
选择复制按钮,以将连接字符串复制到剪贴板。
对于
DB_CONNECTION_STRING
,使用整个连接字符串,但将占位符{your_password_here}
替换为数据库密码。对于
DB_USER
,请使用从azureuser
到(但不包括);password={your_password_here}
的连接字符串部分。对于
DB_PASSWORD
,请使用创建数据库时输入的值。
使用以下命令创建 Kubernetes 机密。 本文使用机密名称
sqlserver-secret
作为数据源连接的机密。 如果使用不同的名称,请确保该值与 dbmodel.yaml 中的值相同。在以下命令中,请确保通过将占位符示例替换为前面步骤中描述的值来正确设置变量
DB_CONNECTION_STRING
、DB_USER
和DB_PASSWORD
。 为防止 shell 干扰这些值,请务必将DB_
变量的值以单引号括起。export DB_CONNECTION_STRING='<example-jdbc:sqlserver://server-name.database.chinacloudapi.cn:1433;database=wlsaksquickstart0125>' export DB_USER='<example-welogic@sqlserverforwlsaks>' export DB_PASSWORD='<example-Secret123456>' export WLS_DOMAIN_NS=sample-domain1-ns export WLS_DOMAIN_UID=sample-domain1 export SECRET_NAME=sqlserver-secret export ACR_LOGIN_SERVER=$(az acr show --name ${ACR_NAME} --query "loginServer" --output tsv) kubectl -n ${WLS_DOMAIN_NS} create secret generic \ ${SECRET_NAME} \ --from-literal=password="${DB_PASSWORD}" \ --from-literal=url="${DB_CONNECTION_STRING}" \ --from-literal=user="${DB_USER}" kubectl -n ${WLS_DOMAIN_NS} label secret \ ${SECRET_NAME} \ weblogic.domainUID=${WLS_DOMAIN_UID}
必须看到以下输出,然后才能继续。 如果没有看到此输出,请先排除故障并解决问题,然后再继续。
secret/sqlserver-secret created secret/sqlserver-secret labeled
通过使用
kubectl patch
命令修补域自定义资源定义 (CRD) 来应用辅助映像。辅助图像在
spec.configuration.model.auxiliaryImages
中定义,如以下示例所示。spec: clusters: - name: sample-domain1-cluster-1 configuration: model: auxiliaryImages: - image: wlsaksacrafvzeyyswhxek.azurecr.cn/wlsaks-auxiliary-image:1.0 imagePullPolicy: IfNotPresent sourceModelHome: /auxiliary/models sourceWDTInstallHome: /auxiliary/weblogic-deploy
使用以下命令增加
restartVersion
值并使用kubectl patch
将辅助映像应用到使用所示定义的域 CRD:export VERSION=$(kubectl -n ${WLS_DOMAIN_NS} get domain ${WLS_DOMAIN_UID} -o=jsonpath='{.spec.restartVersion}' | tr -d "\"") export VERSION=$((VERSION+1)) cat <<EOF >patch-file.json [ { "op": "replace", "path": "/spec/restartVersion", "value": "${VERSION}" }, { "op": "add", "path": "/spec/configuration/model/auxiliaryImages", "value": [{"image": "$ACR_LOGIN_SERVER/$IMAGE", "imagePullPolicy": "IfNotPresent", "sourceModelHome": "/auxiliary/models", "sourceWDTInstallHome": "/auxiliary/weblogic-deploy"}] }, { "op": "add", "path": "/spec/configuration/secrets", "value": ["${SECRET_NAME}"] } ] EOF kubectl -n ${WLS_DOMAIN_NS} patch domain ${WLS_DOMAIN_UID} \ --type=json \ --patch-file patch-file.json kubectl get pod -n ${WLS_DOMAIN_NS} -w
等待管理服务器和托管服务器在以下输出块中显示值,然后再继续:
NAME READY STATUS RESTARTS AGE sample-domain1-admin-server 1/1 Running 0 20m sample-domain1-managed-server1 1/1 Running 0 19m sample-domain1-managed-server2 1/1 Running 0 18m
系统可能需要 5-10 分钟才能达到此状态。 以下列表概述了等待期间会发生的情况:
- 应该会看到
sample-domain1-introspector
首先运行。 该软件会查找域自定义资源的更改,以便可以对 Kubernetes 群集采取必要的操作。 - 当检测到更改时,域内省程序会终止并启动新的 Pod 来推出更改。
- 接下来,应该会看到
sample-domain1-admin-server
Pod 终止并重启。 - 然后,应该会看到两个托管服务器终止并重启。
- 只有当所有三个 Pod 都显示
1/1 Running
状态时,才可以继续。
- 应该会看到
验证部署功能
按照以下步骤操作,通过查看 WebLogic Server 管理控制台和示例应用来验证部署的功能性:
将 adminConsoleExternalUrl 值粘贴到连接 Internet 的 Web 浏览器的地址栏中。 您应该会看到熟悉的 WebLogic Server 管理控制台登录屏幕。
使用用户名
weblogic
和从 Azure 门户部署 WebLogic Server 时输入的密码登录。 回想一下,此值为wlsAksCluster2022
。在“域结构”框中,选择“服务”。
在“服务”下,选择“数据源”。
在“JDBC 数据源概要”面板中,选择“监视”。 屏幕外观应类似于以下示例。 你会发现数据源的状态在托管服务器上运行。
在“域结构”框中,选择“部署”。
在“部署”表中,应该有一行。 该名称应与 appmodel.yaml 文件中的
Application
值相同。 选择名称。选择“测试”选项卡。
选择“weblogic-cafe”。
在“weblogic-cafe 设置”面板中,选择“测试”选项卡。
展开 weblogic-café 旁边的 + 图标。 屏幕外观应类似于以下示例。 具体而言,你应该在“测试点”列中看到类似于
http://sample-domain1-managed-server1:8001/weblogic-cafe/index.xhtml
的值。注意
“测试点”列中的超链接不可选,因为我们没有使用运行管理控制台的外部 URL 配置管理控制台。 本文仅通过演示方式介绍 WebLogic Server 管理控制台。 运行 AKS 上的 WebLogic Server 时,请勿将 WebLogic Server 管理控制台用于任何持久配置更改。 AKS 上的 WebLogic Server 的云原生设计要求任何持久配置都必须在初始 Docker 映像中表示,或者使用 CI/CD 技术(例如更新模型)应用于正在运行的 AKS 群集,如 Oracle 文档中所述。
了解部署的示例应用的
context-path
值。 如果已部署建议的示例应用,则context-path
为weblogic-cafe
。将
context-path
追加到 clusterExternalUrl 值,从而为示例应用构造完全限定的 URL。 如果已部署建议的示例应用,完全限定的 URL 应类似于http://wlsgw202401-wls-aks-domain1.chinanorth3.chinacloudapp.cn/weblogic-cafe/
。将完全限定的 URL 粘贴到连接 Internet 的 Web 浏览器中。 如果已部署建议的示例应用,应会看到类似于以下屏幕截图的结果:
清理资源
若要避免 Azure 费用,应清除不需要的资源。 不再需要群集时,请使用az group delete命令。 以下命令将移除资源组、容器服务、容器注册表、数据库和所有相关资源:
az group delete --name <resource-group-name> --yes --no-wait
az group delete --name <db-resource-group-name> --yes --no-wait