亚马逊AWS官方博客

适用于 Amazon Elastic Kubernetes Service 的 AWS Batch



今天,我很高兴地宣布推出适用于 Amazon Elastic Kubernetes Service(Amazon EKS)AWS Batch。适用于 Amazon EKS 的 AWS Batch 非常适合那些想在批处理工作流程中免除配置、优化和管理 Kubernetes 集群和容器组(pod)负担的客户。而且,这是一项免费服务。您只需为批处理作业启动的资源付费。

之前,我认为 Kubernetes 应该是侧重于管理和托管微服务工作负载。因此,当我发现有些客户使用 Kubernetes 运行大规模的计算密集型批处理工作负载时,感到非常惊讶。批处理和微服务工作负载之间的区别决定了使用 Kubernetes 进行批处理可能很困难,需要您在自定义配置和管理上投入大量时间才能微调合适的解决方案。

Kubernetes 上的微服务和批处理工作负载
在我们进一步了解适用于 Amazon EKS 的 AWS Batch 之前,让我们先来了解一下批处理和微服务工作负载之间的一些重要区别,以帮助了解为什么在 Kubernetes 上运行批量工作负载会很困难:

  • 微服务工作负载应该处于启动状态而非停止,而且我们期望这些工作负载持续可用。相比之下,无论成功还是失败,批处理工作负载都会在完成运行后退出。
  • 我们无法在几分钟内获取批处理工作负载的结果,有时甚至几天都无法获取。而微服务工作负载则要在几毫秒内响应请求。
  • 为确保高可用性,我们通常在多个可用区部署微服务工作负载。而这并不是批量工作负载的要求。尽管我们可以分发批处理作业,以便其能够在分布式分析中处理不同的输入数据,但我们通常更希望优先考虑快速和最优地访问作业在其运行的可用区内所需的资源。
  • 微服务和批处理工作负载的扩展方式不尽相同。对于微服务,扩展通常是可预测的,而且通常会随负载增加(或减少)而呈线性扩缩。而对于批处理工作负载,您可以先执行一个初始或不经常重复的概念验证运行,来分析性能并发现整个生产运行中所需的适当调整。二者之间的规模可能存在指数级差异。此外,对于批处理工作负载,我们可能会在一次运行时扩展到极端级别,然后在很长一段时间(有时是几个月)内缩减到零实例。

尽管第三方框架可以帮助在 Kubernetes 上运行批量工作负载,但您也可以自己开发框架。无论采取哪种方法,在处理构建、配置和维护自定义批处理解决方案等无差别的繁重工作方面,都可能存在巨大差距和挑战。然后,您还需要考虑以经济实惠的方式在 Kubernetes 上规划、放置和扩缩批处理工作负载。那么,AWS Batch 对 Amazon EKS 有什么帮助呢?

适用于 Amazon EKS 的 AWS Batch
适用于 Amazon EKS 的 AWS Batch 提供了一个完全托管的服务,通过它使用在 Amazon Elastic Compute Cloud(Amazon EC2)上托管的集群运行批处理工作负载,而无需再安装和管理复杂的自定义批处理解决方案来解决上文所指出的区别。AWS Batch 提供了一个计划程序,用以控制和运行高容量批处理作业;此外,还提供了一个编排组件,用以评估何时、何地以及如何放置提交至队列的作业。作为用户,您无需协调任何工作,只需向队列提交工作请求即可。

作业队列、依赖项跟踪、重试、优先级划分、Amazon Elastic Compute Cloud(EC2)和 Amazon Elastic Compute Cloud(EC2)Spot 的计算资源预置以及容器组(pod)提交均使用无服务器队列进行处理。作为一项托管服务,适用于 Amazon EKS 的 AWS Batch 使您能够降低运营和管理开销,而将重点放在业务要求上。它可集成 AWS Identity and Access Management(AWS IAM)Amazon EventBridgeAWS Step Functions 等其他服务,并让您可以利用 Kubernetes 生态系统中的其他合作伙伴和工具。

在 Amazon EKS 集群上运行批处理作业时,AWS Batch 是提交工作负载请求的主入口点。然后,AWS Batch 会根据队列中的作业启动集群中的 Worker 节点来处理作业。这些节点与 Amazon EKS 中的其他节点组位于不同的命名空间,彼此保持独立。同样,其他容器组(pod)中的节点与 AWS Batch 使用的节点也彼此独立。

工作原理
AWS Batch 使用托管的 Amazon EKS 集群,这些集群需要向 AWS Batch 注册并设置权限,以使 AWS Batch 可以在这些集群中启动和管理计算环境,来处理提交到队列的作业。您可以在《Amazon EKS 用户指南》的本主题中找到有关如何启动 AWS Batch 可以使用的托管集群的说明。有关配置权限的说明,可在《AWS Batch 用户指南》中找到。

注册一个或多个集群并设置权限后,用户即可向队列提交作业。提交作业后,需执行以下操作来处理请求:

  • 在收到作业请求后,队列会向配置的计算环境发送资源请求。如果没有 AWS Batch 托管扩展组,请创建一个。随后,AWS Batch 开始在该组中启动 Amazon Elastic Compute Cloud(EC2)实例。将这些新实例添加到集群的 AWS Batch Kubernetes 命名空间中。
  • Kubernetes 计划程序将所有已配置的 DaemonSet 放置在节点上。
  • 节点准备就绪后,AWS Batch 开始向您的集群发送容器组(pod)放置请求、使用标签和污点为容器组(pod)做出放置选择、绕过 k8s 计划程序的大量逻辑。
  • 重复此过程,根据需要在扩展组中的更多 EC2 实例中进行扩展,直到达到最大配置容量。
  • 如果作业队列定义了另一个计算环境(例如配置为使用竞价型实例的计算环境),则它将在该计算环境中启动其他节点。
  • 完成所有工作后,AWS Batch 将从集群中移除节点并终止实例。

下面的动画演示了这些步骤。

动画:显示了 AWS Batch 在使用 Amazon EKS 集群处理请求时所采取的步骤

立即开始通过 AWS Batch 使用您的集群
适用于 Amazon Elastic Kubernetes Service(Amazon EKS)AWS Batch 现已推出。如我之前所述,这是一项免费服务,您只需为作业使用的资源付费。要了解更多信息,请访问《AWS Batch 用户指南》中的 Amazon EKS 入门主题。还里还提供了一个自导式研讨会,可帮助您了解 Amazon EKS 上的 AWS Batch。

– Steve