Armada|如何使用Kubernetes在数千个计算节点上运行数百万个批处理作业

10人将获赠CNCF商店$100美元礼券!

你填了吗?

image

问卷链接(https://www.wjx.cn/jq/9714648...


客座文章作者:G-research 计算平台工程经理 Jamie Poole。博文最初在G-research 的博客上发表

在过去的几年中,我们已经将越来越多的工作负载迁移到 Linux 上的容器中。一种对我们来说非常重要的特殊类型的工作负载是运行到完成的批处理作业。我们的大部分业务使用大型计算网格来执行分布式数据科学和数值处理——在大型、嘈杂的真实世界数据集中寻找模式。直到最近,我们主要是使用运行在 Windows 上的HTCondor来实现这一点。

迁移到 Linux 和容器,我们有机会重新评估我们想要如何去做这件事。我们尝试在 Condor 和 Linux 上运行容器化作业,但在去了一遍巴塞罗那的 KubeCon,并与其他一些研究机构进行了交谈后,我们觉得使用 Kubernetes 可以做得更好。我们已经在 Kubernetes 上运行了许多服务,因此拥有一个具有 Kubernetes 所带来的所有操作和功能优势的逻辑计算平台是很有吸引力的。

很明显,原味的 Kubernetes 不能满足我们的用例。我们有一个大型的、固定的 on-prem 计算池,Condor 模型的优点之一是,你可以提交比你的基础设施一次处理的更多的作业,多余的作业在外部排队,并使用公平共享系统进行优先级排序。我们已经知道 Kubernetes 是容器编排的最佳品种,但在过度供应时,它缺乏对作业进行排队或公平调度的能力。如果我们能够启用这些额外的特性,我们是否能够将 Kubernetes 也用于批处理作业基础架构,并为所有计算提供一个单一的逻辑平台?

我们开始了一个内部实验,命名为 Armada。我们有一些关键的架构原则要遵守:

  • 编写一些软件来添加排队和公平共享,而不需要修改 Kubernetes 本身。让 Kubernetes 来做节点调度和容器生命周期管理的艰苦工作。
  • 支持多个集群,这样我们就可以超越单个 Kubernetes 集群的限制,并获得多个集群的操作优势。我们的目标是运行一个由数千台服务器组成的机队。
  • 使用基于拉的模型来获得工作,让我们更容易扩大规模

此外,我们从一开始就希望它是开源的。我们已经从开源技术中受益越来越多,尤其是 Kubernetes 本身。我们认为,如果我们能够生产出一些东西来解决我们的问题,那么它很可能会对其他人有用,这可能是一个很好的机会来回馈我们正在从中受益的生态系统。我们没有太多建立绿地开源项目的经验,所以简单地在 GitHub 上开始,以确保我们能够分享它。

我们很快就产生了一个概念验证,并有了一个应用程序,我们可以在 AWS 中使用它来证明 Kubernetes 能够在多个集群(每个集群有数百个节点)上运行数万个作业。重要的是,我们能够证明,只要我们在外部处理排队,Kubernetes 不需要进行任何特殊的调优,就可以处理数千个容器的启动和停止。

那么它是如何工作的呢?

Armada|如何使用Kubernetes在数千个计算节点上运行数百万个批处理作业_第1张图片

Armada 的设计很简单。有一个中央服务器组件,用于存储要为不同用户或项目运行的作业队列。它负责维护整个系统的状态。它有一个 API,允许客户端以 Kubernetes pod 规范的形式提交作业,还可以监视作业的进度或取消作业。

在这下面,我们有一个 executor 组件,它可以部署到任何给定的 Kubernetes 集群中,允许检查集群并发现有多少资源(例如 CPU/GPU/内存)可用。它定期与服务器组件联系并租用要运行的作业,然后在本地创建 pod,将进度报告给服务器组件。作业完成后,将清理 pod,并为下一个作业提供空间。

缩放可以在二维水平进行。我们可以在专用的 executor 集群中增加节点,也可以根据需要增加更多的 executor 集群。由于使用基于拉的方法来租赁作业,我们可以轻松地添加或删除 executor 集群,而无需更改任何配置。

我们学到了什么?

根据我们的经验,我们已经验证了 Kubernetes 可以作为我们的计算场的计算基板的假设。它并不是完全一帆风顺的,在这个过程中我们遇到了一些有趣的边缘情况和问题。其中一些只是迁移到 Linux 和容器,不可避免地发现我们的代码在不知不觉中依赖于 Windows 操作系统及其生态系统。其他的是 Kubernetes 本身的问题,我们发现这些问题通常是由社区来解决的(例如:https://github.com/kubernetes/kubernetes/pull/90530——在使用静态 CPU 管理器时修复集群的过度分配)。这类事情本身就是一种验证——通过使用 Kubernetes,我们继承了所有社区的支持和项目的动力。

下一部

我们的环境正在增长,随着批处理工作负载迁移到 Linux,我们有了一个可靠的、可扩展的平台来运行它们。G-Research 中的 Kubernetes 是在 OpenStack 上提供的,我们可以重新提供现有的硬件,将其添加到 OpenStack 计算池中,以供 Kubernetes 使用。随着更多的工作负载迁移,看到环境的规模不断扩大是令人兴奋的。现在我们已经验证了平台的运行稳定性,我们想把重点放在可用性上。我们为用户设计了一个简单的 UI,使用户能够更容易地可视化他们的工作在系统中的流动,同时也使管理员更容易地从整体上理解系统。我们正在努力提高平台部署的自动化程度,尽可能让系统在部署后就可以“正常工作”。

我们欢迎你自己看看,尝试一下,并感谢任何反馈:https://github.com/G-Research/armada

如果你想加入我们的团队并与我们一起在很酷的项目工作,G-Research 在英国和我们的远程 GR 开源组总是在招聘有能力的开发者。

点击阅读网站原文


CNCF (Cloud Native Computing Foundation)成立于2015年12月,隶属于Linux  Foundation,是非营利性组织。
CNCF(云原生计算基金会)致力于培育和维护一个厂商中立的开源生态系统,来推广云原生技术。我们通过将最前沿的模式民主化,让这些创新为大众所用。扫描二维码关注CNCF微信公众号。
image

你可能感兴趣的:(Armada|如何使用Kubernetes在数千个计算节点上运行数百万个批处理作业)