设置具有工作负载分配的集群

设置具有工作负载分配的集群

我想设置一个服务器集群,它可以让服务器尽可能地忙碌,同时仍然为每个人提供公平的计算时间。我已经设置了一个基本的 Kubernetes 设置,但问题是,如果某个用户发布了一个可以并行化多达 256 个核心的 pod,但机器中最多有 96 个核心,那么工作负载将不会分配到不同的机器上。相反,工作负载本身会在 96 个核心上变慢。我想要某种可以将 pod 分配到不同机器上的东西,这样集群中的所有核心都可以保持忙碌。

答案1

有一个选项可以使用拓扑扩展约束您可以在集群的各个节点间分布 Pod。这也取决于您的工作负载/部署的副本数量。

我认为您需要让调度程序在节点上分配负载,这是 kubernetes 部署的目的。

答案2

我猜你可能使用一些旧的工作站,或者(更好的方法是)从当前的 Kubernetes 集群中抽出一台机器,并将其转换为一台机器SLURM集群,以便启动并运行。相当典型的路线是使用基于 RPM 的发行版(现在Rocky LinuxAlma Linux),但Debian应该也可以正常工作。一旦sbatch开始工作,就开始设置一些高级用户帐户,挂载 NFS(?) 驱动器,安装最常用的用户软件(检查spackapptainerconda)。给自己一些时间来解决“基本”配置问题,然后再转向更高级的问题,例如cgroups或适当的slurmdb会计。

即使只有 20 分钟的工作,也要确保尽可能优化这些工作。有时只需安装pigzzstdpypy3ripgrepduckdb即可立即见效。

答案3

我想设置一个服务器集群,可以让服务器尽可能地忙碌,同时仍然为每个人提供公平的计算时间

这就是 Kubernetes 调度程序的作用。

我已经设置了一个基本的 Kubernetes 设置,但问题是,如果某个用户发布了一个可以并行化多达 256 个核心的 pod,但机器中最多只有 96 个核心,那么工作负载就不会分配到不同的机器上

pod 是工作的一个原子单位,不能被拆分。

我想要一些可以将 pod 拆分到不同机器上的东西,以便集群中的所有核心都保持忙碌。

这是不可能的。pod 将被调度到单个服务器上,并且无法“拆分”。

我认为你在这里要找的词是“分散”。你想将你的工作量分散到许多服务器上。

您和用户可能共担责任,因此必须共同努力以正确配置应用程序和平台以使其顺利运行。

需要正确配置在 pod 中运行的应用程序,使其仅使用一定数量的计算。您可以将应用程序配置为仅使用一定数量的线程或跟踪 CPU 时间。

除此之外,你必须为 Pod 配置资源请求和限制。这样,Kubernetes 计划就有更多信息来了解 pod 适合(或不适合)的位置。Linux 内核(通过 cgroups)将强制执行 CPU 限制并限制进程。

我的建议是与开发人员合作,正确配置他们的部署,其中包含适合您的硬件平台的资源的 pod。

如果你想阻止他们部署会在资源分配方面产生问题或故障的工作负载,你可以部署类似基韦尔诺光学功率放大器甚至改进你的 CI/CD 管道来捕获这些错误。

作为您的研究点,如果您真的想要一个能够抓取工作负载并在多台服务器之间无缝平衡负载的平台,请寻找高性能计算解决方案。但是,您的开发人员需要深入参与才能使用适当的库。

相关内容