Проекты

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

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

В следующем определении частичного узла узел Docker-registry запускает три спецификации: bind спецификацию из проекта Okta версии 1.3.0, и спецификации core и registry из проекта 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.

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

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

Вы несете ответственность за зеркальное отображение любых дополнительных проектов в хранилище. Cli CycleCloud предлагает методы создания проектов:

cyclecloud project init myproject

И зеркальные проекты для блокировщиков:

cyclecloud project init mylocker

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

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

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

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

Команда проекта создает следующие каталоги:

      myproject
          ├── project.ini
          ├── blobs
          ├── templates
          ├── specs
          │   ├── default
          │     └── cluster-init
          │        ├── scripts
          │        ├── files
          │        └── tests

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

project.ini

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

Параметр Описание
имя Имя проекта. Используйте дефисы для разделения слов, таких как order-66-2018.
этикетка Имя проекта. Используйте длинное имя кластера с пробелами для отображения.
тип Три варианта: scheduler, applicationили <blank>. Этот параметр определяет тип проекта и создает соответствующий шаблон. По умолчанию: application.
версия Формат: x.x.

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

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

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

Примечание.

Хранилища по умолчанию хранятся в файле конфигурации CycleCloud, расположенном в ~/.cycle/config.ini, а не в файле project.ini. Эта настройка позволяет управлять версиями для project.ini.

При загрузке содержимого вашего проекта CycleCloud синхронизирует содержимое cluster-init с целевым хранилищем projects/(project)/(version)/(spec_name)/cluster-init.

Скачивание Blob

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

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

Технические характеристики

При создании проекта определите одну default спецификацию. Используйте 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

Блобсы

Есть два типа больших двоичных объектов: проектные большие двоичные объекты и пользовательские большие двоичные объекты.

Проект Блобс

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

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

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

Разделите несколько объектов BLOB запятой. Можно также указать относительный путь к каталогу объектов BLOB проекта.

Пользовательские блобы

Пользовательские блобы — это двоичные файлы, такие как двоичные файлы Univa Grid Engine, которые автор проекта не может распространять с юридической точки зрения. Эти файлы не упаковываются в проект. Пользователи должны вручную ставить их в шкафчик. Файлы находятся в папке /blobs/my-project/ в хранилище (например, /blobs/my-project/my-blob.tgz). В project.ini не нужно определять BLOBы пользователей.

Чтобы скачать любой blob, используйте jetpack download команду. CycleCloud сначала ищет пользовательский blob и использует blob на уровне проекта, если файл не найден.

Примечание.

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

Указание проектов в шаблоне кластера

Спецификации определяются в шаблоне кластера с помощью [[[cluster-init]]]раздела на узле:

[[node defaults]]
[[[cluster-init my-project:common:1.0.0]]]

[[node scheduler]]
[[[cluster-init my-project:scheduler:1.0.0]]]

[[nodearray execute]]
[[[cluster-init my-project:execute:1.0.0]]]

В этом примере используется определение defaults узла, от которому наследуются все узлы. Узел планировщика получает спецификации common и scheduler, а узлы в массиве узлов выполнения получают спецификации common и execute.

Расположения файлов

Узел загружает файлы 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]

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

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

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

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

[blobs]
  Files=big_file1.tgz

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

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

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

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

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

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

Когда CycleCloud выполняет скрипты в каталоге scripts, он добавляет переменные среды к переменным пути и имени каталогов spec и project.

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

загрузка jetpack

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