描述 Azure CycleCloud 群集模板

已完成

Azure CycleCloud 提供基于模板的 HPC 群集部署。 默认情况下,Azure CycleCloud 应用程序包括多个内置模板,用于部署最常见的群集计划程序,包括 Slurm、PBSPro、LSF、网格引擎和 HT-Condor。 Azure CycleCloud GitHub 存储库提供了许多特定于计划程序的项目,可以自定义项目并将其导入到 Azure CycleCloud 实例中。 还可以选择使用 CycleCloud 自动缩放插件为自己的内部开发计划程序实现基于模板的预配。

模板有助于实现各种 Azure CycleCloud 功能,包括对自定义虚拟机(VM)映像、自动缩放和现成 VM 的支持。 它们还可以最大程度地减少与预配和维护相同配置的群集的多个部署相关的开销,这些部署通常用于隔离生产、开发和测试环境。

这些优势符合实现 Contoso 的新 Azure 居民群集的目标。 为了优化这些优势的范围,你决定详细了解如何实现 Azure CycleCloud 模板的格式和过程。

Azure CycleCloud 模板的格式是什么?

模板是 INI 格式的文件,使用声明性语法描述 CycleCloud 群集的结构和配置,包括群集节点角色及其各自的关系。 模板由命名节组成,标题由一对或多对方括号指定。 这些部分构成一个层次结构,对应于群集对象的层次结构及其相应的参数。 方括号数表示该层次结构中的一个层,每个层按顺序递增。

[cluster]
  [[node, nodearray]]
    [[[volume]]]
    [[[network-interface]]]
    [[[cluster-init]]]
    [[[input-endpoint]]]
    [[[configuration]]]
[environment]
[noderef]
[parameters]
  [[parameters]]
    [[[parameter]]]

实际上,该 [cluster] 节可能包含一个或多个 [[node]] 节,其中可能包含多个 [[[volume]]] 节。 同样,在同一模板中,在该节中 [cluster] ,可以定义一个或多个 [[nodearray]] 节,每个节都有自己的 [[[configuration]]]部分。

注释

同一层中的节的顺序是任意的。

模板的主要部分是什么?

模板由以下主要部分组成:

  • 群集:该 [cluster] 部分包含 Azure CycleCloud 群集对象的定义。 模板必须至少包含一个[cluster]部分,其中包含一个或多个[[node]][[nodearray]]描述该群集的子对象的部分。
  • 节点:表示单个平台预配的 VM。
  • Nodearray:表示一个或多个 Azure 虚拟机规模集。

注释

群集由节点组成,用于处理群集工作负荷中的指定角色。 从实现的角度来看,Azure CycleCloud 依赖于 Azure 资源管理器将其预配为单个 Azure VM 或虚拟机规模集的成员。 后者表示相同配置的 VM 的集合,与 Azure VM 不同,它们支持水平自动缩放。 Azure CycleCloud 使用虚拟机规模集来实现 nodearrays。 实际上,该 [[node]] 部分介绍基础、平台预配的 VM 的属性,这些 VM 可以是独立的 Azure VM,也可以属于 Azure 虚拟机规模集。 本 [[nodearray]] 部分介绍 Azure 虚拟机规模集。

注释

nodearray 可以包含多个 Azure 虚拟机规模集,每个规模集都包含不同配置的 VM。 但是,nodearray 中的所有节点在群集中执行相同的角色,例如向群集计划程序的单一队列提供资源。

  • 定义应附加到构成 nodearray 的单个群集节点或节点的 Azure 托管磁盘。 它是节点或 nodearray 对象的子对象。
  • 网络接口 定义应附加到构成 nodearray 的单个群集节点或节点的 Azure 网络接口。 它是节点或 nodearray 对象的子对象。
  • 配置 定义节点或 nodearray 的可配置属性。 它是节点或 nodearray 对象的子对象。
  • Cluster-init 定义要应用于群集节点的 Azure CycleCloud 项目规格。 项目是一个资源集合,它以项目规格的形式定义节点配置。 节点启动时,它会自动通过处理这些规范进行配置。 Cluster-init 是节点或 nodearray 对象的子对象。
  • 环境 定义 Azure 资源管理器部署,该部署预配或修改群集要使用的 Azure 资源。 它是可选的顶级对象。
  • Noderef 引用模板中的节点来表示资源依赖项。 它是可选的顶级对象。
  • 参数 使模板可移植,使你能够将其用于部署具有匹配对象层次结构但不同的配置设置的多个群集。 它是可选的顶级对象,但可以选择创建嵌套参数层次结构。 对于每个参数,可以定义其默认值。 参数还允许通过 CycleCloud Web 界面在群集中公开可配置变量。

每个部分都包含多个键值对,这些键值对提供有关相应对象的配置详细信息,由节标头表示。 例如,节点数组的此类详细信息可以包含 ImageName 指定要用于其节点的 Azure VM 映像的值的密钥,或 Azure.MaxScalesetSize 指定允许的最大虚拟机规模集大小的密钥作为其值。 同样,节点或 nodearray 节可以包含一个或多个 [[[configuration]]] 节。

如何基于模板预配群集?

确定要用于预配 Azure CycleCloud 群集的模板后,可以应用以下任一实现方法:

  • 使用 Azure CycleCloud CLI 将模板导入 Azure CycleCloud 应用程序,然后使用应用程序的图形界面预配群集。 若要触发导入,请运行 cyclecloud import_template -f <template_file> 命令(其中 <template_file> 占位符表示包含模板的文件的名称)。 如果模板包含多个群集定义,请指定要导入的群集的名称,方法是将其引用为参数的值 -c
  • 使用 Azure CycleCloud CLI 将模板导入 Azure CycleCloud 应用程序,然后预配群集。 若要触发导入,请运行 cyclecloud import_template -t -f <template_file> 命令(其中 <template_file> 占位符表示包含模板的文件的名称)。 导入完成后,运行 cyclecloud create_cluster 命令。 例如,若要创建一个名为导入的模板命名lab-clusterlab-template的群集,你将运行cyclecloud create_cluster lab-template lab-cluster
  • 使用 Azure CycleCloud CLI 预配群集,而无需显式导入模板。 若要触发导入,请运行 cyclecloud import_cluster 命令。

无论选择哪种方法,都需要在群集预配期间提供任何必需参数的值。 使用 Azure CycleCloud CLI 时,可以通过引用 JSON 格式的参数文件来提供它们。

注释

该文件由键值对组成,其中键表示参数名称。 若要查看现有群集的格式,请使用 cyclecloud export_parameters <cluster_name> > params.json 命令,其中 <cluster_name> 占位符表示现有群集的名称。

注释

在基于导入的模板部署群集之前,还需要将相应项目的内容上传到 Azure CycleCloud 保险箱中。 若要执行上传,请使用 cyclecloud project upload <locker_name> Azure CycleCloud CLI 命令(其中 <locker_name> 占位符表示保险箱的名称)。 若要列出可用的保险箱,请 cyclecloud locker list 运行 Azure CycleCloud CLI 命令。 分区中 [[[cluster-init]]] 引用了保险箱名称。

注释

设置 Azure CycleCloud 安装时,其中一个步骤是在 Azure 存储帐户中创建 Blob 容器。 此容器充当 CycleCloud 服务器用于暂存群集节点 CycleCloud 项目的保险箱。 随后,Azure CycleCloud 托管群集的节点配置为从此保险箱下载 CycleCloud 项目,作为启动过程的一部分。