这是一个使用 Kubernetes 的多容器 Slurm 集群。Slurm 集群 Helm 图表会创建一个命名卷,用于 MySQL 数据文件的持久化存储。默认情况下,它还会安装 RookNFS Helm 图表(也位于此仓库中),以在 Slurm 集群节点间提供共享存储。
需满足以下要求:
Helm 图表将运行以下容器:
Helm 图表将创建以下命名卷:
/var/lib/mysql)还需要一个挂载至 /home 的命名 ReadWriteMany (RWX) 卷,该卷可以是外部卷,也可使用提供的 rooknfs 图表目录部署(参见“部署集群”)。
slurm-cluster-chart/files 中的所有配置文件将在启动时挂载到容器中,以配置各自的服务。注意,对这些文件的更改不会全部传播到现有部署(参见“重新配置集群”)。Helm 图表的 values.yaml 文件中可找到其他参数。注意,其中部分值也需在集群重启后才会生效(参见“重新配置集群”)。
仅在初始部署时运行以下命令:
./generate-secrets.sh [namespace]
这会在目标命名空间中生成一组供 Slurm 集群使用的密钥。如需重新生成这些密钥,请参见“重新配置集群”。
请务必记录 Open Ondemand 凭据,通过浏览器访问集群时需要使用。
集群节点间的共享存储需要 ReadWriteMany (RWX) 卷。默认情况下,Rook NFS Helm 图表会作为 Slurm 集群图表的依赖项安装,以提供支持 RWX 的 Storage Class 用于所需的共享卷。如果目标 Kubernetes 集群已有应使用的存储类,则应在 values.yaml 中将 storageClass 设置为该现有类的名称,并通过设置 rooknfs.enabled = false 禁用 RookNFS 依赖项。无论哪种情况,均可通过设置 storage.capacity 的值来配置已配置 RWX 卷的存储容量。
使用 RookNFS 提供共享存储卷时,有关更多配置选项,请参见单独的 RookNFS 图表 values.yaml。
要通过 ssh 访问集群,需提供公钥。可通过运行以下命令添加本地主机的所有公钥:
./publish-keys.sh [namespace]
其中 namespace 是 Slurm 集群图表将部署到的命名空间(即使用 helm install -n ...)。这将在相应命名空间中创建一个供 Slurm 集群使用的 Kubernetes Secret。省略命名空间参数将在默认命名空间中安装密钥。
使用适当的 kubeconfig 文件配置 kubectl 后,使用 Helm 图表部署集群:
helm install slurm-cluster-chart
[!NOTE] 如果使用 RookNFS 依赖项,则必须在安装 Slurm 集群图表之前运行以下命令:
> helm dependency update slurm-cluster-chart
>
后续版本可使用以下命令部署:
helm upgrade slurm-cluster-chart
注意:使用 helm upgrade 更新集群时,如果 Slurm 队列中有运行中的作业,预升级钩子将阻止升级。尝试升级会将所有 Slurm 节点设置为 DRAINED 状态。如果因运行中作业导致升级失败,可等待运行中作业完成后重试升级,或作为特权用户访问集群手动解除节点排水状态。也可通过使用 --no-hooks 标志运行 helm upgrade 绕过钩子(可能导致运行中作业丢失)。
使用以下命令获取登录节点的外部 IP 地址:
LOGIN=$(kubectl get service login -o jsonpath="{.status.loadBalancer.ingress[0].ip}")
然后以 rocky 用户身份连接集群:
ssh rocky@$LOGIN
在 shell 中执行 Slurm 命令,例如:
[root@slurmctld /]# sinfo
PARTITION AVAIL TIMELIMIT NODES STATE NODELIST
normal* up 5-00:00:00 2 idle c[1-2]
容器中包含 Intel MPI 基准测试。可使用 mpirun 和 srun 运行,也可使用 apptainer 作为容器化工作负载运行。
作业脚本示例:
#!/usr/bin/env bash
#SBATCH -N 2
#SBATCH --ntasks-per-node=1
echo $SLURM_JOB_ID: $SLURM_JOB_NODELIST
srun /usr/lib64/openmpi/bin/mpitests-IMB-MPI1 pingpong
#!/usr/bin/env bash
#SBATCH -N 2
#SBATCH --ntasks-per-node=1
echo $SLURM_JOB_ID: $SLURM_JOB_NODELIST
/usr/lib64/openmpi/bin/mpirun --prefix /usr/lib64/openmpi mpitests-IMB-MPI1 pingpong
#!/usr/bin/env bash
#SBATCH -N2
#SBATCH --ntasks-per-node=1
MPI_CONTAINER_TAG="main"
echo SLURM_JOB_NAME: $SLURM_JOB_NAME
echo $SLURM_JOB_ID: $SLURM_JOB_NODELIST
srun singularity exec docker://ghcr.io/stackhpc/mpitests-container:${MPI_CONTAINER_TAG} /usr/lib64/openmpi/bin/mpitests-IMB-MPI1 pingpong
注意:mpirun 脚本假设以用户“rocky”身份运行。如果以 root 身份运行,需包含 --allow-run-as-root 参数。
对 slurm-cluster-chart/files/slurm.conf 中 Slurm 配置的更改,可通过运行以下命令传播(可能需要几秒钟)到除 slurmdbd pod 外所有 pod 的 /etc/slurm/slurm.conf:
helm upgrade slurm-cluster-chart/
然后可在 Slurm pod 内以 root 身份运行 scontrol reconfigure 读取新的 Slurm 配置。slurm.conf 文档指出,某些更改需要重启所有守护进程,此时需按以下说明重新部署 Slurm pod。
对其他配置文件(如 Munge 密钥等)的更改需要重新部署相应的 pod。
要重新部署 pod,请使用:
kubectl rollout restart deployment
用于 slurmdbd、login 和 mysql pod;使用:
kubectl rollout restart statefulset
用于 slurmd 和 slurmctld pod。
通常需要重启 slurmd、slurmctld、login 和 slurmdbd。
通过重新运行以下命令重新生成密钥:
./generate-secrets.sh
部分密钥持久化在卷中,因此轮换密钥需要完全拆除并重启这些卷及其挂载的 pod。运行:
kubectl delete deployment mysql
kubectl delete pvc var-lib-mysql
helm upgrade slurm-cluster-chart
然后重启其他依赖部署以传播更改:
kubectl rollout restart deployment slurmd slurmctld login slurmdbd
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
docker search 限制
站内搜不到镜像
离线 save/load
插件要用 plugin install
WSL 拉取慢
安全与 digest
新手拉取配置
镜像合规机制
不支持 push
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
域名连通性排查
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务