在 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 是否有效。

部署 AKS 上的 WebLogic Server

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

  1. 在 Azure 门户顶部的搜索栏中输入“weblogic”。 在自动建议的搜索结果的“Azure 市场”部分中,选择“AKS 上的 WebLogic Server”。

    Azure 门户的屏幕截图,其中显示了搜索结果中的 WebLogic Server。

    也可以直接访问 AKS 上的 WebLogic Server 产品/服务。

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

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

    屏幕截图:Azure 门户,其中显示了 AKS 上的 WebLogic Server。

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

  5. 在“实例详细信息”下,选择部署的区域。

  6. 在“WebLogic 的凭据”下,保留““WebLogic 管理员用户名”的默认值。

  7. 填写“WebLogic 管理员密码”的wlsAksCluster2022。 对确认和“WebLogic 模型加密的密码”字段使用相同的值。

  8. 选择下一步

以下步骤演示了如何启动部署流程。

  1. 滚动到标记为“提供 Oracle 单一登录 (SSO) 帐户”的部分。 填写先决条件中的 Oracle SSO 凭据。

    屏幕截图:Azure 门户,其中显示了配置的 SSO 窗格。

  2. 确保记下信息框中从“在继续之前,必须先接受 Oracle 标准条款和限制”开始的步骤。

  3. 根据 Oracle SSO 帐户是否具有 Oracle 支持权利,为“选择 WebLogic Server 映像的类型”选择适当的选项。 如果帐户具有支持权利,请选择“修补的 WebLogic Server 映像”。 否则,请选择“常规 WebLogic Server 映像”。

  4. 将“选择所需的 WebLogic Server 组合...”中的值保留为默认值。 有多种 WebLogic Server、JDK 和 OS 版本可供选择。

  5. 在“应用程序”部分中,选择“部署应用程序?”旁边的“”。

以下步骤使 WebLogic Server 管理控制台和示例应用通过内置的应用程序网关入口加载项向公共 Internet 公开。 有关详细信息,请参阅什么是应用程序网关入口控制器?

  1. 选择“下一步”以查看“TLS/SSL”窗格。

  2. 选择“下一步”以查看“负载均衡”窗格。

  3. 在“负载均衡选项”旁边,选择“应用程序网关入口控制器”。

    屏幕截图:Azure 门户,其中显示了“在 Azure Kubernetes 服务上创建 Oracle WebLogic Server”页面上最简单的负载均衡器配置。

  4. 在“应用程序网关入口控制器”下,应该会看到所有字段均已预填充“虚拟网络”和“子网”的默认值。 保留默认值。

  5. 对于“为管理控制台创建入口”,选择“”。

    屏幕截图:Azure 门户,其中显示了“在 Azure Kubernetes 服务上创建 Oracle WebLogic Server”页面上的应用程序网关入口控制器配置。

  6. 对于其他字段,保留默认值。

  7. 选择“查看 + 创建”。 确保验证不会失败。 如果失败,请解决任何验证问题,然后再次选择“查看 + 创建”。

  8. 选择创建

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

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

可以在等待期间执行“创建 Azure SQL 数据库”部分中的步骤。 完成数据库创建后,返回到本部分。

检查部署输出

使用本部分中的步骤验证部署是否成功。

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

  1. 在任何 Azure 门户页面的一角,依次选择汉堡菜单和“资源组”。

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

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

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

    屏幕截图:Azure 门户,其中显示了资源组部署列表。

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

  6. adminConsoleExternalUrl 值是指向此 AKS 群集的 WebLogic Server 管理控制台的完全限定的公共 Internet 可见链接。 选择该字段值旁边的复制图标以将链接复制到剪贴板。 保存此值供稍后使用。

  7. clusterExternalUrl 值是指向此 AKS 群集上部署在 WebLogic Server 中的示例应用的完全限定的公共 Internet 可见链接。 选择该字段值旁边的复制图标以将链接复制到剪贴板。 保存此值供稍后使用。

  8. shellCmdtoOutputWlsImageModelYaml 值是用于生成容器映像的 WDT 模型的 base64 字符串。 保存此值供稍后使用。

  9. shellCmdtoOutputWlsImageProperties 值是用于生成容器映像的 WDT 模型属性的 base64 字符串。 保存此值供稍后使用。

  10. shellCmdtoConnectAks 值是用于连接到此特定 AKS 群集的 Azure CLI 命令。

输出中的其他值超出了本文范围,但在AKS 上的 WebLogic 用户指南中对此进行了详细说明。

创建 Azure SQL 数据库

若要创建用于应用的 Azure SQL 数据库单一数据库,请按照快速入门:在 Azure SQL 数据库中创建单一数据库中的步骤操作。 请仔细注意以下差异:

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

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

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

注意

你为此数据库选择的无服务器计算层通过在处于非活动状态期间使数据库进入睡眠状态来节省资金。 如果当应用启动时数据库处于睡眠状态,则示例应用将失败。

若要强制数据库唤醒,可以使用查询编辑器运行查询。 请按照查询数据库中的步骤进行操作。 下面是一个示例查询:SELECT * FROM COFFEE;

然后,使用以下步骤为示例应用程序创建架构:

  1. 按照快速入门:创建单一数据库 - Azure SQL 数据库查询数据库部分中的步骤,打开“查询编辑器”窗格。

  2. 键入并运行以下查询:

    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 终端。

使用以下步骤构建映像:

  1. 使用以下命令创建一个目录来暂存模型和应用程序:

    mkdir -p ${BASE_DIR}/mystaging/models
    cd ${BASE_DIR}/mystaging/models
    
  2. 复制从部署输出中保存的 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"
    
  3. 以类似的方式复制 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
    
  4. 使用以下步骤创建应用程序模型文件。

    1. 使用以下命令复制 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
      
    2. 使用以下命令创建具有所示内容的应用程序模型文件。 将模型文件保存到 ${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
      
  5. 使用以下命令将 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
    
  6. 接下来,使用以下命令创建数据库连接模型文件,其内容如下所示。 将模型文件保存到 ${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
    
  7. 使用以下命令创建应用程序存档文件,然后移除不再需要的 wlsdeploy 文件夹:

    cd ${BASE_DIR}/mystaging/models
    zip -r archive.zip wlsdeploy
    
    rm -f -r wlsdeploy
    
  8. 使用以下命令在暂存目录中下载并安装 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
    
  9. 使用以下命令移除 WDT 安装程序:

    rm weblogic-deploy.zip
    
  10. 使用以下命令创建一个 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
    
  11. 使用 ${BASE_DIR}/mystaging/Dockerfile 运行 az acr build 命令,如以下示例所示:

    export ACR_NAME=<value-from-clipboard>
    export IMAGE="wlsaks-auxiliary-image:1.0"
    
  12. 使用以下命令仔细检查暂存文件:

    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
    
  13. 使用 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。

  14. 可以运行 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 中占位符的一部分。

  1. 通过复制之前保存的 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
    
  2. 使用以下步骤获取下表中显示的变量的值。 你将使用这些值为数据源连接创建机密。

    变量 说明 示例
    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
    1. 访问 Azure 门户中的 SQL 数据库资源。

    2. 在导航窗格的“设置”下,选择“连接字符串”。

    3. 选择“JDBC”选项卡。

    4. 选择复制按钮,以将连接字符串复制到剪贴板。

    5. 对于 DB_CONNECTION_STRING,使用整个连接字符串,但将占位符 {your_password_here} 替换为数据库密码。

    6. 对于 DB_USER,请使用从 azureuser 到(但不包括);password={your_password_here} 的连接字符串部分。

    7. 对于 DB_PASSWORD,请使用创建数据库时输入的值。

  3. 使用以下命令创建 Kubernetes 机密。 本文使用机密名称 sqlserver-secret 作为数据源连接的机密。 如果使用不同的名称,请确保该值与 dbmodel.yaml 中的值相同。

    在以下命令中,请确保通过将占位符示例替换为前面步骤中描述的值来正确设置变量 DB_CONNECTION_STRINGDB_USERDB_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
    
  4. 通过使用 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
    
  5. 等待管理服务器和托管服务器在以下输出块中显示值,然后再继续:

    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 管理控制台和示例应用来验证部署的功能性:

  1. adminConsoleExternalUrl 值粘贴到连接 Internet 的 Web 浏览器的地址栏中。 您应该会看到熟悉的 WebLogic Server 管理控制台登录屏幕。

  2. 使用用户名 weblogic 和从 Azure 门户部署 WebLogic Server 时输入的密码登录。 回想一下,此值为 wlsAksCluster2022

  3. 在“域结构”框中,选择“服务”

  4. 在“服务”下,选择“数据源”

  5. 在“JDBC 数据源概要”面板中,选择“监视”。 屏幕外观应类似于以下示例。 你会发现数据源的状态在托管服务器上运行。

    屏幕截图:数据源状态。

  6. 在“域结构”框中,选择“部署”。

  7. 在“部署”表中,应该有一行。 该名称应与 appmodel.yaml 文件中的 Application 值相同。 选择名称。

  8. 选择“测试”选项卡

  9. 选择“weblogic-cafe”。

  10. 在“weblogic-cafe 设置”面板中,选择“测试”选项卡。

  11. 展开 weblogic-café 旁边的 + 图标。 屏幕外观应类似于以下示例。 具体而言,你应该在“测试点”列中看到类似于 http://sample-domain1-managed-server1:8001/weblogic-cafe/index.xhtml 的值。

    屏幕截图:weblogic-cafe 测试点。

    注意

    “测试点”列中的超链接不可选,因为我们没有使用运行管理控制台的外部 URL 配置管理控制台。 本文仅通过演示方式介绍 WebLogic Server 管理控制台。 运行 AKS 上的 WebLogic Server 时,请勿将 WebLogic Server 管理控制台用于任何持久配置更改。 AKS 上的 WebLogic Server 的云原生设计要求任何持久配置都必须在初始 Docker 映像中表示,或者使用 CI/CD 技术(例如更新模型)应用于正在运行的 AKS 群集,如 Oracle 文档中所述。

  12. 了解部署的示例应用的 context-path 值。 如果已部署建议的示例应用,则context-pathweblogic-cafe

  13. context-path 追加到 clusterExternalUrl 值,从而为示例应用构造完全限定的 URL。 如果已部署建议的示例应用,完全限定的 URL 应类似于 http://wlsgw202401-wls-aks-domain1.chinanorth3.chinacloudapp.cn/weblogic-cafe/

  14. 将完全限定的 URL 粘贴到连接 Internet 的 Web 浏览器中。 如果已部署建议的示例应用,应会看到类似于以下屏幕截图的结果:

    测试 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