stackhpc.openhpc
stackhpc.openhpc
这个 Ansible 角色用于安装必要的包和进行配置,以提供 OpenHPC v2.x Slurm 集群。
作为一个角色,它必须从一个 playbook 中使用,下面给出了一个简单的示例。这种方式使其完全模块化,不对可用网络或任何集群功能做假设,只需遵循一些主机名的约定。任何所需的集群文件系统或其他功能都可以通过额外的 Ansible 角色或其他方法自由集成。
节点的最小镜像是 RockyLinux 8 GenericCloud 镜像。
角色变量
openhpc_extra_repos
:可选列表。额外的 Yum 仓库定义,遵循 Ansible yum_repository 模块的格式。每个列表元素都需要尊重以下键:
name
:必需description
:可选file
:必需baseurl
:可选metalink
:可选mirrorlist
:可选gpgcheck
:可选gpgkey
:可选
openhpc_slurm_service_enabled
:布尔值,是否启用适当的 slurm 服务(slurmd/slurmctld)。
openhpc_slurm_service_started
:可选布尔值。是否启动 slurm 服务。如果设置为 false,所有服务将停止。默认值为 openhpc_slurm_service_enabled
。
openhpc_slurm_control_host
:必需字符串。控制器的 Ansible 清单主机名(和短主机名),例如 "{{ groups['cluster_control'] | first }}"
。
openhpc_slurm_control_host_address
:可选字符串。用于 openhpc_slurm_control_host
的 IP 地址或名称,例如,使用与 openhpc_slurm_control_host
解析出的接口不同的接口。
openhpc_packages
:要安装的额外 OpenHPC 包。
openhpc_enable
:
control
:是否启用控制主机database
:是否启用 slurmdbdbatch
:是否启用计算节点runtime
:是否启用 OpenHPC 运行时
openhpc_slurmdbd_host
:可选。如果您使用此角色部署 slurmdbd,则指定 slurmdbd 的部署位置,否则指定现有 slurmdbd 的运行位置。这应该是您清单中的主机名称。设置为 none
以防止角色管理 slurmdbd。默认值为 openhpc_slurm_control_host
。
openhpc_slurm_configless
:可选,默认 false。如果为 true,则使用 slurm 的 "configless" 模式。
openhpc_munge_key
:可选。定义要使用的 munge 密钥。如果不提供,则将生成一个,但 openhpc_slurm_control_host
必须在 play 中。
openhpc_login_only_nodes
:可选。如果使用 "configless" 模式,指定包含登录专用节点(即不是控制节点)的 ansible 组名称(如果需要)。这些节点将运行 slurmd
与控制节点联系以获取配置。
openhpc_module_system_install
:可选,默认 true。是否安装环境模块系统。如果为 true,将安装 lmod。如果为 false,您可以提供自己的模块系统或不使用模块系统。
slurm.conf
openhpc_slurm_partitions
:可选。一个或多个 slurm 分区的列表,默认 []
。每个分区可以包含以下值:
groups
:如果多个节点组组成该分区,可以在这里定义一个组对象的列表。 否则,可以省略groups
,并在分区对象中定义以下属性:name
:此组中节点的名称。cluster_name
:可选。上级定义openhpc_cluster_name
的覆盖。extra_nodes
:可选。其他节点定义的列表,例如,此组/分区中不受此角色控制的节点。每个项目应为一个字典,其键/值应符合 “节点配置” 文档的要求。请注意,键NodeName
必须放在首位。ram_mb
:可选。此组中每个节点可用的物理内存(slurm.conf 参数RealMemory
)以 MiB 为单位。如果未定义,将使用 ansible facts 设置,等价于free --mebi
总量 *openhpc_ram_multiplier
。ram_multiplier
:可选。上级定义openhpc_ram_multiplier
的覆盖。如果设置了ram_mb
,则无效。gres
:可选。定义 通用资源 的字典列表。每个字典必须定义:conf
:一个字符串,表示 资源规范,但要求格式为<name>:<type>:<number>
,例如gpu:A100:2
。注意type
是一个任意字符串。file
:一个字符串,表示此资源的 文件(设备路径),例如对于上面的示例而言,/dev/nvidia[0-1]
。
注意,如果使用了这个,
GresTypes
必须在openhpc_config
中设置。
default
:可选。一个布尔标志,指示此分区是否为默认。有效设置为YES
和NO
。maxtime
:可选。分区特定的时间限制,遵循 slurm.conf 参数MaxTime
的格式。默认值由openhpc_job_maxtime
给出。值应加引号以避免 Ansible 转换。partition_params
:可选。用于 分区配置 的额外参数和值的映射。
对于每个组(如果使用)或分区,清单组 <cluster_name>_<group_name>
中的任何节点将被添加到组/分区。请注意:
- 节点可以具有任意主机名,但应该使用小写字母以避免清单和实际主机名之间的不匹配。
- 组中的节点假定在处理器和内存上是均匀的。
- 清单组可以为空或缺失,但如果不为空,则 play 必须至少包含来自该组的一个节点(用于设置处理器信息)。
- 节点不能出现在多个组中。
openhpc_job_maxtime
:最大作业时间限制,默认 '60-0'
(60 天)。请参见 slurm.conf 参数 MaxTime
以获取格式。默认值为 60 天。值应加引号以避免 Ansible 转换。
openhpc_cluster_name
:集群名称。
openhpc_config
:可选。用于 slurm.conf
的额外参数和值的映射。注意,这些将覆盖 templates/slurm.conf.j2
中包含的任何内容。
openhpc_ram_multiplier
:可选,默认 0.95
。在设置 slurm.conf 中分区的 RealMemory
时使用的计算乘数:total_memory * openhpc_ram_multiplier
。使用 openhpc_slurm_partitions.ram_multiplier
可以在每个分区基础上重写。若设置 openhpc_slurm_partitions.ram_mb
,则无效。
openhpc_state_save_location
:可选。Slurm 控制器状态的绝对路径(slurm.conf
参数 StateSaveLocation)
计费
默认情况下,不配置任何计费存储。OpenHPC v1.x 和未经更新的 OpenHPC v2.0 集群支持基于文件的计费存储,可以通过将角色变量 openhpc_slurm_accounting_storage_type
设置为 accounting_storage/filetxt
1 来选择。要启用计费:
- 按照 slurm 计费 文档 的描述,在您清单中的某个节点上配置一个 mariadb 或 mysql 服务器,并将
openhpc_enable.database
设置为true
。 - 将
openhpc_slurm_accounting_storage_type
设置为accounting_storage/slurmdbd
。 - 配置下面
slurmdbd.conf
的变量。
该角色将为您配置以下变量:
openhpc_slurm_accounting_storage_host
:计费存储服务运行的位置,即 slurmdbd 运行的位置。
openhpc_slurm_accounting_storage_port
:用于连接到计费存储的端口。
openhpc_slurm_accounting_storage_user
:用于进行计费存储身份验证的用户名。
openhpc_slurm_accounting_storage_pass
:用于进行身份验证的 munge 密钥或数据库密码。
对于更高级的自定义或配置其他存储类型,您可能需要手动修改这些值。
作业计费
如果您使用上面的计费插件,这部分基本上是多余的,但可以提供基本的计费数据,如开始和结束时间。默认情况下,不会配置作业计费。
openhpc_slurm_job_comp_type
:作业计费的记录机制。可以是 jobcomp/filetxt
、jobcomp/none
、jobcomp/elasticsearch
之一。
openhpc_slurm_job_acct_gather_type
:收集作业计费数据的机制。可以是 jobacct_gather/linux
、jobacct_gather/cgroup
和 jobacct_gather/none
之一。
openhpc_slurm_job_acct_gather_frequency
:作业计费的采样周期(秒)。
openhpc_slurm_job_comp_loc
:存储作业计费记录的位置。依赖于 openhpc_slurm_job_comp_type
的值,例如对于 jobcomp/filetxt
,表示磁盘上的路径。
slurmdbd.conf
以下选项影响 slurmdbd.conf
。有关更多详细信息,请参见 slurm 文档。如果您将 openhpc_enable.database
设置为 true
,则需要配置这些变量。
openhpc_slurmdbd_port
:slurmdb 监听的端口,默认为 6819
。
openhpc_slurmdbd_mysql_host
:运行 mariadb 的主机名或 IP,默认为 openhpc_slurm_control_host
。
openhpc_slurmdbd_mysql_database
:用于计费的数据库,默认为 slurm_acct_db
。
openhpc_slurmdbd_mysql_password
:用于与数据库进行身份验证的密码。您必须设置此变量。
openhpc_slurmdbd_mysql_username
:用于与数据库进行身份验证的用户名,默认为 slurm
。
示例清单
Ansible 清单示例如下:
[openhpc_login]
openhpc-login-0 ansible_host=10.60.253.40 ansible_user=centos
[openhpc_compute]
openhpc-compute-0 ansible_host=10.60.253.31 ansible_user=centos
openhpc-compute-1 ansible_host=10.60.253.32 ansible_user=centos
[cluster_login:children]
openhpc_login
[cluster_control:children]
openhpc_login
[cluster_batch:children]
openhpc_compute
示例 Playbooks
要进行部署,请创建一个如下的 playbook:
---
- hosts:
- cluster_login
- cluster_control
- cluster_batch
become: yes
roles:
- role: openhpc
openhpc_enable:
control: "{{ inventory_hostname in groups['cluster_control'] }}"
batch: "{{ inventory_hostname in groups['cluster_batch'] }}"
runtime: true
openhpc_slurm_service_enabled: true
openhpc_slurm_control_host: "{{ groups['cluster_control'] | first }}"
openhpc_slurm_partitions:
- name: "compute"
openhpc_cluster_name: openhpc
openhpc_packages: []
...
1 Slurm 20.11 移除了 accounting_storage/filetxt
作为选项。此版本的 Slurm 在 OpenHPC v2.1 中引入,但 OpenHPC 仓库对所有 OpenHPC v2.x 发布版是通用的。↩
This role provisions an exisiting cluster to support OpenHPC control and batch compute functions and installs necessary runtime packages.
ansible-galaxy install stackhpc.openhpc