Slurm资源管理架构

1、Slurm架构

通过集中式的slurmctld来管理和控制资源,充当控制节点。每个计算节点都有一个守护进程,称为slurmdslurmdbd 负责记录在数据库中slurm所管理的集群信息。通过slurmrestdREST APISlurm交互。还有一些命令行工具,来实现对作业的处理以及分区、节点等维护。

master-slave架构 slurm架构_master-slave架构

2、slurmctld

slurmctld是模块化和多线程的,为各种数据结构提供独立的读写锁,以增强可扩展性。控制器包括以下子系统:节点管理器、分区管理器和作业管理器。

  • 节点管理

节点管理器监视节点的状态。监测的节点信息包括:节点上的处理器数、节点内存大小、临时存储区大小、节点状态、节点描述、权重、IP地址。CPU、RealMemory和TmpDisk的这些值被认为是节点可接受的最小节点配置值,以便节点投入使用。统计slurmd节点上实际存在的任何资源,并由节点管理器记录。定期检查实际节点资源,如果一个节点的资源少于配置的资源,它将处于DOWN状态并记录事件。否则,将记录所报告的实际资源,并可能将其用作调度的基础。设置权重用于在分配工作时对可用节点进行排序。处理能力强的节点对应权重越大。

  • 分区管理

分区管理器标识要用于执行用户作业的节点组。与分区关联的数据包括:分区名、RootOnly标志,指示只有root用户或SlurmUser可以分配此分区中的资源、节点列表、分区状态(DOWN,UP)、作业最长时间限制、分配给单个作业的最少最多节点、允许使用分区的组列表、共享访问(shared,独占或者共享访问,FORCE表示无法确保互斥访问节点)、默认分区(如果作业请求中未指定分区)。

共享访问可能会对并行作业的性能产生负面影响,比如在耗尽共享资源(如内存、磁盘空间)时导致作业失败。但是,共享资源可以提高整个系统的利用率和响应能力。

另外,集群中的控制节点会对计算节点会定期进行PING操作,确定节点状态,并对资源分配进行调整。

  • 作业管理

与每个作业相关联的多个参数,包括:作业名、uid、jobid、工作目录、分区、优先级、节点约束(处理器、内存等)。作业管理核心功能包括:请求资源、重置作业优先级、作业状态(节点列表、内存、CPU使用情况)、终止作业等。

作业被放置在优先级排序的队列中,分配的节点由分区管理器选择。默认调度器的调度策略是FIFO,也可以使用外部的资源调度插件,Maui Scheduler就是与slurm结合的开源的外部调度器。slurm允许外部实体随时更改作业的优先级,并根据需要重新排序队列。

3、slurmd

slurmd守护程序是一个多线程守护程序,用于管理用户作业和监视系统状态。启动后,它读取配置文件,恢复任何保存的状态,捕获系统状态,尝试与slurmctld的初始连接,并等待请求。它为系统状态、会计信息、作业启动、作业状态、作业终止和作业附件的请求提供服务。在本地节点上,slurmd提供了将本地进程id转换为作业id的API。

slurmd最常见的操作是根据请求报告系统状态。在slurmd启动之后,会定期收集节点的处理器计数、实际内存大小和临时磁盘空间。如果这些值发生变化,将通知控制器。同时slurmd也接受srunslurmctld的请求用以启动和终止用户作业。

slurmd收到来自slurmctld的作业终止请求时,它将SIGTERM发送给作业中所有正在运行的任务,等待KillWait秒,然后发送SIGKILL。如果进程未终止slurmd通知slurmctld,这将记录事件并将节点的状态设置为DREAND

master-slave架构 slurm架构_master-slave架构_02

4、安全机制

SLURM有一个简单的安全模型:集群的任何用户都可以提交并行作业来执行并取消自己的作业。任何用户都可以查看SLURM配置和状态信息。只有特权用户才能修改SLURM配置、取消任何作业或执行其他受限活动。SLURM中的特权用户包括root用户和SlurmUser用户(如SLURM配置文件中所定义)。如果其他人需要修改SLURM配置的权限,可以使用set-uid程序向特定用户授予特定权限。

  • 通讯身份认证

通常,节点间身份验证是通过使用保留端口和设置uid程序来完成的。在这个方案中,守护进程检查请求的源端口,以确保它小于某个值,因此只能由root访问。然后,通过该连接的通信被隐式信任。由于端口是一种有限的资源,setuid程序可能会引起安全问题,因此slurm采用了一种不依赖于保留端口的基于凭据的身份验证方案。在这种设计中,SLURM身份验证凭证附加到每个消息,并权威地验证消息发起方的uid和gid。一旦SLURM消息的接收者验证了身份验证凭证的有效性,他们就可以使用凭证中的uid和gid作为发送者的权威身份。

SLURM身份验证凭证的实际实现被归入“auth”插件。目前已经实现了三个功能性身份验证插件:jwt、Munge和none。“无”身份验证类型使用空凭证,仅适用于安全性不受关注的测试和网络。jwt和Munge实现都使用密码学为请求用户生成凭证,然后可以在任何远程节点上进行权威验证。然而,authd假设网络是安全的,而Munge则没有。其他身份验证实现,例如基于Kerberos的凭据,应该可以使用身份验证插件API轻松开发

  • 作业身份认证

当控制器将资源分配给用户时,通过组合uid、作业id、步骤id、分配的资源列表(节点)和凭证生存期,使用slurmctld私钥对结果进行签名,生成作业步凭证。此凭证授予用户访问分配资源的权限,并免除了联系控制器以验证运行进程请求的负担。

slurmd根据控制器的公钥验证凭证上的签名,如果凭证有效,则运行用户请求。凭证签名的一部分可以用来验证从slurmd 到srun的stderr, stdin, stdout连接。

  • 授权

可以通过RootOnly标志限制对分区的访问。如果设置了此标志,则仅当发起请求的有效uid是特权用户时,才会接受对此分区的作业提交或分配请求。特权用户可以像任何其他用户一样提交作业。例如,这可以用于为特定的外部调度程序提供对分区的独占访问。个人用户将不被允许直接向这样的分区提交作业,这将阻止外部调度程序有效地管理它。

5、Munge机制

Slurm采用Munge机制进行安全认证。安全模型主要有三个内容:

  • 用户可以任意提交、执行和删除自己的任务
  • 用户可以查看slurm配置文件,和节点状态
  • 授权用户可以更改相关配置文件

master-slave架构 slurm架构_master-slave架构_03

  1. Munge 进程运行在每一个节点上,通过getpeername()函数来确认用户信息,并产生一个凭证。该凭证包括:user ID,组ID,时间戳,生命周期等。
  2. Munge利用私钥生成一个消息认证码(MAC)用于认证。
  3. 然后Munge 用公钥加密包含MAC信息的认证。
  4. Slurm进程之间互相传递加密后的认证信息,并将自己接受到的认证信息发送给自己的munge。
  5. Munge利用自己的私钥去解密认证,获得user ID,group ID等信息。

6、网络结构

通常情况下,采用层次网络结构,slurm网络拓扑结构为一棵树,非叶子节点为交换机,叶子节点为计算节点,Slurm使用最佳匹配算法来选择最低层的交换机,使得此交换机层下面的叶子层资源满足作业需求。

master-slave架构 slurm架构_架构_04

配置格式:

(1)交换机-节点

SwitchName=X Nodes=<node name>

(2)交换机-交换机

SwitchName=X Switches=<switch name>

master-slave架构 slurm架构_身份验证_05