将 WebSphere 应用程序迁移到 Azure Kubernetes 服务

您所在的位置:网站首页 javase是什么软件 将 WebSphere 应用程序迁移到 Azure Kubernetes 服务

将 WebSphere 应用程序迁移到 Azure Kubernetes 服务

2023-06-06 18:26| 来源: 网络整理| 查看: 265

将 WebSphere 应用程序迁移到 Azure Kubernetes 服务 项目 06/02/2023

本指南介绍了要将现有 WebSphere Application Server (WAS) 工作负载迁移到 IBM WebSphere Liberty 或 Azure Kubernetes 服务 (AKS) 上的 Open Liberty 时应注意的事项。

预迁移

若要确保迁移成功,请在开始之前完成以下各节中所述的评估和清点步骤。

确保目标是迁移工作的适当目标

成功将 WAS 应用程序迁移到 Azure 的第一步是选择最合适的迁移目标。

WAS 传统在 Azure 虚拟机上运行良好。 虚拟机 (VM) 目标是最简单的选择,因为它最类似于本地部署。 虚拟机的管理和部署体验与本地体验类似。

另一种选择是通过将 WAS 传统工作负载转换为应用程序容器来迁移到容器。 可以在 Azure Kubernetes 服务 (AKS) 和 Azure Red Hat OpenShit (ARO) 上运行容器目标。 这种轻松的权衡是经济成本。

一般来说,与容器相比,基于 VM 的解决方案的每分钟成本更高。 虽然基于容器的解决方案的运行成本较低,但必须限制应用程序以满足容器业务流程平台的要求。

如果最小化更改是迁移工作最重要的因素,请考虑基于 VM 的迁移。 在这种情况下,请参阅将 WebSphere 应用程序迁移到 Azure 虚拟机。

如果可以容忍将应用程序转换为在容器中运行以降低运行时成本,请考虑使用基于 AKS 或基于 ARO 的迁移。

对于基于 AKS 的迁移,可以开始使用免费层。 获取免费群集管理,只需为使用的虚拟机、关联的存储和网络资源付费。 在这种情况下,请参阅将 WebSphere 应用程序迁移到Azure Kubernetes 服务。

对于基于 ARO 的迁移,除了计算和基础结构成本外,应用程序节点还有 OpenShift 许可证组件的其他成本。 此费用根据应用程序节点数和实例类型计费。 使用按需定价或预留实例,以最符合工作负载和业务需要为准。 在这种情况下,请参阅 将 WebSphere 应用程序迁移到 Azure Red Hat OpenShift。

Azure Red Hat OpenShift 文档中的操作指南涵盖了与迁移相关的一些方面。 有关操作指南的完整列表,请参阅 Azure Red Hat OpenShift 文档。

确定预生成的Azure 市场产品/服务是否是一个良好的起点

确定 AKS 是适当的部署目标后,必须接受 IBM WebSphere Liberty 操作员或 Open Liberty 操作员 (操作员) 是在 Kubernetes 上运行 Liberty 的唯一方法。 接受此事实后,必须确定预生成的Azure 市场产品/服务是否是一个良好的起点。 下面是有关预生成Azure 市场套餐的一些注意事项:

IBM 和 Microsoft 创建了此产品/服务,使你能够在 AKS 上快速预配 Liberty。 以下内容对此概念进行了更详细的说明。 在高级别上,产品/服务会自动执行以下步骤。 如果需要,请获取现有应用程序映像。 如果需要,请预配 AKS 群集和 Azure 容器注册表 (ACR) 实例。 在 AKS 上安装和配置 IBM WebSphere Liberty 运算符或 Open Liberty 运算符。 使用 运算符运行整个操作。 操作员在 AKS 中部署和管理容器化 Liberty 应用程序。 可以在 IBM WebSphere Liberty 运算符 和 Open Liberty 运算符中找到参考文档。

如果不使用预生成的Azure 市场产品/服务,则必须了解如何直接使用 运算符。 掌握 运算符不在本文讨论范围之内。 有关 运算符的完整文档可在 IBM WebSphere Liberty 运算符 和 Open Liberty 运算符上获取。

现在,你已了解了处理 AKS 上 Liberty 的各种方法,可以更好地选择是使用预生成的Azure 市场套餐,还是直接使用运算符自行执行操作。

确定 Liberty 版本是否兼容

你需要 Open Liberty 操作员 或 WebSphere Liberty 操作员 在基于 Kubernetes 的群集上部署和管理应用程序。 确保现有 Liberty 版本是 操作员支持的版本之一。 Open Liberty 的版本在 GitHub OpenLiberty/open-liberty 中维护。 IBM 维护 IBM WebSphere Application Server Liberty 的版本。 有关详细信息,请参阅 WebSphere Application Server Liberty。

预生成的Azure 市场产品/服务允许从公共注册表中选择应用程序映像,从而隐式支持所有版本。

确定是否需要许可证

对于 IBM WebSphere Liberty,必须接受与应用程序容器中 IBM 计划版本相对应的许可协议条款。 有关适用于此 IBM 计划的许可协议,请参阅 查看 WebSphere Liberty 操作员的许可证信息。 有关详细信息,请参阅 在 Microsoft Azure 上运行 WebSphere Liberty。

如果产品版本不是默认的 IBM WebSphere Application Server (基础) ,则必须 .spec.license.edition value 指定产品版本。 其他可用值包括 IBM WebSphere Application Server Liberty Core 和 IBM WebSphere Application Server Network Deployment。 预生成的Azure 市场产品/服务允许你选择支持的产品版本。

使用 IBM 迁移工具清点差异

若要将应用程序移动到 WebSphere Application Server Liberty 或 Open Liberty,需要规划迁移、分析应用程序并更新源代码。 IBM 提供迁移工具来帮助识别当前环境与新 Liberty 环境中的技术(例如 Java EE 7 或 Java EE 8 以及 Java SE 8 或 Java SE 11)之间的任何差异。 有关详细信息,请参阅 将应用程序迁移到 Liberty。

清点服务器容量

记录当前生产服务器的硬件(内存、CPU、磁盘)、平均值和峰值请求计数,以及资源利用率。 无论选择了哪种迁移路径,都将需要此信息。 例如,它有助于指导选择节点池中 VM 的大小、容器要使用的内存量以及共享容器所需的 CPU 数。

可以在 AKS 中调整节点池的大小。 若要了解如何操作,请参阅 Azure Kubernetes 服务 (AKS) 中调整节点池的大小。

清点所有机密

在出现“配置即服务”技术(如 Azure Key Vault)之前,没有有关“机密”的明确定义的概念。 你只能使用一组不同的配置设置,这些设置可以有效地充当我们现在所称的“机密”。 对于应用服务器(如 WAS),这些机密位于许多不同的配置文件和配置存储中。 检查生产服务器上的所有属性和配置文件中是否有机密和密码。 还可以在应用程序中查找包含密码或凭据的配置文件。 WAS 将配置数据存储在目录级联层次结构中的多个文档中。 大多数配置文档都有 XML 内容。 有关详细信息,请参阅配置文档和 Azure 密钥保管库基本概念。

拥有可靠的机密清单后,请参阅有关机密的操作员文档。 有关详细信息,请参阅以下文章:

AKS 上的 WebSphere Liberty:为容器化应用程序配置安全性 打开 Liberty:用户指南 Azure Kubernetes 服务 中应用程序和群集的安全概念 清点所有证书

记录用于公共 SSL 终结点的所有证书。 可以通过运行以下命令来查看生产服务器上的所有证书:

keytool -list -v -keystore

拥有可靠的证书清单后,请使用以下文章对其进行配置:

为 WebSphere Liberty 操作员配置单一登录 (SSO) 打开 Liberty:证书 Azure Kubernetes 服务 中应用程序和群集的安全概念。 验证支持的 Java 版本是否正常运行

使用 Liberty 需要特定版本的 Java,因此需要确认应用程序使用受支持的版本正确运行。

WebSphere Application Server Liberty 的运行时对 Java 运行时环境的最低级别 (JRE) 有特定的要求。 有关详细信息,请参阅 功能的 Java 版本依赖项。

Open Liberty 需要 Java SE 运行时。 它可以使用 Java 运行时环境 (JRE) 或 Java SE 开发工具包 (JDK) 分发来运行。 有关详细信息,请参阅 支持的 Java SE 版本。

清点 JNDI 资源

清点所有 JNDI 资源。 例如,数据库等数据源可能具有关联的 JNDI 名称,该名称允许 JPA 正确地将 EntityManager 的实例绑定到特定数据库。 有关 JNDI 资源和数据库的详细信息,请参阅 IBM 文档中的 WebSphere 数据源 。 其他 JNDI 相关资源(如 JMS 消息代理)可能需要迁移或重新配置。 有关 JMS 配置的详细信息,请参阅 使用 JMS 资源。

如果使用预生成的Azure 市场产品/服务,可在部署时自定义的 JNDI 资源集仅限于产品/服务支持的内容。 对于 AKS 上的 WebSphere Liberty,可以在默认 Java 命名和目录接口 (JNDI) 命名空间中提供对象。 有关详细信息,请参阅 在 Liberty 功能中使用 JNDI 默认命名空间进行开发。 有关 Open Liberty,请参阅 Java 命名和目录接口。

检查配置文件配置

WAS 中的main配置单元是配置文件。 因此, resources.xml 文件包含大量配置,必须仔细考虑进行迁移。 该文件包括对存储在子目录中的其他 XML 文件的引用。 有关详细信息,请参阅 管理分布式和 IBM i 操作系统上的配置文件。

在应用程序中

检查 deployment.xml 文件和/或 WEB-INF/web.xml 文件。

需要在 AKS 运行的容器映像中捕获这些自定义项。 使用预生成的Azure 市场产品/服务时,最好通过创建自定义容器映像并在公共注册表中使其可用,然后在部署时指向该注册表来处理此类自定义。

如果使用 WebSphere 应用程序服务器网络部署单元,则每个群集成员在传统 WAS 的安装中运行。 Liberty 是 WebSphere Application Server 的轻型配置文件。 它是 WAS 的灵活动态配置文件,使 WAS 服务器能够仅部署所需的自定义功能,而不是部署大量可用的 Java EE 组件。

确定是否使用了会话复制

如果应用程序依赖于会话复制,则可以使用以下选项:

对于 HTTP 会话,根据会话管理级别,可以使用缓存或数据库来收集会话数据。 对于 分布式会话,可以使用数据库会话持久性将会话保存在数据库中。 对于 动态缓存,可以管理缓存或数据库中的会话数据。 可以重构应用程序以使用数据库进行会话管理。 可以重构应用程序,将会话外部化到 Azure Redis 服务。 有关详细信息,请参阅 Azure Cache for Redis。

对于所有这些选项,最好掌握 Liberty 如何执行 HTTP 会话状态复制。 以下文档可帮助你了解如何在 Liberty 中管理 HTTP 会话:

配置数据库的 Liberty 会话持久性 使用 JCache 配置 Liberty 会话持久性

预生成的Azure 市场产品/服务通过应用程序网关入口控制器支持会话相关性。 部署产品/服务时,请选择“ 启用基于 Cookie 的相关性”。

记录数据源

如果应用程序使用任何数据库,则需捕获以下信息:

数据源名称是什么? 连接池配置是什么? 在哪里可以找到 JDBC 驱动程序 JAR 文件?

有关 WAS 中的 JDBC 驱动程序的详细信息,请参阅 将 JDBC 驱动程序与 WebSphere 应用程序服务器配合使用。

JDBC 配置是 Liberty 中的核心服务器配置。 有关详细信息,请参阅 JDBC 驱动程序。

预生成的Azure 市场产品/服务对数据库的支持有限。 可以在应用程序映像中处理配置,并在部署产品/服务时使用该映像。

确定是否已自定义 WAS

确定进行了以下哪些自定义,并捕获已完成的操作。

是否更改了启动脚本? 此类脚本包括 wsadmin、 AdminControl、 AdminConfig、 AdminApp 和 AdminTask。 是否有任何特定参数传递到 JVM? 是否存在添加到服务器 classpath 中的 JAR? 是否使用 OS 级别设施(例如 systemd )导致 WAS 组件在服务器重启后自动启动?

需要根据这些问题的解答考虑迁移注意事项。

需要在 AKS 运行的容器映像中捕获这些自定义项。 使用预生成的Azure 市场产品/服务时,最好通过创建自定义容器映像并在公共注册表中使其可用,然后在部署时指向该注册表来处理此类自定义。

确定是否需要连接到本地

如果应用程序需要访问任何本地服务,则需预配 Azure 的某个连接服务。 有关详细信息,请参阅选择用于将本地网络连接到 Azure 的解决方案。 或者,你需要重构应用程序,以便使用本地资源公开的公开可用的 API。

确定 Java 消息服务 (JMS) 队列或主题是否正在使用中

如果应用程序使用 JMS 队列或主题,则需要将它们迁移到外部托管的 JMS 服务器。 对于使用 JMS 的用户,一种策略是使用Azure 服务总线和高级消息队列协议。 有关详细信息,请参阅将 JMS 与 Azure 服务总线和 AMQP 1.0 配合使用。

如果已配置 JMS 永久性存储,则必须捕获其配置并在迁移后应用它。

如果使用的是 IBM MQ,则可以将此软件迁移到 Azure 虚拟机并按原样使用它。

Microsoft 提供了将 IBM MQ 与逻辑应用集成的解决方案。 有关详细信息,请参阅 从 Azure 逻辑应用中的工作流连接到 IBM MQ 服务器。

确定是否使用自己的自定义创建的共享 Java EE 库

如果使用共享 Java EE 库功能,则可使用两个选项:

重构应用程序代码以删除库上的所有依赖项,并改将功能直接合并到应用程序中。 将库添加到服务器 classpath。

可以使用 从 Java EE 应用程序访问第三方 API 中所述的相同技术来处理这些库。

确定是否使用了 OSGi 捆绑

如果使用了添加到 WAS 的 OSGi 捆绑包,则需要将等效 JAR 文件直接添加到 Web 应用程序。

可以在提供给预生成Azure 市场套餐的映像中包含捆绑包。 有关详细信息,请参阅 为 OSGi 应用程序配置库。

确定应用程序是否包含特定于 OS 的代码

如果应用程序包含的代码有主机 OS 的依赖项,则需重构该代码,删除那些依赖项。 例如,可能需要将文件系统路径中使用的 / 或 \ 替换为 File.Separator 或 Paths.get。

AKS 上的 Liberty 在 Linux x86_64 上运行。 任何特定于 OS 的代码都必须与 Linux 兼容。 若要了解如何发现特定的 OS 信息,请按照 确定 Liberty 版本是否兼容 部分中的步骤操作。

确定是否正在使用 IBM 集成总线

如果应用程序使用 IBM 集成总线,则需要捕获 IBM 集成总线的配置方式。 有关详细信息,请参阅 IBM 集成总线文档。

预生成的Azure 市场产品/服务中不直接支持 IBM 集成总线。 若要启用该功能,请按照在 Liberty 上启用 JMS 应用程序中的说明连接到 IBM 文档中的服务集成总线 。

确定应用程序是否由多个 WAR 组成

如果应用程序由多个 WAR 组成,则应将这些 WAR 中的每一个都视为单独的应用程序,并通过本指南了解这其中的每个应用程序。

确定应用程序是否打包为 EAR

如果应用程序打包为 EAR 文件,请务必检查 application.xml、 ibm-application-bnd.xmi 和 ibm-application-ext.xmi 文件并捕获其配置。 有关详细信息,请参阅 在 WebSphere 上 (EAR) 包生成企业存档。

预生成的Azure 市场产品/服务允许使用现有容器映像。 可以根据业务要求准备应用程序。

确定在生产服务器上运行的所有外部进程和守护程序

如果在应用程序服务器外运行任何进程(如监视守护程序),则需消除它们或将它们迁移到其他位置。

确定是否使用以及如何使用文件系统

Kubernetes 处理具有永久性卷 (PV) 的文件系统。 预生成的Azure 市场产品/服务不支持装载永久性卷。 若要启用不同的存储选项,请按照 Azure Kubernetes 服务 中应用程序的存储选项中的说明进行操作。

只读静态内容

如果应用程序当前提供静态内容,则需为其提供一个备用位置。 可能需要考虑将静态内容移到 Azure Blob 存储,并添加 Azure CDN,方便用户在全球范围内快速下载。 有关详细信息,请参阅 Azure 存储中的静态网站托管和快速入门:将 Azure 存储帐户与 Azure CDN 集成。

动态发布的静态内容

如果应用程序允许那些通过应用程序上传/生成但在创建后不可变的静态内容,则可将上述 Azure Blob 存储和 Azure CDN 与 Azure 函数配合使用,以便处理上传和 CDN 刷新操作。 我们提供了一个示例实现,用于通过 Azure Functions 进行静态内容的上传和 CDN 预加载操作。

确定网络拓扑

当前Azure 市场产品/服务集是迁移的起点。 如果产品/服务未涵盖需要迁移的体系结构的各个方面,则需要捕获现有部署的网络拓扑。 然后,需要在 Azure 中重现该拓扑,即使在使用其中一个解决方案模板建立基本产品/服务之后也是如此。

网络拓扑是一个广泛的主题,但以下参考可以为迁移工作提供一些指导:

有关与将网络拓扑迁移到 Azure 相关的高级主题的枚举,请参阅 WebSphere 应用程序服务器网络部署拓扑。 由于数据源是 Liberty 系统中的单独服务器,因此必须将它们视为网络拓扑分析的一部分。 有关详细信息,请参阅 WebSphere Application Server Liberty 数据源。 消息传送源也是独立的服务器。 有关详细信息,请参阅 WebSphere 应用程序服务器 Liberty:WebSphere MQ 消息传递。 负载均衡是一项基本要求。 有关负载均衡的 Liberty 端的信息,请参阅 WebSphere 应用程序服务器 Liberty 集体体系结构。 考虑 JCA 适配器和资源适配器的使用

如果现有应用程序使用 JCA 适配器或资源适配器连接到其他企业系统,请确保将这些项目的配置应用于在 AKS 上运行的 Liberty 服务器。 有关详细信息,请参阅 JCA 配置元素 概述和 Java 连接器体系结构。

确定是否使用聚类分析

操作员处理在 AKS 上运行 WAS 工作负荷的所有可能方式的聚类分析。

检查 EJB 聚类分析

如果应用程序使用本地 Enterprise Java Beans (EJB) ,则可能需要将它们迁移到群集 EJB。 有关详细信息,请参阅 在 Liberty 上开发 EJB 应用程序。

用于满足负载均衡要求的帐户

考虑负载均衡的最佳方式是使用内置Azure 市场套餐提供的应用网关集成。

迁移

本部分中的步骤假设你的分析导致你决定使用预生成的Azure 市场产品/服务。

预配套餐

若要在Azure 门户中打开产品/服务,请参阅 IBM WebSphere Liberty 和 open Liberty on Azure Kubernetes 服务。 选择“ 创建”,然后使用在上述步骤中收集的信息来帮助填写产品/服务字段。

考虑密钥存储

必须考虑应用程序使用的任何 SSL/TLS 密钥存储的迁移。 有关详细信息,请参阅 Configuring Keystores(配置密钥存储)。

连接 JMS 源

连接数据库后,可以按照 IBM 文档中 JCA 配置元素概述中的说明配置 JMS 。

考虑日志记录

如果不掌握日志记录,就不能执行云。 运算符提供了不同的监视方法。 有关详细信息,请参阅 监视 Liberty 服务器运行时环境。 如果希望使用 Elastic Stack,Azure 提供了对 Elastic 的出色支持。 有关完整详细信息,请参阅 什么是弹性与 Azure 的集成? 可以结合这两个资源中的知识,为 AKS 上的 Liberty 实现 Azure 优化日志记录解决方案。

迁移应用程序

无论是否选择在部署时提供应用程序映像,都需要通过 CI/CD 更新应用程序。 IBM 文档提供了一个演示如何执行此更新的示例。 有关详细信息,请参阅 在 Liberty 中部署应用程序。

配置测试

必须针对应用程序配置任何容器内测试才能访问 Azure 中运行的新服务器。 与 CI/CD 问题一样,必须确保必要的网络安全规则允许测试访问部署到 Azure 的应用程序。 有关详细信息,请参阅网络安全组。

迁移后

实现在预迁移步骤中定义的迁移目标后,请执行某些端到端验收测试,验证一切是否按预期工作。 以下文章提供有关迁移后增强功能的信息:

动态缩放是一个关键的价值主张,用于证明使用 Kubernetes 的复杂性。 若要实现本机 Kubernetes 优化缩放解决方案,请将教程:在 Azure Kubernetes 服务 (AKS) 中缩放应用程序的知识与 IBM 文档部分为 Liberty 集体设置自动缩放。

如果按照产品/服务中的步骤部署了具有 Azure 应用程序网关 的 Liberty,则可能需要对应用程序网关执行更多配置。 有关详细信息,请参阅应用程序网关配置概述。

通过高级负载均衡服务增强网络拓扑。 有关详细信息,请参阅在 Azure 中使用负载均衡服务。

使用 Azure Monitor 和 Application Insights 获取 Java 优化的应用程序性能监视。 有关详细信息,请参阅 Kubernetes 的零检测应用程序监视 - Azure Monitor Application Insights。

使用 Azure 存储提供装载到 AKS 的静态内容。 有关详细信息,请参阅 AKS 中应用程序的存储选项。 将此知识与 IBM 文档 WebSphereLibertyApplication 自定义资源相结合。

使用 Azure DevOps 将应用程序部署到迁移的 WAS 群集。 有关详细信息,请参阅 Azure DevOps 入门文档。

使用 Azure 托管标识托管机密并分配对 Azure 资源的基于角色的访问权限。 有关详细信息,请参阅什么是 Azure 资源的托管标识?

将 Liberty Java EE 身份验证和授权与 Azure Active Directory 集成。 有关详细信息,请参阅集成 Azure Active Directory 入门指南。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3