Шаблоны кластера
Azure CycleCloud использует шаблоны для определения конфигураций кластера. По умолчанию в CycleCloud включен ряд шаблонов, а полный список поддерживаемых шаблонов доступен на сайте GitHub. Вы можете создать новые шаблоны или настроить существующие. Например, вы можете настроить существующий шаблон, чтобы воспользоваться преимуществами точечных виртуальных машин или добавить VPC для расширения собственной сети.
Нотация конфигурации
Все шаблоны кластеров Azure CycleCloud могут иметь один или несколько разделов [[конфигурация]], принадлежащих узлу или nodearray. В этих разделах указаны параметры конфигурации программного обеспечения для узлов, запускаемых 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
При необходимости узел или nodearray может содержать несколько разделов конфигурации:
[[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
. С помощью этого шаблона можно определить текстовые файлы, содержащие значения параметров в средах разработки и prod. Файл параметров может быть в формате 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
Значения по умолчанию для каждого параметра определяются в шаблоне (мы использовали значения dev в качестве значений по умолчанию).
Теперь можно импортировать шаблон без файла параметров, и значения dev будут использоваться автоматически. Когда пора создать кластер prod, можно использовать файл prod-params.properties для перезаписи значений, указанных в самом файле шаблона.
Примечание
Имена параметров могут содержать любые буквы, цифры и символы подчеркивания.
Ссылки на параметры в шаблоне могут принимать одну из двух форм:
$param
: использует значение одного параметра с именем param
${expr}
: оценивается expr
в контексте всех параметров, что позволяет вычислять динамические значения. Пример:
Attribute = ${(a > b ? a : b) * 100}
Это займет больше двух параметров, a
и b
умножить его на 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 позволяет пользователям выбирать спецификации проекта cluster-init при создании нового кластера. Спецификации проекта настраиваются в шаблоне кластера:
[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]]]
После добавления этого параметра в шаблон кластера пользователь может использовать средство выбора файлов для выбора соответствующих спецификаций проекта при создании нового кластера.
Точечные виртуальные машины
Чтобы снизить затраты на рабочие нагрузки, можно задать .Interruptible = true
Это помечает экземпляр как точечный и будет использовать излишковую емкость, если она доступна. Важно отметить, что эти экземпляры не всегда доступны и могут быть вытесняются в любое время, то есть они не всегда подходят для вашей рабочей нагрузки.
По умолчанию при установке Interruptible
значения true используются точечные экземпляры с максимальной ценой,равным –1. Это означает, что экземпляр не будет исключен на основе цены. Цена на такой экземпляр будет определяться меньшим из двух значений: текущая цена на экземпляр точечной или стандартной виртуальной машины, но только при условии наличия емкости и соблюдения квоты. Если вы хотите задать настраиваемую максимальную цену, используйте MaxPrice
атрибут на нужном узле или nodearray.
[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
Обратите внимание, что эта функция скрыта, чтобы она не отображалась в пользовательском интерфейсе.
Версию ОС, используемую для выбранного образа, можно получить в любом месте определения кластера:
[[node node]]
[[[configuration]]]
version = ${AmiLookup[MachineImage]}
Интеграция графического интерфейса пользователя
Определение параметров в шаблоне кластера позволяет воспользоваться преимуществами графического интерфейса Azure CycleCloud. Например, при определении параметров для создания графического интерфейса можно использовать следующие атрибуты:
# 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
Атрибуты Label и Description включаются, которые будут отображаться в графическом интерфейсе пользователя, а также необязательный атрибут ParameterType. ParameterType позволяет отображать настраиваемые элементы пользовательского интерфейса. В приведенном выше примере значение Cloud.MachineType отобразит раскрывающийся список, содержащий все доступные типы компьютеров. Другие значения ParameterType:
Тип параметра | Описание |
---|---|
Cloud.MachineType | Отображает раскрывающийся список, содержащий все доступные типы компьютеров. |
Cloud.Credentials | Отображает раскрывающийся список, содержащий все доступные учетные данные. |
Cloud.Region | Отображает раскрывающийся список, содержащий все доступные регионы. |
Поддержка сервера Chef
Azure CycleCloud suports ChefServer.
Создайте файл chefserver.json
и добавьте учетные данные.
ValidationKey
соответствует файлу validation.pem для сервера chef. Кроме того, необходимо подтвердить validation_client_name
, что вы изменили его со значения по умолчанию chef-validator:
{
"AdType" : "Cloud.Locker",
"ValidationKey" : "YOURVALIDATION.PEMHERE",
"ValidationClientName" : "chef-validator",
"Credentials" : "default",
"Location" : "https://mychefserver",
"ChefRepoType" : "chefserver",
"LockerType" : "chefrepo",
"Name" : "chefrepo",
"AccountId" : "default",
"Shared" : false
}
Затем поместите файл в каталог /opt/cycle_server/config/data
. Он будет импортирован автоматически.
Пользовательские изображения в шаблонах
Azure CycleCloud поддерживает пользовательские образы в шаблонах. Укажите идентификатор образа (идентификатор ресурса) непосредственно с ImageId
помощью или добавьте его в реестр образов. Когда образ находится в реестре, сослаться на него с помощью узла Image
или ImageName
на нем. Он появится в раскрывающемся списке изображений на странице создания кластера.
Образы в реестре образов состоят из Package
записи, определяющей содержимое логического образа и одну или несколько соответствующих Artifact
записей, которые указывают фактический идентификатор образа в соответствующем поставщике облачных служб. Например, пользовательский образ с установленным на нем R может состоять из этой записи пакета:
AdType = "Package"
Name = "r_execute"
Version = "2.1.1"
PackageType = "image"
Label = "R"
После добавления этой записи можно указать это изображение, включив либо Image = R
ImageName = r_execute
в шаблон кластера.
Если этот образ существовал в качестве одной виртуальной машины, используемой с идентификатором /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