调度问题:如何在不标记为Down的情况下移除Slurm云节点?
快速手动释放Slurm云节点的方法
问题概述
当Slurm启动云实例时,该实例会以云节点形式出现在sinfo输出中。有时我们不想等待Slurm在SuspendTime到期后自动终止实例并释放节点,而是希望手动终止实例后立即释放节点,以便新实例能直接复用该节点的名称和资源。
当前采用的方法耗时较长:
- 手动终止云实例
- 执行
sudo scontrol update NodeName=$NODE_NAME state=DOWN reason=NoReason将节点设为Down,等待其从sinfo中消失
- 执行
- 执行
sudo scontrol update NodeName=$NODE_NAME state=RESUME reason=NoReason恢复节点状态
- 执行
这种方法等待时间久,无法满足更新主节点时需立即清除所有活跃工作节点实例的需求。
高效解决方案
手动终止实例后,直接执行以下两条命令(无需等待节点从sinfo中消失):
- 标记节点为Down并强制更新状态:
sudo scontrol update NodeName=$NODE_NAME state=DOWN reason="Manually terminated instance" force=TRUE - 立即恢复节点为可用状态:
sudo scontrol update NodeName=$NODE_NAME state=RESUME reason="Ready for new instance"
也可以将两条命令合并为一行:
sudo scontrol update NodeName=$NODE_NAME state=DOWN reason="Manually terminated instance" force=TRUE && sudo scontrol update NodeName=$NODE_NAME state=RESUME reason="Ready for new instance"
原理说明
force=TRUE参数会强制Slurm立即更新节点状态,无需等待节点的心跳反馈,彻底省去了等待节点从sinfo中消失的时间。- 直接从Down状态切换到Resume状态,会让Slurm立即将节点标记为可用,新的云实例可直接占用该节点资源。
如果需要批量处理多个节点,可使用循环:
for NODE in node1 node2 node3; do sudo scontrol update NodeName=$NODE state=DOWN reason="Manually terminated instance" force=TRUE sudo scontrol update NodeName=$NODE state=RESUME reason="Ready for new instance" done
内容的提问来源于stack exchange,提问作者Xaver
相关产品推荐
相关产品推荐

