Проекты

Проект — это коллекция ресурсов, определяющих конфигурации узлов. Проекты содержат спецификации. При запуске узла он настраивается путем обработки и выполнения последовательности спецификаций.

Azure CycleCloud использует проекты для управления кластеризованными приложениями, такими как планировщики пакетной службы. В CycleCloud HPCPack проект представляет собой hn спецификацию и cn спецификацию, которая определяет конфигурации и рецепты для головного узла и вычислительного узла HPCPack.

Ниже приведено определение частичного узла. Узел docker-registry будет запускать три спецификации: привязать спецификацию из проекта okta версии 1.3.0, а также основные спецификации и спецификации реестра из проекта Docker версии 2.0.0:

[[node docker-registry]]
    Locker = base-storage
    [[[cluster-init okta:bind:1.3.0]]]
    [[[cluster-init docker:core:2.0.0]]]
    [[[cluster-init docker:registry:2.0.0]]]

Конечный тег — номер версии проекта.

[[[cluster-init <project>:<spec>:<project version>]]]

Хранилище — это ссылка на контейнер учетной записи хранения и учетные данные. Узлы имеют хранилище по умолчанию, поэтому этот атрибут не требуется строго.

Azure CycleCloud использует сокращенный вариант для учетных записей хранения, поэтому https://mystorage.blob.core.windows.net/mycontainer его можно записать как az://mystorage/mycontainer.

Узел скачивает каждый проект, на который он ссылается из шкафчика, с помощью средства pogo:

pogo get az://mystorage/mycontainer/projects/okta/1.3.0/bind

Если проект определен на узле, но не существует в ожидаемом расположении хранилища, узел будет сообщать в Software Installation Failure CycleCloud.

CycleCloud имеет внутренние проекты, которые выполняются по умолчанию на всех узлах для выполнения специальной обработки томов и сети и настройки связи с CycleCloud. Эти внутренние проекты автоматически отражаются в хранилище.

Пользователь отвечает за зеркальное отображение дополнительных проектов в хранилище. Интерфейс командной строки CycleCloud содержит методы создания проектов:

cyclecloud project init myproject

и зеркальное отображение:

cyclecloud project init mylocker

проекты для блокировщиков.

Спецификации состоят из скриптов Python, оболочки или PowerShell.

Создание нового проекта

Чтобы создать проект, используйте команду cyclecloud project init myprojectCLI, где myproject имя создаваемого проекта. При этом будет создан проект с именем myproject с одной спецификацией с именем default, которую можно изменить. Дерево каталогов будет создано со скелетными файлами, которые будут изменены, чтобы включить собственную информацию.

Структура каталогов

Следующие каталоги будут созданы командой проекта:

      \myproject
          ├── project.ini
          ├── blobs
          ├── templates
          ├── specs
          │   ├── default
          │     └── cluster-init
          │        ├── scripts
          │        ├── files
          │        └── tests
          │     └── chef
          │         ├── site-cookbooks
          │         ├── data_bag
          │         └── roles

Каталог шаблонов будет содержать шаблоны кластера, а спецификации будут содержать спецификации , определяющие проект. спецификация содержит два подкаталога: cluster-init и custom chef. Cluster-init содержит каталоги, которые имеют особое значение, такие как каталог сценариев (содержит скрипты, выполняемые в лексикографическом порядке на узле), файлы (необработанные файлы данных, которые будут помещены на узел) и тесты (содержат тесты , выполняемые при запуске кластера в тестовом режиме).

В подкаталоге настраиваемого шеф-повара есть три каталога: поваренные книги (для определений повара), data_bags (определения баз данных) и роли (файлы определения ролей шеф-повара).

project.ini

project.ini — это файл, содержащий все метаданные проекта. Он может содержать:

Параметр Описание
name Имя проекта. Слова должны быть разделены дефисами, например order-66-2018
метка Имя проекта. Длинное имя (с пробелами) кластера для отображения.
тип Три варианта: планировщик, приложение, <пустое>. Определяет тип проекта и создает соответствующий шаблон. По умолчанию: приложение
version Формат: x.x.x

Запирающиеся шкафчики

Содержимое проекта хранится в хранилище. Содержимое проекта можно передать в любой шкафчик, определенный в установке CycleCloud, с помощью команды cyclecloud project upload (locker), где (locker) — это имя облачного хранилища в вашей установке CycleCloud. Этот шкафчик будет установлен в качестве целевого объекта по умолчанию. Кроме того, вы можете увидеть, какие блокировщики доступны для вас с помощью команды cyclecloud locker list. Подробные сведения о конкретном хранилище можно просмотреть с помощью cyclecloud locker show (locker).

При добавлении нескольких шкафчиков можно задать значение по умолчанию cyclecloud project default_target (locker), а затем просто запустить cyclecloud project upload. Вы также можете задать глобальный хранилище по умолчанию, к которому можно предоставить общий доступ для проектов с помощью команды cyclecloud project default locker (locker) -global.

Примечание

Блокировщики по умолчанию будут храниться в файле конфигурации cyclecloud (обычно находится в ~/.cycle/config.ini), а не в project.ini. Это позволяет управлять версиями project.ini.

Отправка содержимого проекта запакует каталоги chef и синхронизирует и chef, и кластер инициализацию с целевым хранилищем. Они будут храниться по адресу:

  • (locker)/projects/(project)/(version)/(spec_name)/cluster-init
  • (locker)/projects/(project)/(version)/(spec_name)/chef

Скачивание BLOB-объектов

Используется project download для скачивания всех больших двоичных объектов, на которые ссылается project.ini, в локальный каталог больших двоичных объектов. Команда использует [locker] этот параметр и попытается скачать большие двоичные объекты, перечисленные в project.ini из хранилища в локальное хранилище. Если не удается найти файлы, возвращается ошибка.

Настройка проекта

Спецификации

При создании проекта определяется одна спецификация по умолчанию. Вы можете добавить дополнительные спецификации в проект с помощью cyclecloud project add_spec команды.

Управление версиями

По умолчанию все проекты имеют версию 1.0.0. Настраиваемую версию можно задать при разработке и развертывании проектов, задав version=x.y.z в файлеproject.ini .

Например, если "locker_url" был "az://my-account/my-container/projects", проект был назван "Order66", версия была "1.6.9", а спецификация — "default", url-адрес будет следующим:

  • az://my-account/my-container/projects/Order66/1.6.9/default/cluster-init
  • az://my-account/my-container/projects/Order66/1.6.9/default/chef

BLOB-объекты

Существует два типа больших двоичных объектов: blob-объекты проекта и пользовательские BLOB-объекты.

Blob-объекты project

Blob-объекты project — это двоичные файлы, предоставляемые автором проекта с предположением, что они могут быть распределены (т. е. двоичный файл для проекта открытый код, который вы законно можете распространить). Blob-объекты project попадают в каталог "BLOB-объекты" проекта, и при отправке в хранилище они будут находиться в папке /project/blobs.

Чтобы добавить большие двоичные объекты в проекты, добавьте файлы в project.ini:

[[blobs optionalname]]
  Files = projectblob1.tgz, projectblob2.tgz, projectblob3.tgz

Несколько больших двоичных объектов могут быть разделены запятыми. Можно также указать относительный путь к каталогу BLOB-объектов проекта.

Blob-объекты пользователей

Blob-объекты пользователей — это двоичные файлы, которые автор проекта не может законно распространить, например двоичные файлы UGE. Эти файлы не упаковываются вместе с проектом, но вместо этого должны быть поставлены в хранилище вручную. Файлы будут расположены в папке /blobs/my-project/my-blob.tgz. Пользовательские BLOB-объекты не нужно определять в project.ini.

Чтобы скачать любой большой двоичный объект, используйте jetpack download команду из интерфейса командной jetpack_download строки или ресурса Chef. CycleCloud сначала будет искать большой двоичный объект пользователя. Если этот файл не найден, будет использоваться большой двоичный объект уровня проекта.

Примечание

Можно переопределить большой двоичный объект проекта с пользовательским BLOB-объектом с тем же именем.

Задание проекта в шаблоне кластера

Синтаксис проекта позволяет указать несколько спецификаций на узлах. Чтобы определить проект, используйте следующее:

[[[cluster-init myspec]]]
  Project = myproject # inferred from name
  Version = x.y.z
  Spec = default  # (alternatively, you can name your own spec to be used here)
  Locker = default  # (optional, will use default locker for node)

Примечание

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

Можно также применить несколько спецификаций к заданному узлу следующим образом:

[[node scheduler]]
  [[[cluster-init myspec]]]
  Project = myproject
  Version = x.y.z
  Spec = default  # (alternatively, you can name your own spec to be used here)
  Locker = default  # (optional, will use default locker for node)

[[[cluster-init otherspec]]]
Project = otherproject
Version = a.b.c
Spec = otherspec  # (optional)

Разделив имя проекта, имя спецификации и версию с двоеточиями, CycleCloud может автоматически проанализировать эти значения в соответствующие Project/Version/Spec параметры:

[[node scheduler]]
  AdditionalClusterInitSpecs = $ClusterInitSpecs
  [[[cluster-init myproject:myspec:x.y.z]]]
  [[[cluster-init otherproject:otherspec:a.b.c]]]

Спецификации также могут наследоваться между узлами. Например, можно поделиться общей спецификацией между всеми узлами, а затем запустить пользовательскую спецификацию на узле планировщика:

[[node defaults]]
[[[cluster-init my-project:common:1.0.0]]]
Order = 2 # optional
[[node scheduler]]
[[[cluster-init my-project:scheduler:1.0.0]]]
Order = 1 # optional

[[nodearray execute]]
[[[cluster-init my-project:execute:1.0.0]]]
   Order = 1 # optional

Это будет применять как спецификации common , так и scheduler спецификации к узлу планировщика, применяя common только спецификации и execute спецификации к выполнению nodearray.

По умолчанию спецификации будут выполняться в том порядке, в котором они отображаются в шаблоне, сначала выполняя унаследованные спецификации. Order — необязательный целочисленный набор по умолчанию 1000, который можно использовать для определения порядка спецификаций.

Если в определении [[[cluster-init]]] указано только одно имя, оно будет считаться именем спецификации. Пример:

[[[cluster-init myspec]]]
Project = myproject
Version = 1.0.0

— допустимая настройка спецификации, в которой Spec=myspec подразумевается имя.

список запуска.

Список выполнения можно указать на уровне проекта или спецификации в project.ini:

[spec scheduler]
run_list = role[a], recipe[b]

Если узел содержит спецификацию "планировщик", run_list определен автоматически добавляется в любой ранее определенный список выполнения. Например, если мой run_list определен в разделе [configuration]run_list = recipe[test], окончательный список выполнения будет run_list = recipe[cyclecloud], recipe[test], role[a], recipe[b], recipe[cluster_init].

Вы также можете перезаписать список выполнения на уровне спецификации на узле. Это заменит все run_list, включенные в project.ini. Например, если мы изменили определение узла следующим образом:

[cluster-init test-project:scheduler:1.0.0]
run_list = recipe[different-test]

Список выполнения, определенный в проекте, будет игнорироваться, и вместо этого будет использоваться приведенный выше список. Последний список выполнения на узле будет иметь следующий вид run_list = recipe[cyclecloud], recipe[test], recipe[different-test], recipe[cluster_init].

Примечание

списки runlist относятся к chef и не применяются в противном случае.

Местоположение файлов

Zippped chef-файлы будут загружены на начальном этапе запуска узла. Они скачиваются в $JETPACK_HOME/system/chef/tarballs и распакуются в файл $JETPACK_HOME/system/chef/chef-repo/и используются при конвергенции узла.

Примечание

Чтобы запустить пользовательские куки, необходимо указать их в run_list для узла.

Файлы cluster-init будут загружены в /mnt/cluster-init/(project)/(spec)/. Для my-project и my-spec вы увидите скрипты, файлы и тесты, расположенные в папке /mnt/cluster-init/my-project/my-spec.

Синхронизация проектов

Проекты CycleCloud можно синхронизировать из зеркал в локальное облачное хранилище кластера. Задайте атрибут SourceLocker для [cluster-init] раздела в шаблоне. Имя указанного хранилище будет использоваться в качестве источника проекта, а содержимое будет синхронизировано с хранилищем при запуске кластера. Вы также можете использовать имя шкафчика в качестве первой части имени cluster-init. Например, если исходный хранилище было "cyclecloud", следующие два определения одинаковы:

[cluster-init my-project:my-spect:1.2.3]
  SourceLocker=cyclecloud

[cluster-init cyclecloud/my-proect:my-spec:1.2.3]

Хранилище больших файлов

Проекты поддерживают большие файлы. На верхнем уровне созданного проекта вы увидите каталог больших двоичных объектов для больших файлов (BLOB-объектов). Обратите внимание, что большие двоичные объекты, размещенные в этом каталоге, имеют определенную цель и будут действовать не так, как элементы в каталоге files.

Элементы в каталоге "BLOB-объекты" являются спецификациями и версиями независимо: все, что в "БОЛЬШИХ двоичных объектах" можно совместно использовать между спецификациями или версиями проекта. Например, установщик программы, изменяющейся редко, можно хранить в больших двоичных объектах и ссылаться на нее в project.ini. При итерации по версиям проекта один файл остается неизменным и копируется только в облачное хранилище один раз, что экономит затраты на передачу и хранение.

Чтобы добавить большой двоичный объект, просто поместите файл в каталог "BLOB-объекты" и измените project.ini для ссылки на этот файл:

[blobs]
  Files=big_file1.tgz

При использовании project upload команды все BLOB-объекты, на которые ссылается project.ini, будут переданы в облачное хранилище.

Файлы журнала

Файлы журналов, созданные при выполнении cluster-init, находятся в файле $JETPACK_HOME/logs/cluster-init/(project)/(spec).

Запуск файлов

При успешном выполнении скрипта cluster-init файл помещается в файл /mnt/cluster-init/.run/(project)/(spec), чтобы убедиться, что он не выполняется повторно на последующем конвергенте. Если вы хотите снова запустить скрипт, удалите соответствующий файл в этом каталоге.

Каталоги скриптов

Когда CycleCloud выполняет скрипты в каталоге скриптов, он добавит переменные среды в путь и имя спецификации и каталогов проекта:

CYCLECLOUD_PROJECT_NAME
CYCLECLOUD_PROJECT_PATH
CYCLECLOUD_SPEC_NAME
CYCLECLOUD_SPEC_PATH

В Linux проект с именем test-project со спецификацией default будет иметь пути следующим образом:

CYCLECLOUD_PROJECT_NAME = test-project
CYCLECLOUD_PROJECT_PATH = /mnt/cluster-init/test-project
CYCLECLOUD_SPEC_NAME = default
CYCLECLOUD_SPEC_PATH = /mnt/cluster-init/test-project/default

Выполнение только скриптов

Чтобы запустить только скрипты cluster-init, выполните следующие действия.

jetpack converge --cluster-init

Выходные данные команды будут отправляться в STDOUT, а также jetpack.log. Каждый скрипт также будет иметь вход в журнал выходных данных:

      $JETPACK_HOME/logs/cluster-init/(project)/(spec)/scripts/(script.sh).out

Настраиваемые шеф-повара и составные спецификации

В каждой спецификации есть каталог шеф-повара. Перед конвергентным получением каждой спецификации будет ненатаризовано и извлечено в локальный репозиторий chef-repo, заменяя все существующие книги, роли и контейнеры данных одинаковыми именами. Это делается в порядке определения спецификаций, поэтому в случае столкновения именования последний определенный спецификация всегда выиграет.

jetpack download

Чтобы скачать большой двоичный объект в скрипте cluster-init, используйте команду jetpack download (filename) , чтобы извлечь его из каталога BLOB-объектов. Выполнение этой команды из скрипта cluster-init определяет проект и базовый URL-адрес. Чтобы использовать его в контексте, отличном от cluster-init, необходимо указать проект (дополнительные сведения см. в разделе --help).

Для пользователей jetpack_download шеф-повара была создана LWRP:

jetpack_download "big-file1.tgz" do
  project "my-project"
  end

В chef расположение загрузки по умолчанию — #{node[:jetpack][:downloads]}. Чтобы изменить назначение файла, используйте следующее:

jetpack_download "foo.tgz" do
  project "my-project"
  dest "/tmp/download.tgz"
end

При использовании в chef необходимо указать проект.