Поделиться через


Шаблоны кластеров

Azure CycleCloud использует шаблоны для определения конфигураций кластера. CycleCloud включает множество шаблонов по умолчанию. Полный список поддерживаемых шаблонов см. в разделе GitHub. Можно создать новые шаблоны или настроить существующие. Например, можно настроить существующий шаблон, чтобы воспользоваться преимуществами точечных виртуальных машин или добавить 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-файл, содержащий параметры для разработки и файла свойств, содержащего значения для рабочей среды.

Примечание.

Суффикс имени файла параметров важен! Если вы используете 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, используйте файл prod-params.properties для перезаписи значений, указанных внутри самого файла шаблона.

Примечание.

Имена параметров могут содержать любые буквы, цифры и символы подчеркивания.

Ссылки на параметры в шаблоне могут принимать одну из двух форм:

$param: использует значение одного параметра с именем param.

${expr}: оценивается expr в контексте всех параметров, что позволяет вычислять динамические значения. Рассмотрим пример.

Attribute = ${(a > b ? a : b) * 100}

Это выражение берёт большее из двух параметров, a и b, и умножает его на 100. Выражение интерпретируется и вычисляется в соответствии со спецификацией языка ClassAd.

Если ссылка на параметр существует сама по себе, используется значение параметра, которое поддерживает типы данных, отличные от строковых, например, логические, целые числа и вложенные структуры, такие как списки. Однако если ссылка внедрена в другой текст, его значение преобразуется и включается в строку. Например, предположим param, когда оно определяется как 456 и упоминается в двух местах.

  • Attribute1 = $param
  • Атрибут2 = 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 позволяет выбрать спецификации проекта инициализации кластера при создании нового кластера. Настройте спецификации проекта в шаблоне кластера:

[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 атрибут в нужном узле или массиве узлов.

[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

Вы также можете получить версию ОС выбранного образа и использовать её для другой конфигурации, задав параметр, чьим значением будет таблица сопоставления значений.

[[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) Отображает раскрывающийся список, содержащий все доступные типы компьютеров.
Облако.Аутентификационные данные Отображает раскрывающийся список, содержащий все доступные учетные данные.
Облако.Регион Отображает раскрывающийся список, содержащий все доступные регионы.

Пользовательские изображения в шаблонах

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).