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

在 Azure Kubernetes 服务 (AKS) 群集上使用 WebLogic Server 部署 Java 应用程序

本文演示了以下内容的操作方法:

  • 在 Oracle WebLogic Server (WLS) 上运行 Java、Java EE 或 Jakarta EE。
  • 使用 Azure 市场产品/服务建立 WebLogic Server 群集。
  • 构建应用程序 Docker 映像作为辅助映像来提供 WebLogic 部署工具 (WDT) 模型和应用程序。
  • 将容器化应用程序部署到 AKS 上的现有 WebLogic Server 群集并连接到 Microsoft Azure SQL。

本文使用适用于 WebLogic Server 的 Azure 市场产品/服务来加速你的 AKS 之旅。 该产品/服务会自动预配多种 Azure 资源,包括以下资源:

  • Azure 容器注册表实例
  • 一个 AKS 群集
  • Azure 应用程序网关入口控制器 (AGIC) 实例
  • WebLogic 运算符
  • 包含 WebLogic 运行时的容器映像
  • 没有应用程序的 WebLogic Server 群集

然后,本文介绍了如何逐步构建辅助映像来更新现有的 WebLogic Server 群集。 辅助映像提供应用程序和 WDT 模型。

若要实现完全自动化,可以在部署产品/服务之前从 Azure 门户选择应用程序并配置数据源连接。 若要查看该产品/服务,请访问 Azure 门户

有关设置 Azure Kubernetes 服务上的 WebLogic Server 的分步指南,请在Azure Kubernetes 服务上参阅 Oracle 的官方文档。

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

先决条件

  • 如果没有 Azure 订阅,请在开始之前创建一个 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 进行测试。
    • Docker。 本文档已使用 Docker 版本 20.10.7 进行测试。 使用 docker info 测试 Docker 守护程序是否正在运行。
    • kubectl。 使用 kubectl version 测试 kubectl 是否有效。 本文档已使用版本 v1.21.2 进行测试。
    • 与你打算运行的 WebLogic Server 版本兼容的 Java JDK。 本文指导你安装使用 JDK 11 的 WebLogic Server 版本。 Azure 建议使用 Microsoft Build 的 OpenJDK。 确保在运行命令的 shell 中正确设置 JAVA_HOME 环境变量。
    • Maven 3.5.0 或更高版本。
    • 确保已安装 zip/unzip 实用工具。 使用 zip/unzip -v 测试 zip/unzip 是否有效。
  • 本文中的所有步骤(除涉及 Docker 的步骤外)也可以在 Azure Cloud Shell 中执行。 若要了解有关 Azure Cloud Shell 的更多信息,请参阅什么是 Azure Cloud Shell?

部署 AKS 上的 WebLogic Server

本部分中的步骤会指导你以最简单的方式部署 AKS 上的 WebLogic Server。 AKS 上的 WebLogic Server 提供了广泛且深入的 Azure 集成选择。 有关详细信息,请参阅哪些解决方案用于运行 Azure Kubernetes 服务上的 Oracle 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. 在“实例详细信息”下,选择部署的区域。 有关 AKS 可用 Azure 区域列表,请参阅AKS 区域可用性

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

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

  8. 滚动到“基本信息”窗格底部,并注意有关文档、社区支持以及如何报告问题的有用链接。

  9. 选择下一步

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

  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 公开。 有关详细信息,请参阅什么是应用程序网关入口控制器?

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

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

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

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

  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 命令。 这使你可以使用 kubectl 来管理群集。

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

创建 Azure SQL 数据库

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

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

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

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

注意

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

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

  1. 为示例应用程序创建架构。 按照查询数据库的说明打开“查询编辑器”窗格。 键入并运行以下查询:

    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);
    

    成功运行后,应该会看到消息“查询成功: 受影响的行: 0”。 如果没有看到此消息,请先排除故障并解决问题,然后再继续。

数据库、表、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。 如果没有看到该包,则必须先排查并解决问题,然后才能继续。

使用 Docker 创建辅助映像

本节中的步骤说明如何构建辅助映像。 该映像包括以下组件:

  • 映像中的模型模型文件
  • 应用程序
  • 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. 使用以下命令通过 docker 构建辅助映像:

    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 运行 docker buildx build 命令,如以下示例所示:

    cd ${BASE_DIR}/mystaging
    docker buildx build --platform linux/amd64 --build-arg AUXILIARY_IMAGE_PATH=/auxiliary --tag model-in-image:WLS-v1 .
    

    成功构建映像后,输出类似于以下示例:

    [+] Building 12.0s (8/8) FINISHED                                   docker:default
    => [internal] load build definition from Dockerfile                          0.8s
    => => transferring dockerfile: 473B                                          0.0s
    => [internal] load .dockerignore                                             1.1s
    => => transferring context: 2B                                               0.0s
    => [internal] load metadata for docker.io/library/busybox:latest             5.0s
    => [1/3] FROM docker.io/library/busybox@sha256:6d9ac9237a84afe1516540f40a0f  0.0s
    => [internal] load build context                                             0.3s
    => => transferring context: 21.89kB                                          0.0s
    => CACHED [2/3] RUN adduser -D -u 1000 -G root oracle                        0.0s
    => [3/3] COPY --chown=oracle:root ./ /auxiliary/                             1.5s
    => exporting to image                                                        1.3s
    => => exporting layers                                                       1.0s
    => => writing image sha256:2477d502a19dcc0e841630ea567f50d7084782499fe3032a  0.1s
    => => naming to docker.io/library/model-in-image:WLS-v1                      0.2s
    
  12. 如果你已成功创建映像,那么它现在应该位于本地计算机的 Docker 存储库中。 可以使用以下命令验证映像创建:

    docker images model-in-image:WLS-v1
    

    此命令应生成类似于以下示例的输出:

    REPOSITORY       TAG       IMAGE ID       CREATED       SIZE
    model-in-image   WLS-v1    76abc1afdcc6   2 hours ago   8.61MB
    

    创建映像后,它应在 /auxiliary/weblogic-deploy 中包含 WDT 可执行文件,并在 /auxiliary/models 中包含 WDT 模型、属性和存档文件。 在 Docker 映像上使用以下命令来验证此结果:

    docker run -it --rm model-in-image:WLS-v1 find /auxiliary -maxdepth 2 -type f -print
    

    此命令应生成类似于以下示例的输出:

    /auxiliary/models/model.properties
    /auxiliary/models/dbmodel.yaml
    /auxiliary/models/model.yaml
    /auxiliary/models/archive.zip
    /auxiliary/models/appmodel.yaml
    /auxiliary/Dockerfile
    /auxiliary/weblogic-deploy/LICENSE.txt
    /auxiliary/weblogic-deploy/VERSION.txt
    
  13. 使用以下步骤将辅助映像推送到 Azure 容器注册表:

    1. 打开 Azure 门户,然后转到在部署 AKS 上的 WebLogic Server 部分中预配的资源组。

    2. 从资源列表中选择“容器注册表”类型的资源。

    3. 将鼠标悬停在“登录服务器”旁边的值上,然后选择文本旁边的复制图标。

    4. 使用以下命令将值保存在 ACR_LOGIN_SERVER 环境变量中:

      export ACR_LOGIN_SERVER=<value-from-clipboard>
      
    5. 运行以下命令来标记并推送映像。 在执行这些命令之前,请确保 Docker 正在运行。

      export ACR_NAME=$(echo ${ACR_LOGIN_SERVER} | cut -d '.' -f 1)
      az acr login -n $ACR_NAME
      docker tag model-in-image:WLS-v1 $ACR_LOGIN_SERVER/wlsaks-auxiliary-image:1.0
      docker push $ACR_LOGIN_SERVER/wlsaks-auxiliary-image:1.0
      
    6. 可以运行 az acr repository show 来测试映像是否成功已推送到远程存储库,如以下示例所示:

      az acr repository show --name ${ACR_NAME} --image wlsaks-auxiliary-image:1.0
      

      此命令应生成类似于以下示例的输出:

      {
        "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.windows.net: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。 请务必将 DB_ 变量的值以单引号括起,以防 shell 干扰这些值。

    export DB_CONNECTION_STRING='<example-jdbc:sqlserver://server-name.database.windows.net: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
    
    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.io/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/wlsaks-auxiliary-image:1.0", "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.eastus.cloudapp.azure.com/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

后续步骤

通过以下链接详细了解如何运行 AKS 或虚拟机上的 WebLogic Server:

有关 Azure 市场上的 Oracle WebLogic 产品/服务的详细信息,请参阅 Azure 上的 Oracle WebLogic Server。 这些产品/服务全都采用自带许可模式。 它们假设你已经从 Oracle 获得了适当的许可证,并且得到了在 Azure 中运行这些产品/服务的适当许可。