你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
Azure CycleCloud 使用模板来定义群集配置。 CycleCloud 默认包含许多模板。 有关支持模板的完整列表,请参阅 GitHub。 可以创建新模板或自定义现有模板。 例如,可以自定义现有模板以利用现成 VM,或添加一个用于扩展自己的网络的 VPC。
配置表示法
Azure CycleCloud 群集模板允许向节点或节点数组添加一个或多个 [[[配置]]] 节。 这些部分指定 CycleCloud 启动的节点的软件配置选项。 使用点表示法指定要配置的属性:
[[node scheduler]]
[[[configuration]]]
cycle_server.admin.name = poweruser
cycle_server.admin.pass = super_secret
cycle_server.http_port = 8080
cycle_server.https_port = 8443
还可以使用 prefix 表示法指定配置节并保存键入。
也可以将相同的配置编写为:
[[node scheduler]]
[[[configuration cycle_server]]]
admin.name = poweruser
admin.pass = super_secret
http_port = 8080
https_port = 8443
如果需要,节点或节点数组还可以包含多个配置节:
[[node scheduler]]
[[[configuration]]]
run_list = role[sge_scheduler_node]
[[[configuration cycle_server.admin]]]
name = poweruser
pass = super_secret
群集模板参数
群集模板可以包含用于更改群集某些部分的值的参数。 无需修改模板本身。 如果要创建许多具有细微差异的类似群集(例如部署开发和生产环境),此功能尤其有用。 若要在群集模板中指定参数,请使用“$”为变量添加前缀。 具有某些参数的基本模板示例(非功能性)可能如下所示:
# template.txt
[cluster gridengine]
[[node scheduler]]
MachineType = $machine_type
[[[configuration]]]
gridengine.slots = $slots
此模板定义两个参数: $machine_type 和 $slots。 使用此模板,可以创建文本文件,其中包含开发环境和生产环境中这些参数的值。 可以对参数文件使用 JSON 格式或 Java 属性文件格式:
# dev-params.json
{
"machine_type": "H16r",
"slots": 2
}
# prod-params.properties
machine_type = Standard_D4v3
slots = 8
此示例创建一个 JSON 文件,其中包含用于开发的参数,以及包含生产值的 .properties 文件。
注释
参数文件的文件名后缀非常重要! 如果使用 JSON,请命名文件 foo.json。 如果使用 Java 属性,请将文件名以 .properties 结尾。 错误命名的参数文件无法正确导入。
现在,可以使用参数文件导入模板,以填写缺少的部分:
cyclecloud import_cluster gridengine-dev -f template.txt -p dev-params.json -c gridengine
cyclecloud import_cluster gridengine-prod -f template.txt -p prod-params.properties -c gridengine
还可以在群集模板本身中定义部分或全部参数:
# template.txt
[cluster gridengine]
[[node scheduler]]
MachineType = $machine_type
[[[configuration]]]
gridengine.slots = $slots
[parameters]
[[parameter machine_type]]
DefaultValue = Standard_D4v3
[[parameter slots]]
DefaultValue = 2
该模板定义每个参数的默认值(我们使用开发值作为默认值)。
现在无需参数文件即可导入模板,并且会自动使用开发值。 需要创建生产群集时,请使用 prod-params.properties 文件覆盖模板文件本身中指定的值。
注释
参数名称可以包括任何字母、数字和下划线。
模板中的参数引用可以采用以下两种形式之一:
$param:使用名为 param 的参数值。
${expr}:在所有 expr 参数的上下文中求值,使你能够计算动态值。 例如:
Attribute = ${(a > b ? a : b) * 100}
此表达式采用两个参数中的较大值, ab并将它乘以 100。
根据 ClassAd 语言规范解释和计算表达式。
如果参数引用本身存在,则使用参数的值,它支持布尔值、整数和嵌套结构(如列表)等非字符串类型。
但是,如果引用嵌入在其他文本中,则其值将转换并包含在字符串中。
例如,假设 param 被定义为 456 并在两个地方引用:
- Attribute1 = $param
- Attribute2 = 123$param
Attribute1 的值是数字 456,但是 Attribute2 的值是字符串 "123456"。
${param} 的工作方式与 $param 相同,因此可以在更复杂的情况下使用它来包括参数引用。
- Attribute3 = 123$param789
- Attribute4 = 123${param}789
Attribute3 查找命名 param789的参数,但 Attribute4 使用值 param 获取 "123456789"。
计算机类型
Azure CycleCloud 通过 MachineType 属性支持多个计算机类型。 解决方案会尝试按列出的顺序获取容量。
群集初始化规格
使用 Azure CycleCloud Web 应用程序,可以在创建新群集时选择群集初始化项目规格。 在群集模板中设置项目规格:
[parameter ClusterInitSpecs]
Label = Cluster-Init
Description = Cluster init specs to apply to nodes
ParameterType = Cloud.ClusterInitSpecs
[cluster demo]
[[node defaults]]
AdditionalClusterInitSpecs = $ClusterInitSpecs
[[[cluster-init myproject:myspec:1.0.0]]]
将此参数添加到群集模板后,可以使用文件选取器在创建群集时选择正确的项目规格。
现成虚拟机
若要降低工作负荷的成本,请设置为 Interruptibletrue。 此设置将实例标记为现成虚拟机,并使它能够在可用时使用剩余容量。 请注意,这些实例并非始终可用,且可能随时被抢占,因此可能不适合您的工作负载。
默认情况下,当设置为 Interruptible true 时,实例使用最高价格设置为 -1 的现成虚拟机。 此设置意味着实例不会根据价格被驱逐。 实例的价格是现货虚拟机的当前价格或标准实例的价格,以较低者为准,只要有可用容量和配额。 若要设置自定义最大价格,请使用 MaxPrice 所需节点或节点数组上的属性。
[cluster demo]
[[nodearray execute]]
Interruptible = true
MaxPrice = 0.2
查找表
可以有一个参数引用另一个参数,并使用查阅表计算特定值。 例如,假设你有一个参数供图像使用,在本例中有两个选项:
[[parameter MachineImage]]
Label = Image
DefaultValue = image-1000
Description = Ubuntu 22.04
Config.Plugin = pico.control.AutoCompleteDropdown
[[[list Config.Entries]]]
Name = image-1000
Label = Ubuntu 20.04
[[[list Config.Entries]]]
Name = image-2000
Label = Ubuntu 22.04
还可以获取所选映像的操作系统版本,并通过将 e 设置为其值为值查找表的参数来将其用于其他配置:
[[parameter AmiLookup]]
ParameterType = hidden
[[[record DefaultValue]]]
image-1000 = Ubuntu 20.04
image-2000 = Ubuntu 22.04
此参数处于隐藏状态,因此它不会显示在 UI 中。
可以在群集定义中的其他任何位置获取用于所选映像的 OS 版本:
[[node node]]
[[[configuration]]]
version = ${AmiLookup[MachineImage]}
GUI 集成
通过定义群集模板中的参数,可以利用 Azure CycleCloud GUI。 例如,定义参数时,请使用以下属性来帮助创建 GUI:
# template.txt
[cluster gridengine]
[[node scheduler]]
MachineType = $machine_type
[[[configuration]]]
gridengine.slots = $slots
[parameters]
[[parameter machine_type]]
DefaultValue = Standard_D4v3
Label = Machine Type
Description = MachineType to use for the Grid Engine scheduler node
ParameterType = Cloud.MachineType
[[parameter slots]]
DefaultValue = 2
Description = The number of slots for Grid Engine to report for the node
GUI 包括 “标签 ”和 “说明” 属性,这些属性显示在 GUI 中,以及可选的 ParameterType 属性。
ParameterType 属性允许显示自定义 UI 元素。 在前面的示例中, Cloud.MachineType 该值显示一个下拉列表,其中包含所有可用的计算机类型。 其他 ParameterType 值包括:
| 参数类型 | DESCRIPTION |
|---|---|
| Cloud.MachineType | 显示包含所有可用计算机类型的下拉列表。 |
| 云端凭证 | 显示包含所有可用凭据的下拉列表。 |
| 云.区域 | 显示包含所有可用区域的下拉列表。 |
模板中的自定义用户图像
Azure CycleCloud 支持模板中的自定义映像。 可以直接使用 ImageId 指定映像 ID(资源 ID),也可以将映像添加到映像注册表。 将映像添加到注册表时,可以在节点上通过 Image 或 ImageName 来引用它。 该映像显示在群集创建页上 的图像下拉列表 中。
映像注册表中的映像由一条 Package 记录组成,用于标识逻辑映像的内容,以及一个或多个相应的 Artifact 记录,这些记录在相应的云提供程序中指定实际映像 ID。 例如,安装了 R 的自定义映像可能包含此包记录:
AdType = "Package"
Name = "r_execute"
Version = "2.1.1"
PackageType = "image"
Label = "R"
添加该记录时,可以通过在群集模板中包含Image = R或ImageName = r_execute来指定映像。
如果此映像作为单个虚拟机存在于美国东部,且 ID 为 ,则需要存储以下项目/subscriptions/xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/images/MyCustomImage:
AdType = "Artifact"
Package = "r_execute"
Version = "2.1.1"
Name = "az/useast"
Provider = "az"
ImageId = "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/images/MyCustomImage"
必须在构件上指定 Provider 。
可以根据需要为给定映像包添加任意数量的项目,但必须在所需的所有位置(每个云提供商帐户、区域、项目等)中包含使用该映像所需的所有项目。 项目的名称并不重要,但对于给定的包和版本,它在所有项目中必须是唯一的。 我们通常建议结合使用提供程序和特定于提供程序的详细信息(例如区域)。 CycleCloud 会自动选取正确的项目来匹配提供程序和任何特定于提供程序的详细信息,但它使用提供程序属性(和区域等),而不是分析名称。
如果添加多个具有相同名称的映像包,则每个包必须具有不同的版本号。 启动实例时,CycleCloud 会自动选择版本号最高的映像。 它将版本号视为虚线字符串,并将每个部分作为数字进行比较。 若要重写此行为,请在节点上指定 ImageVersion 为文本版本号(例如 1.2),或通配符版本号(例如, 1.x)。