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:是否启用 slurmdbd
  • batch:是否启用计算节点
  • 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:可选。一个布尔标志,指示此分区是否为默认。有效设置为 YESNO

  • 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/filetxt1 来选择。要启用计费:

  • 按照 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/filetxtjobcomp/nonejobcomp/elasticsearch 之一。

openhpc_slurm_job_acct_gather_type:收集作业计费数据的机制。可以是 jobacct_gather/linuxjobacct_gather/cgroupjobacct_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
许可证
apache-2.0
下载
1.8k
拥有者
StackHPC develops OpenStack capabilities for research computing use cases. Through extensive experience, we understand HPC and cloud.