你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
将 Java Web 应用容器化并迁移到 Azure Kubernetes 服务
在本文中,你将学习如何容器化 Java Web 应用程序(在 Apache Tomcat 上运行)并使用 Azure Migrate: 应用容器化工具将其迁移到 Azure Kubernetes 服务 (AKS)。 容器化进程不需要访问代码库,并提供一种简单的方法来容器化现有应用程序。 该工具的工作原理是使用服务器上应用程序的运行状态来确定应用程序组件,并帮助你将它们打包到容器映像中。 然后,可以将容器化应用程序部署到 Azure Kubernetes Service (AKS)。
Azure Migrate: 应用容器化工具当前支持 -
- 在 Apache Tomcat(在 Linux 服务器上)上容器化 Java Web 应用,并将其部署到 AKS 上的 Linux 容器中。
- 在(Linux 服务器上的)Apache Tomcat 上对 Java Web 应用进行容器化,并将其部署到应用服务上的 Linux 容器中。 了解详细信息
- 容器化 ASP.NET 应用并将其部署到 AKS 上的 Windows 容器。 了解详细信息
- 容器化 ASP.NET 应用并将其部署到应用服务上的 Windows 容器中。 了解详细信息
Azure Migrate: 应用容器化工具可帮助你 -
- 发现应用程序:该工具远程连接到运行 Java Web 应用程序的应用程序服务器(在 Apache Tomcat 上运行),并发现应用程序组件。 该工具将创建一个可用于为应用程序创建容器映像的 Dockerfile。
- 生成容器映像:可以根据应用程序要求检查并进一步自定义 Dockerfile,并使用它来生成应用程序容器映像。 应用程序容器映像会被推送到指定的 Azure 容器注册表。
- 部署到 Azure Kubernetes 服务:然后,该工具会生成将容器化应用程序部署到 Azure Kubernetes 服务群集时所需的 Kubernetes 资源定义 YAML 文件。 可以自定义 YAML 文件,并使用它们在 AKS 上部署应用程序。
注意
- Azure Migrate: 应用容器化工具可帮助你发现特定应用程序类型(Apache Tomcat 上的 ASP.NET 和 Java Web 应用)以及它们在应用服务器上的组件。 若要发现服务器以及在本地计算机上运行的应用、角色和功能的清单,请使用 Azure Migrate: 发现和评估功能。 了解详细信息
- 应用容器化工具会跳过发现某些默认 Tomcat Web 应用的步骤,这些应用包括“docs”、“examples”、“host-manager”、“manager”和“ROOT”等。
虽然在不进行重大重构的情况下直接迁移到容器并不能使所有应用程序获益,但不进行重写地将现有应用迁移到容器中的一些好处包括:
- 提高基础结构利用率:借助容器,多个应用程序可以共享资源,并托管在同一基础结构上。 这有助于整合基础结构并提高利用率。
- 简化的管理:在新式托管平台(如 AKS 和应用服务)上托管应用程序可以简化管理实践。 可以通过停用或减少通常使用拥有的基础结构执行的基础结构维护和管理过程来实现此目的。
- 应用程序可移植性:随着容器规范格式逐渐普及和业务流程平台标准化程度的提高,应用程序的可移植性不再是问题。
- 采用 DevOps 的新式管理:帮助你在管理、安全性和过渡到 DevOps 的过程中采用新式做法并加以标准化。
本教程介绍以下操作:
- 设置 Azure 帐户。
- 安装 Azure Migrate: 应用容器化工具。
- 发现 Java Web 应用程序。
- 生成容器映像。
- 在 AKS 上部署容器化应用程序。
注意
教程中演示了方案的最简单部署路径,使你能够快速设置概念证明。 教程尽可能使用默认选项,不会演示所有可能的设置和路径。
先决条件
开始学习本教程之前,应做好以下准备:
要求 | 详细信息 |
---|---|
确定要安装工具的计算机 | 用于安装和运行 Azure Migrate: 应用容器化工具的 Windows 计算机。 Windows 计算机可以是服务器(Windows Server 2016 或更高版本)或客户端 (Windows 10) 操作系统,这意味着该工具也可在桌面上运行。 运行该工具的 Windows 计算机应该可以通过网络连接到那些托管要容器化的 Java Web 应用程序的服务器/虚拟机。 确保运行 Azure Migrate: 应用容器化工具的 Windows 计算机上有 6 GB 的可用空间,用于存储应用程序项目。 Windows 计算机应可以直接或通过代理访问 Internet。 |
应用程序服务器 | - 在运行要容器化的 Java 应用程序的服务器的端口 22 上启用安全外壳 (SSH) 连接。 |
Java Web 应用程序 | 该工具当前支持 - 在 Tomcat 8 或 omcat 9 上运行的应用程序。 - Ubuntu Linux 16.04/18.04/20.04、Debian 7/8、Red Hat Enterprise Linux 5/6/7 上的应用程序服务器。 - 使用 Java 7 或 Java 8 的应用程序。 如果你有版本超出此范围,请查找支持所需版本的映像并修改 dockerfile 来替换映像 该工具当前不支持 - 运行多个 Tomcat 实例的应用程序服务器 |
准备 Azure 用户帐户
如果没有 Azure 订阅,请在开始之前创建一个免费帐户。
订阅设置完成后,你将需要一个拥有以下权限的 Azure 用户帐户:
- Azure 订阅的所有者权限
- 注册 Microsoft Entra 应用的权限
如果你刚刚创建了免费的 Azure 帐户,那么你就是订阅的所有者。 如果你不是订阅所有者,请让所有者分配权限,如下所示:
在 Azure 门户中,搜索“订阅”,然后在“服务”下选择“订阅” 。
在“订阅”页上,选择要在其中创建 Azure Migrate 项目的订阅。
选择“访问控制 (IAM)”。
选择“添加”>“添加角色分配”,打开“添加角色分配”页面 。
分配以下角色。 有关详细步骤,请参阅使用 Azure 门户分配 Azure 角色。
设置 值 角色 “所有者” 将访问权限分配到 用户 成员 azmigrateuser(本示例中) Azure 帐户还需要注册 Microsoft Entra 应用的权限。
在 Azure 门户中,导航到“Microsoft Entra ID”>“用户”>“用户设置”。
在“用户设置”中,验证 Microsoft Entra 用户是否可注册应用程序(默认情况下设置为“是”)。
重要
Microsoft 建议使用权限最少的角色。 这有助于提高组织的安全性。 全局管理员是一个高度特权的角色,应仅限于无法使用现有角色的紧急情况。
如果“应用注册”设置设置为“否”,请请求租户/全局管理员分配所需的权限。 或者,租户/全局管理员可将“应用程序开发人员”角色分配给帐户,以允许注册 Microsoft Entra 应用。 了解详细信息。
下载并安装 Azure Migrate: 应用容器化工具
在 Windows 计算机上下载 Azure Migrate: 应用容器化安装程序。
在管理员模式下启动 PowerShell,并将 PowerShell 目录更改为包含安装程序的文件夹。
使用命令运行安装脚本
.\AppContainerizationInstaller.ps1
注意
对于 Windows Server 2022,请编辑第 135 行并从功能列表中删除 PowerShell-ISE
,因为它不再受支持。
启动应用容器化工具
在可连接到运行应用容器化工具的 Windows 计算机的任何计算机上打开浏览器,并打开工具 URL: https://计算机名称或 IP 地址: 44369。
或者,可以在桌面上选择应用快捷方式打开该应用。
如果你看到一条警告,指出连接不是专用连接,则单击“高级”,然后选择转到网站。 Web 界面使用自签名 TLS/SSL 证书时,将显示此警告。
在登录屏幕上,使用计算机上的本地管理员帐户进行登录。
选择“Tomcat 上的 Java Web 应用”作为要容器化的应用程序类型。
若要指定目标 Azure 服务,请选择“Azure Kubernetes 服务商的容器”。
完整工具必备组件
- 接受许可条款,并阅读第三方信息。
- 在工具 Web 应用 >“设置必备组件”中执行以下步骤:
- 连接:工具将检查 Windows 计算机是否可访问 Internet。 如果计算机使用代理:
- 单击“设置代理”,指定代理地址(格式为 IP 地址或 FQDN)以及侦听端口。
- 如果代理需要身份验证,请指定凭据。
- 仅支持 HTTP 代理。
- 如果已添加代理详细信息或已禁用代理和/或身份验证,请单击“保存”以再次触发连接性检查。
- 安装更新:该工具将自动检查最新更新并安装它们。 也可以从此处手动安装该工具的最新版本。
- 启用安全外壳 (SSH):该工具将通知你确保在运行要容器化的 Java Web 应用程序的应用程序服务器上启用安全外壳 (SSH)。
- 连接:工具将检查 Windows 计算机是否可访问 Internet。 如果计算机使用代理:
登录 Azure
单击“登录”以登录 Azure 帐户。
需要使用设备代码向 Azure 进行身份验证。 单击“登录”将打开一个包含设备代码的模式。
单击“复制代码并登录”以复制设备代码,并在新的浏览器选项卡中打开 Azure 登录提示窗口。如果该窗口未显示,请确保已在浏览器中禁用弹出窗口阻止程序。
在新选项卡中,粘贴设备代码,并使用 Azure 帐户凭证完成登录。 登录完成后,可以关闭浏览器选项卡,然后返回到应用容器化工具的 Web 界面。
选择要使用的 Azure 租户。
选择要使用的 Azure 订阅。
发现 Java Web 应用程序
应用容器化帮助程序工具使用提供的凭据远程连接到应用程序服务器,并尝试发现在应用程序服务器上托管的 Java Web 应用程序(在 Apache Tomcat 上运行)。
指定运行 Java Web 应用程序的服务器的 IP 地址/FQDN 和凭据,该服务器应用于远程连接到服务器以进行应用程序发现。
- 所提供的凭据必须是应用程序服务器上的根帐户 (Linux)。
- 对于域帐户(用户必须是应用程序服务器上的管理员),请在用户名前添加域名,格式为 <域\用户名>。
- 一次最多可运行 5 个服务器的应用程序发现。
单击“验证”,验证是否可以从运行该工具的计算机访问应用程序服务器,以及凭据是否有效。 验证成功后,“状态”列会将状态显示为“已映射”。
单击“继续”,在选定的应用程序服务器上启动应用程序发现。
成功完成应用程序发现后,可以选择要容器化的应用程序列表。
使用复选框选择要容器化的应用程序。
指定容器名称:为每个选定的应用程序指定目标容器的名称。 容器名称应指定为 名称:标记,其中标记用于容器映像<>。 例如,可以将目标容器名称指定为 appname:v1。
参数化应用程序配置
参数化配置,使其可用作部署时间参数。 这使你可以在部署应用程序时配置此设置,而不是将其硬编码为容器映像中的特定值。 例如,此选项对数据库连接字符串等参数非常有用。
单击“应用配置”以查看检测到的配置。
选中此复选框以参数化检测到的应用程序配置。
选择要参数化的配置后,单击“应用”。
外部化文件系统依赖项
可以添加应用程序使用的其他文件夹。 指定它们是否应为容器映像的一部分,或者是否要通过 Azure 文件共享上的永久性卷进行外部化。 对于将状态存储在容器外部或将其他静态内容存储在文件系统上的有状态应用程序,使用永久性卷非常有用。 了解详细信息
单击“应用文件夹”下的“编辑”,查看检测到的应用程序文件夹。 检测到的应用程序文件夹已被识别为应用程序所需的必需项目,并将复制到容器映像中。
单击“添加文件夹”,并指定要添加的文件夹路径。
若要将多个文件夹添加到同一个卷,请提供以逗号 (
,
) 分隔的值。如果希望将文件夹存储在永久性卷上的容器外部,请选择“永久性卷”作为存储选项。
查看应用程序文件夹后,单击“保存”。
单击“继续”以转到容器映像生成阶段。
生成容器映像
选择 Azure 容器注册表:使用下拉列表选择将用于生成和存储应用容器映像的 Azure 容器注册表。 可以使用现有的 Azure 容器注册表,也可以选择使用“新建注册表”选项创建一个新的注册表。
查看 Dockerfile:为每个所选应用程序生成容器映像所需的 Dockerfile 是在生成步骤开始时生成的。 单击“查看”以查看 Dockerfile。 还可以在查看步骤中将任何必要的自定义添加到 Dockerfile,并在开始生成过程之前保存更改。
配置 Application Insights:可以为在应用服务上运行的 Java 应用启用监视,而无需检测代码。 该工具将安装 Java 独立代理,作为容器映像的一部分。 在部署过程中进行配置后,Java 代理会自动为应用程序收集可用于使用 Application Insights 进行监视的各项请求、依赖项、日志和指标。 默认情况下,所有 Java 应用程序均启用此选项。
触发生成过程 :选择要为其生成映像的应用程序,然后单击“生成”。 单击“生成”将为每个应用程序启动容器映像生成。 该工具会持续监视生成状态,并使你能够在成功完成生成后继续执行下一步。
跟踪生成状态 :通过单击“状态”列下的“正在进行的生成”链接,还可以监视生成步骤的进度。 触发生成过程后,该链接需要几分钟时间才能生效。
完成生成后,单击“继续”以指定部署设置。
在 AKS 上部署容器化应用
生成容器映像后,下一步是将应用程序部署为 Azure Kubernetes 服务 (AKS) 上的容器。
选择 Azure Kubernetes Service 群集:指定应将应用程序部署到的 AKS 群集。
- 所选 AKS 群集必须具有 Linux 节点池。
- 必须将群集配置为允许从选择用于存储映像的 Azure 容器注册表中提取映像。
- 在 Azure CLI 中运行以下命令,以将 AKS 群集附加到 ACR。
az aks update -n <cluster-name> -g <cluster-resource-group> --attach-acr <acr-name>
- 在 Azure CLI 中运行以下命令,以将 AKS 群集附加到 ACR。
- 如果没有 AKS 群集,或者想要创建向其部署应用程序的新的 AKS 群集,则可以选择从工具中通过单击“新建 AKS 群集”来创建群集。
- 使用该工具创建的 AKS 群集将使用 Linux 节点池进行创建。 群集将配置为允许它从以前创建的 Azure 容器注册表中提取映像(如果选择了新建注册表选项)。
- 选择 AKS 群集后,单击“继续”。
指定机密存储和监视工作区:如已选择参数化应用程序配置,请指定要用于该应用程序的机密存储。 你可以选择 Azure 密钥保管库或 Kubernetes 机密来管理你的应用程序密钥。
- 如已选择 Kubernetes 机密来管理机密,则单击“继续”。
- 如果要使用 Azure 密钥保管库来管理应用程序密钥,请指定要使用的 Azure 密钥保管库。
- 如果没有 Azure Key Vault 或想创建新的 Key Vault,则可以通过单击“新建”从工具创建。
- 该工具会自动分配必要的权限,以便通过密钥保管库管理密钥。
- 监视工作区:如已选择使用 Application Insights 进行监视,请指定要使用的 Application Insights 资源。 如已禁用监视集成,则此选项将不可见。
- 如果没有 Application Insights 资源或想创建新的资源,则可以通过单击“新建”从工具创建。
指定 Azure 文件共享:如果添加了更多文件夹并选择了“永久性卷”选项,则请指定 Azure Migrate: 应用容器化工具在部署过程中应使用的 Azure 文件共享。 该工具将在此 Azure 文件共享中创建新目录,以复制为永久性卷存储配置的应用程序文件夹。 应用程序部署完成后,该工具会通过删除其创建的目录来清理 Azure 文件共享。
- 如果没有 Azure 文件共享,或者想要创建新的 Azure 文件共享,则可以选择在工具中单击“新建存储帐户和文件共享”进行创建。
应用程序部署配置:完成上述步骤后,需指定应用程序的部署配置。 单击“配置”以自定义应用程序部署。 在配置步骤中,可以提供下列自定义项:
- 前缀字符串:指定要在 AKS 群集中为容器化应用程序创建的所有资源的名称中使用的前缀字符串。
- 副本集:指定应在容器中运行的应用程序实例 (pod) 数。
- 负载均衡器类型:如果应该从公共网络访问容器化应用程序,请选择“外部”。
- 应用程序配置:对于已参数化的任何应用程序配置,请提供要用于当前部署的值。
- 存储:对于为永久性卷存储配置的任何应用程序文件夹,指定是应在应用程序实例之间共享该卷,还是应使用容器中的每个实例单独初始化该卷。 默认情况下,永久性卷上的所有应用程序文件夹都配置为共享。
- 单击“应用”以保存部署配置。
- 单击“继续”以部署应用程序。
部署应用程序:保存应用程序的部署配置后,该工具将为应用程序生成 Kubernetes 部署 YAML。
单击“查看”,查看并自定义应用程序的 Kubernetes 部署 YAML。
选择要部署的应用程序。
单击“部署”以启动所选应用程序的部署
部署应用程序后,可以单击“部署状态”列以跟踪为该应用程序部署的资源。
下载生成的项目
用于生成应用程序并将其部署到 AKS 中的所有项目(包括 Dockerfile 和 Kubernetes YAML 规范文件)都存储在运行该工具的计算机上。 这些项目位于 C:\ProgramData\Microsoft Azure Migrate App Containerization。
将为每个应用程序服务器创建一个文件夹。 可以通过导航到此文件夹来查看和下载容器化进程中使用的所有中间项目。 与应用程序服务器相对应的文件夹将在每次运行特定服务器的工具时清除。
排查问题
若要解决此工具的任何问题,可以查看运行应用容器化工具的 Windows 计算机上的日志文件。 工具日志文件位于 C:\ProgramData\Microsoft Azure Migrate App Containerization\Logs 文件夹。
后续步骤
- 在(Linux 服务器上的)Apache Tomcat 上对 Java Web 应用进行容器化,并将其部署到应用服务上的 Linux 容器中。 了解详细信息
- 容器化 ASP.NET Web 应用并将其部署到 AKS 上的 Windows 容器中。 了解详细信息
- 容器化 ASP.NET Web 应用并将其部署到 Azure 应用服务上的 Windows 容器中。 了解详细信息
- 采用哪些解决方案在 Azure Kubernetes 服务上运行 Oracle WebLogic Server? 了解详细信息
- AKS 上的 Open Liberty 和 WebSphere Liberty。 了解详细信息