描述 Azure CycleCloud 群集模板

已完成

Azure CycleCloud 提供基于模板的 HPC 群集部署。 默认情况下,Azure CycleCloud 应用程序包括多个用于部署最常见群集计划程序的内置模板,包括 Slurm、PBSPro、LSF、Grid Engine 和 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。
  • 节点数组:表示一个或多个 Azure 虚拟机规模集。

注意

群集由在处理群集工作负载中为其指定角色提供服务的节点组成。 从实现的角度来看,Azure CycleCloud 依赖 Azure 资源管理器将它们预配为单独的 Azure VM 或虚拟机规模集的成员。 后者代表一组配置相同的 VM,不同于 Azure VM,后者支持水平自动缩放。 Azure CycleCloud 使用虚拟机规模集来实现节点数组。 实际上,[[node]] 节描述了平台预配的基础 VM 的属性,这些 VM 可以是独立的 Azure VM,也可以属于 Azure 虚拟机规模集。 [[nodearray]] 节描述 Azure 虚拟机规模集。

注意

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

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

每个节都包含多个键值对,这些键值对提供有关相应对象的配置详细信息,由节标头表示。 例如,对于节点数组,此类详细信息可能包含 ImageName 键,其值指定要用于其节点的 Azure VM 映像,或包含 Azure.MaxScalesetSize 键,指定允许的最大虚拟机规模集大小作为其值。 同样,node 或 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-template 的模板创建名为 lab-cluster 的群集,需要运行 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 项目。