scicore.slurm
CI 测试 | galaxy 发布 |
---|---|
scicore.slurm
配置一个 SLURM 集群
该角色将配置:
- slurm 计费守护进程
- slurm 主守护进程
- slurm 工作节点
- slurm 提交主机
SLURM 用户在第一次提交作业时会自动添加到 slurm 计费数据库中,使用的是 lua 作业提交插件
示例清单
master ansible_host=192.168.56.100 ansible_user=vagrant ansible_password=vagrant
submit ansible_host=192.168.56.101 ansible_user=vagrant ansible_password=vagrant
compute ansible_host=192.168.56.102 ansible_user=vagrant ansible_password=vagrant
[slurm_submit_hosts]
submit
[slurm_workers]
compute
在定义清单后,请确保定义变量 "slurm_master_host",指向您的主机名
角色变量
# 在每台机器的 /etc/hosts 中添加所有 slurm 主机
# ip 来自 ansible facts hostvars[ansible_hostname]['ansible_default_ipv4']['address']
slurm_update_etc_hosts_file: true
# 如果您有 slurm 配置在 git 中,请将此变量指向一个 git 仓库
# slurm_config_git_repo: ""
# 默认情况下,该角色将部署一个 lua 提交插件,该插件会自动将用户添加到 slurm 计费数据库
# 有关详细信息,请查看 "templates/job_submit.lua.j2"
slurm_config_deploy_lua_submit_plugin: true
# 使用 slurm 无配置模式 https://slurm.schedmd.com/configless_slurm.html
# 此功能需要 slurm 20.02 或更高版本
# 仅在 RedHat 系统上测试,但如果您安装 ubuntu20.02 或更高版本,它也应该在 Ubuntu 上工作
slurm_configless: false
# 在 slurm 主机上为云调度部署所需的脚本,使用 OpenStack (https://slurm.schedmd.com/elastic_computing.html)
# 这将为 slurm.conf 部署 "ResumeProgram" 和 "SuspendProgram"
# 并在 slurm 主机上创建 /etc/openstack/clouds.yaml,带有应用凭证
# 这需要一个自定义的 slurm.conf。有关示例,请查看 "templates/slurm.conf.j2.cloud.example"
# 建议使用 [OpenStack 的内部 DNS 解析] (https://docs.openstack.org/neutron/latest/admin/config-dns-int.html#the-networking-service-internal-dns-resolution)
slurm_openstack_cloud_scheduling: false
slurm_openstack_venv_path: /opt/venv_slurm
slurm_openstack_auth_url: https://my-openstack-cloud.com:5000/v3
slurm_openstack_application_credential_id: "4eeabeabcabdwe19451e1d892d1f7"
slurm_openstack_application_credential_secret: "supersecret1234"
slurm_openstack_region_name: "RegionOne"
slurm_openstack_interface: "public"
slurm_openstack_identity_api_version: 3
slurm_openstack_auth_type: "v3applicationcredential"
# slurm 集群名称,在 slurm.cfg 中定义
slurm_cluster_name: slurm-cluster
# 设置此变量为 slurm-master 的 ansible_hostname
slurm_master_host: slurm-master.cluster.com
# 设置此变量为 slurm-dbd 主机的 ansible_hostname(默认为 slurm-master)
slurm_dbd_host: "{{ slurm_master_host }}"
# 在您的 ansible 清单中,包含所有 slurm 工作节点的组
slurm_workers_group: slurm_workers
# 在您的 ansible 清单中,包含所有提交主机的组
slurm_submit_group: slurm_submit_hosts
# 这是 slurm.conf 中的 "StateSaveLocation" 设置
slurm_slurmctld_spool_path: /var/spool/slurmctld
# 这是 slurm.conf 中的 "SlurmdSpoolDir" 设置
slurm_slurmd_spool_path: /var/spool/slurmd
# slurm 计费守护进程的设置
slurm_slurmdbd_mysql_db_name: slurm
slurm_slurmdbd_mysql_user: slurm
slurm_slurmdbd_mysql_password: aadAD432saAdfaoiu
# 运行 slurm 守护进程的 slurm 用户和组
slurm_user:
RedHat: "root"
Debian: "slurm"
slurm_group:
RedHat: "root"
Debian: "slurm"
# EPEL 是在 CentOS/RedHat 系统上安装 slurm 软件包和某些依赖项所必需的。
slurm_add_epel_repo: true
# 您可以将此设置为 true,以在 centos 上启用 openhpc yum 仓库
# 如果您打算使用 openhpc 的软件包,则还应更新以下 RedHat 的软件包列表
slurm_add_openhpc_repo: false
slurm_ohpc_repos_url:
rhel7: "https://github.com/openhpc/ohpc/releases/download/v1.3.GA/ohpc-release-1.3-1.el7.x86_64.rpm"
rhel8: "http://repos.openhpc.community/OpenHPC/2/CentOS_8/x86_64/ohpc-release-2-1.el8.x86_64.rpm"
# 我们在每个集群成员中安装的 slurm 软件包
slurm_packages_common:
RedHat:
- slurm
- slurm-doc
- slurm-contribs
Debian:
- slurm-client
# 我们仅在主节点中安装的 slurm 软件包
slurm_packages_master:
RedHat:
- slurm-slurmctld
# - slurm-slurmrestd
Debian:
- slurmctld
# 我们仅在 slurmdbd 节点中安装的 slurm 软件包
slurm_packages_slurmdbd:
RedHat:
- slurm-slurmdbd
- mariadb-server
Debian:
- slurmdbd
- mariadb-server
# 我们仅在工作节点中安装的 slurm 软件包
slurm_packages_worker:
RedHat:
- slurm-slurmd
- vte-profile # 避免在 slurm 交互式 shell 中出现 "bash __vte_prompt_command command not found" 的错误信息
Debian:
- slurmd
配置 OpenStack 的 slurm 云调度
该角色可以配置您的 slurm 集群以使用 OpenStack 云中的云调度。
在尝试配置之前,建议您阅读 Slurm 的云调度指南 和 Slurm 的无配置文档
确保您的 OpenStack 云启用了 内部 DNS 解析。这很重要,以便在启动新节点时,slurm 主机能够通过 OpenStack 内部 DNS 解析其主机名。
您还应该检查此角色提供的示例配置文件 slurm.conf.j2.cloud.example。
slurm.conf.j2.cloud.example 是一个示例,您需要根据您的具体需求进行调整,并将角色变量 slurm_conf_custom_template
指向您的自定义配置
云调度配置概述
正如 slurm 云调度文档中所述,当用户向云节点提交作业时,slurm 主机将执行在 slurm.conf 中定义的 "ResumeProgram",以启动云中的计算节点。
与该角色一起提供的 ResumeProgram 是一个 Python 脚本,它将使用 OpenStack API 启动计算节点。此 Python 脚本要求在虚拟环境中安装 OpenStack 客户端。程序的参数是要启动的节点名称(使用 Slurm 的主机列表表达式格式)。
当计算节点处于空闲状态时,slurm 主机将执行 SuspendProgram 以停止节点。程序的参数是要关闭的节点名称(使用 Slurm 的主机列表表达式格式)。
用于启动动态计算节点的 OpenStack 选项(flavor、image、network、keypair 和 security groups)必须在 slurm.conf 中定义为 节点特性,例如:
NodeName=compute-dynamic-[01-04] CPUs=4 RealMemory=7820 State=CLOUD Features=image=centos7,flavor=m1.large,keypair=key123,network=slurm_network,security_groups=default|slurm
"ResumeProgram" 和 "SuspendProgram" 都需要一个 OpenStack 配置文件,其中包含有效的凭证。该文件默认填充到 slurm 主机的 "/etc/openstack/clouds.yaml" 中。建议使用 OpenStack 应用凭证。请查看模板 templates/clouds.yaml.j2,了解填充此配置所需的角色变量。
"ResumeProgram" 和 "SuspendProgram" 会将日志写入 slurm 主机的 "/var/log/messages"。当启动云节点时,您可以查看此日志以进行调试。
推荐的 OpenStack 云调度 SLURM 部署方法
确保在您的软件仓库中有 Slurm 20.02 或更高版本,以支持 slurm 无配置模式。
至少启动 3 台机器:
- slurm 主机
- slurm 提交(登录节点)
- slurm 工作节点(这可以是我们用于创建具有所需云计算节点配置的 OpenStack 映像的小机器)
填充您的 ansible 清单,并将机器添加到角色变量 slurm_submit_group
和 slurm_workers_group
中引用的正确清单组中。
定义角色变量 slurm_master_host
,其值为 slurm 主机的主机名。集群中的每台机器都应能够解析该主机名为主机的 IP。集群中的每台机器必须能够连接到该机器(检查您的安全组和本地防火墙)。
创建 slurm.conf.j2.cloud.example
的副本,调整以符合您的需求,并将角色变量 slurm_conf_custom_template
指向您的配置文件。您的配置文件应提供一个名为 "static" 的分区,仅包括我们之前启动的 slurm 工作节点。
定义 ansible 变量 slurm_configless: true
,这样计算节点就可以在无配置模式下进行配置。当 slurm 工作节点在无配置模式下配置时,slurmd 守护进程将在首次启动时联系 slurm 主机,并将 slurm.conf 下载到 /var/run/slurm/conf/slurm.conf
。
执行该角色以配置您的所有机器,您应该得到一个在 "static" 分区内有一个节点的工作 slurm 集群。
现在您可以运行自定义剧本或脚本来定制 slurm 工作节点,例如添加 NFS 挂载、安装 LDAP 客户端、启用软件模块、安装额外软件等。
从 "static" 分区中的机器创建一个 OpenStack 映像,其中包含您所需的自定义。请查看 create-slurm-compute-node-image.yml 以获取示例。
更新您的 slurm.conf.j2.cloud.example
副本,并根据 OpenStack 映像名称、密钥名称、网络名称和安全组定义正确的节点特性。重新运行剧本以部署更新的配置。
现在 (希望) 您应该拥有一个支持云调度的工作 slurm 集群。您应当在执行 sinfo -Nel
时看到 slurm 云分区。尝试向其中一个云分区提交作业,并监控 slurm 主机上的 /var/log/messages
和 /var/log/slurm/slurmctld.log
。