库伯内特斯与MPI
我想在Kubernetes群集上运行MPI作业。背景是,我实际上正在运行一个现代的、很好的容器化应用程序,但部分工作负载是一个遗留的MPI作业,短期内不会重新编写,我希望尽可能将其融入kubernetes的“世界视图” 最初的一个问题是:有没有人成功地在kube集群上运行MPI作业?我看到过让MPI作业在docker容器中运行的工作,但他正在沿着docker swarm的道路前进(每个容器中都运行使用Consor的对等发现),我想坚持使用kubernetes(它已经知道所有对等体的信息),并从外部将这些信息注入容器。我可以完全控制应用程序的所有部分,例如,我可以选择使用哪个MPI实现 关于如何进行,我有几个想法:库伯内特斯与MPI,mpi,kubernetes,openmpi,Mpi,Kubernetes,Openmpi,我想在Kubernetes群集上运行MPI作业。背景是,我实际上正在运行一个现代的、很好的容器化应用程序,但部分工作负载是一个遗留的MPI作业,短期内不会重新编写,我希望尽可能将其融入kubernetes的“世界视图” 最初的一个问题是:有没有人成功地在kube集群上运行MPI作业?我看到过让MPI作业在docker容器中运行的工作,但他正在沿着docker swarm的道路前进(每个容器中都运行使用Consor的对等发现),我想坚持使用kubernetes(它已经知道所有对等体的信息),并从外
我知道,尝试将MPI等“已建立”的工作流与kubernetes和容器的“新热点”相结合有点阻抗不匹配,但我只是在走错路之前寻找指针/陷阱。如果什么都不存在,我很乐意破解一些东西并将其推回到上游。假设您不想使用特定于硬件的MPI库(例如任何使用直接访问通信结构的东西),我会选择选项2
mpirun
的SSH服务用于启动中的进程
其他豆荚另一个有趣的选择是使用有状态集,甚至可能与SLURM-inside一起运行,它实现了在kubernetes上运行的MPI机器的“虚拟”集群 这为每个节点提供了稳定的主机名,这将减少发现和跟踪状态的问题。您还可以为容器的本地工作文件系统使用有状态分配的存储(通过一些工作,可以使其始终引用相同的本地SSD)
另一个好处是,它可能对实际应用程序的侵入性最小。我在Kubernetes上尝试了几天MPI作业,并使用
dnsPolicy:None
和dnsConfig
(CustomDNS=true
功能门)解决了这个问题
我把我的舱单(如掌舵图)推到这里
我希望这会有所帮助。我怀疑选项3是否有效。openmpi的
orterun
(也称为mpirun
和mpiexec
)不仅仅是多次启动可执行文件。它充当职级之间的中央信息代理。选项2似乎是最合理的。是的,自从我提出这个问题以来,在库伯内特斯有两种新的方法可以做到这一点。不过,我还没有机会尝试一下:)@ben你能告诉我你在评论中提到的这些新方法吗?非常感谢。好吧,这是一种即兴的评论,但我主要指的是用于设置基础设施的helm charts和十四行诗(虽然我从来没有正确地完成过),我的一个学生使用方法2在集群中制作裸docker容器(没有swarm/kubernetes,由Ansible提供),并取得了一些成功。看见