首页 > 云计算 > 公有云实践 > 无需编码,在EKS上重新平台化Windows应用
穆迪公司在Amazon EC2 for Windows Server上运行数十个.NET应用程序。作为其现代化战略的一部分,穆迪将其关键的传统应用程序重新平台化到支持Windows的Amazon EKS上,实现了成本降低、性能提升,并为其开发人员提供了更大的灵活性。在本次会议中,穆迪分享了其成功重新平台化的关键经验和最佳实践,包括如何克服挑战并最大化其平台工程投资。参加本次会议后,您将获得具体的示例和技术,以便在Amazon EKS上重新平台化您自己的.NET Framework应用程序。
以下是小编为您整理的本次演讲的精华。
Sree进一步阐述了穆迪公司的基础设施以及他们如何利用各种亚马逊云科技服务和功能来支持其在Amazon EKS上运行的容器化Windows应用程序。
从功能角度来看,穆迪公司的应用程序是数据密集型的,涉及需要数小时才能完成的冗长计算。该架构包括一个前端API层,客户端可以在其中上传数据,以及一个作业管理器接收请求。作业管理器将上传的数据存储在Amazon FSx中,相关元数据存储在数据库中,并根据工作负载和数据大小在私有Amazon MQ (RabbitMQ)队列中调度作业。在作业处理过程中,事件和作业状态会被写入事件存储,API层中的作业监控API会从事件存储中检索这些信息,并将进度报告回客户端。
穆迪公司利用Amazon EKS中的托管节点组,明确管理节点大小、资源限制和配置。然而,他们最近实施了开源Kubernetes项目Carpenter,这是一个EKS节点生命周期管理工具。Carpenter分析无法调度的作业、资源限制,并根据大小、时间和需求调度作业,根据需要自动扩展或缩减节点。
使用Carpenter,穆迪公司定义了节点类,指定要使用的所需虚拟私有云(VPC)、安全组、IAM角色和Amazon Machine Images (AMIs)。节点池定义了实例类型和资源限制,允许Carpenter在指定的边界内自动扩展节点,优化资源利用率和成本。
为了在不更改代码的情况下进行迁移,穆迪公司将整体应用程序分解为较小的API,并将二进制文件打包到单独的Docker镜像中。每个Docker镜像都包含一个入口点脚本,该脚本通过从Amazon EKS ConfigMaps、AWSSecrets Manager或其他来源加载变量作为环境变量来准备环境。这些脚本还配置应用程序设置、创建网站并设置应用程序池,确保容器化应用程序可以顺利运行。
在某些情况下,穆迪公司将证书存储在Amazon S3中,并在运行时拉取它们以安装到容器中,以满足遗留应用程序的要求。
通过迁移到Amazon EKS,穆迪公司实现了显著的成本节省,与内部数据中心相比,成本降低了48%。采用Carpenter和能够使用Spot实例进一步优化了成本。
为了提高性能,穆迪公司解决了Windows实例的节点启动时间比Linux长的问题。他们通过包含所需的镜像并为Windows实例启用Fast Launch AMI功能,将启动时间从15分钟缩短到6分钟。
此外,穆迪公司通过预先构建包含所需层的Docker镜像,优化了容器启动时间,从而减少了运行时下载和解压层所需的时间。虽然Windows容器通常比Linux容器大,但这种缓存策略有助于缓解性能影响。
负责Microsoft工作负载的解决方案架构师Jared阐述了在亚马逊云科技上运行Windows容器时改善体验的策略。他解释说,通过将应用程序及其依赖项容器化,组织可以实现更高的计算和存储效率,因为容器是隔离的,每个应用程序不需要完整的操作系统。这种方法减少了所需的Windows许可证数量,从而节省了成本。
Jared强调,将遗留应用程序及其依赖项容器化(这些依赖项可能与较新版本的Windows不兼容),可以简化测试过程并加快升级路径,从而避免与Microsoft签订昂贵的支持终止合同。
利用现有的容器和Kubernetes内部专业知识,组织可以最大限度地利用其在DevOps和平台工程方面的投资。Jared强调,认为Windows容器只应该用于.NET Framework应用程序的观念是错误的,任何与Windows兼容的框架或商业现成软件(COTS)应用程序都可以容器化。
Jared提供了Amazon EKS优化的Windows Server AMI架构的见解,其中包括kubelet(用于与EKS控制平面通信)、kube-proxy(用于集群内的网络路由)和亚马逊云科技 IAM身份验证器(用于Kubernetes),从而无需单独的Kubernetes凭证。
Container Credential Guard (CCG)插件通过从AWSSecrets Manager或AWSSystems Manager Parameter Store检索凭证并从Active Directory获取组托管服务帐户(GMSA)身份,将其传递给pod,从而实现了应用程序的无域Windows身份验证。
ContainerD是EKS优化AMI中包含的容器运行时,它公开了一个REST接口,供CLI工具与容器运行时交互。它通过主机计算服务(HCS)层与低级内核API进行交互,HCS层通过C API公开内核API,从而使容器运行时能够与Windows内核进行交互。
为了解决人们对Windows容器启动时间比Linux慢的看法,Jared介绍了使用Amazon EC2 Image Builder进行缓存的策略。通过创建预先缓存了容器层、应用程序依赖项和Microsoft更新的自定义AMI,可以显著减少拉取和解压容器镜像所需的时间。
在一个真实的示例中,Jared演示了对于在Windows容器中运行的ASP.NET应用程序,通过使用预先缓存了层的自定义AMI,启动时间从7分钟缩短到54秒,因为容器运行时只需要检查镜像元数据并创建pod,而无需解压层。
Jared还讨论了提高Windows EC2实例(用作Amazon EKS中的工作节点)启动时间的策略。SysPrep过程会为每台Windows机器分配一个唯一的安全标识符(SID),在实例启动期间可能会耗费大量时间。通过为Windows EC2实例启用Fast Launch,亚马逊云科技会预先运行SysPrep过程,将输出保存到快照中,并使用该快照启动新实例,从而将SysPrep过程的时间从6分钟缩短到1分钟50秒(根据提供的示例)。
通过这些策略,Jared展示了虽然Windows容器的启动时间最初可能比Linux容器慢,但通过实施有效的缓存和Fast Launch技术,可以显著提高Windows容器和工作节点的启动时间,使整体体验更加高效,与在亚马逊云科技上运行Linux容器相当。
我们正处在 Agentic AI 爆发前夜。 2025 亚马逊云科技中国峰会提出,企业要从 " 成本优化 " 转向 " 创新驱动 " ,通过完善的数据战略和 AI 云服务,把握全球化机遇。亚马逊将投入 1000 亿美元在 AI 算力、云基础设施等领域,通过领先的技术实力和帮助“中国企业出海“和”服务中国客户创新“的丰富经验,助力企业在 AI 时代突破。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70038688/viewspace-3090509/ ,如需转载,请注明出处,否则将追究法律责任。