Развертывание приложений на вычислительных узлах с помощью пакетов приложений пакетной службы

Пакеты приложений позволяют упростить код в решении пакетной службы Azure, а также упростить управление приложениями, выполняемыми задачами. С помощью пакетов приложений вы можете передать несколько версий приложений, выполняемых вашими задачами (в том числе вспомогательные файлы), а также управлять ими, а затем автоматически развернуть одно или несколько таких приложений на вычислительных узлах в пуле.

API-интерфейсы для создания пакетов приложений и управления ими входят в библиотеку .NET для управления пакетной службой. API-интерфейсы для установки пакетов приложений в вычислительном узле входят в библиотеку .NET для пакетной службы. Аналогичные функции доступны в API пакетной службы для других языков программирования.

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

Требования к пакетам приложений

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

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

Примечание

Пулы пакетной службы, созданные до 5 июля 2017 г., не поддерживают пакеты приложений (если только они не были созданы после 10 марта 2016 г. с помощью конфигурации Облачные службы). Компонент "Пакеты приложений", описываемый в этой статье, заменяет компонент "Приложения пакетной службы", доступный в предыдущих версиях службы.

Общие сведения о приложениях и пакетах приложений

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

Каждый пакет приложения — это ZIP-файл, содержащий двоичные файлы приложения и вспомогательные файлы. Поддерживается только формат ZIP.

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

Пакеты приложений можно указывать на уровне пула или задачи.

  • Пакеты приложений уровня пула развертываются на каждом узле в пуле. Приложения развертываются при присоединении узла к пулу, а также при перезагрузке или повторном создании образа.

    Пакеты приложений пула подходят, когда все узлы в пуле выполняют задачи задания. Вы можете указать один или несколько пакетов приложений для развертывания при создании пула. Можно также добавить или обновить пакеты существующего пула. Чтобы установить новые пакеты в существующий пул, необходимо перезапустить его узлы.

  • Пакеты приложений уровня задач развертываются только на вычислительных узлах, на которых запланировано выполнение задач. Развертывание осуществляется перед выполнением командной строки задачи. Если указанный пакет приложения и версия уже находятся на узле, они не развертываются и используется существующий пакет.

    Пакеты приложений уровня задач полезны в средах с общим пулом, где различные задания выполняются в одном пуле, который не удаляется по завершении задания. Если задание содержит меньше задач, чем число узлов в пуле, пакеты приложений задач помогут минимизировать объем передаваемых данных, так как приложение развертывается только на узлах, на которых выполняются задачи.

    Другие сценарии, которые могут воспользоваться пакетами приложений задач, — это задания, в которых выполняется большое приложение, но только для нескольких задач. Например, приложения задач могут быть полезны для этапа предварительной обработки тяжелого веса или задачи слияния.

При использовании пакетов приложений задача запуска пула не должна указывать длинный список отдельных файлов ресурсов для установки на узлах. Вам не нужно вручную управлять несколькими версиями файлов приложения в службе хранилища Azure или на узлах. Кроме того, вам не нужно беспокоиться о создании URL-адресов SAS для предоставления доступа к файлам в учетной записи хранения Azure. Пакетная служба работает со службой хранилища Azure в фоновом режиме, обеспечивая хранение пакетов приложений и их развертывание на вычислительных узлах.

Примечание

Общий размер задачи запуска не должен превышать 32 768 символов, включая файлы ресурсов и переменные среды. Если задача запуска превышает это ограничение, то можно воспользоваться пакетами приложений. Вы также можете создать файл .zip, содержащий файлы ресурсов, отправить файл в качестве большого двоичного объекта в службу хранилища Azure, а затем распакуть его из командной строки начальной задачи.

Передача приложений и управление ими

Управление пакетами приложений в учетной записи пакетной службы осуществляется на портале Azure или с помощью API-интерфейсов для управления пакетной службой. В следующих разделах объясняется, как связать учетную запись хранения. Вы узнаете, как добавлять приложения и пакеты приложений и управлять ими в портал Azure.

Примечание

Несмотря на то, что вы можете определить значения приложения в ресурсе Microsoft.Batch/batchAccountsшаблона ARM, в настоящее время невозможно использовать шаблон ARM для отправки пакетов приложений для использования в учетной записи пакетной службы. Их необходимо отправить в связанную учетную запись хранения, как описано в разделе Добавление нового приложения.

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

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

  1. Выберите окно Предупреждение с сообщением "Для этой учетной записи пакетной службы не настроена учетная запись хранения".
  2. Затем на следующей странице выберите Учетная запись хранения set... (Настройка учетной записи хранения... ).
  3. Щелкните ссылку Выберите учетную запись хранения в разделе Сведения об учетной записи хранения .
  4. Выберите учетную запись хранения, которую вы хотите использовать с этой пакетной учетной записью, в списке на панели Выбор учетной записи хранения .
  5. Затем нажмите кнопку Сохранить в левом верхнем углу страницы.

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

Важно!

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

Пакетная служба использует службу хранилища Azure для хранения пакетов приложений в виде блочных BLOB-объектов. Плата за данные блочного BLOB-объекта взимается в обычном режиме , и размер каждого пакета не может превышать максимальный размер блочного BLOB-объекта. Дополнительные сведения см. в статье Scalability and performance targets for Blob storage (Целевые показатели масштабируемости и производительности для хранилища BLOB-объектов). Для минимизации расходов вам обязательно следует учитывать размер и количество пакетов приложений, периодически удаляя устаревшие пакеты.

Добавление нового приложения

Чтобы создать приложение, добавьте пакет приложения и укажите уникальный идентификатор приложения.

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

Снимок экрана: процесс создания приложения на портале Microsoft Azure.

Введите следующие сведения:

  • Идентификатор приложения: идентификатор нового приложения.
  • Version": версия пакета приложения, который вы отправляете.
  • Пакет приложения: файл .zip, содержащий двоичные файлы приложения и вспомогательные файлы, необходимые для запуска приложения.

Введенные вами идентификатор приложения и версия должны соответствовать следующим требованиям.

  • На узлах Windows идентификатор может содержать любое сочетание буквенно-цифровых знаков, дефисов и символов подчеркивания. На узлах Linux допускаются только буквенно-цифровые знаки и символы подчеркивания.
  • Должно содержать не больше 64 символов.
  • Должен быть уникальным в рамках учетной записи пакетной службы.
  • Регистр сохраняется, но не учитывается.

Когда будете готовы, нажмите кнопку Отправить. После отправки ZIP-файла в учетную запись хранения Azure на портале отобразится уведомление. В зависимости от размера отправляемого файла и скорости сетевого подключения этот процесс может занять некоторое время.

Просмотр текущих приложений

Чтобы просмотреть приложения в учетной записи пакетной службы, в меню навигации слева выберите Приложения.

Снимок экрана: пункт меню

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

  • Пакеты. Количество версий, связанных с этим приложением.
  • Версия по умолчанию. Если применимо, версия приложения, которая устанавливается, если версия не указана при развертывании приложения.
  • Разрешить обновления: определяет возможность обновления и удаления пакетов.

Чтобы просмотреть структуру файлов пакета приложения на вычислительном узле, перейдите к учетной записи пакетной службы на портале Microsoft Azure. Выберите Пулы. Затем выберите пул, содержащий вычислительный узел. Выберите вычислительный узел, на котором установлен пакет приложения, и откройте папку applications.

Просмотр сведений о приложении

Чтобы просмотреть подробные сведения о приложении, выберите его в окне Приложения. Вы можете настроить приложение, выбрав Параметры в меню навигации слева.

  • Разрешить обновления: возможность обновления и удаления пакетов приложений. По умолчанию используется значение Да. Если задано значение Нет, существующие пакеты приложений не удастся обновить или удалить, однако по-прежнему можно добавить новые версии пакетов приложений.
  • Версия по умолчанию: пакет приложения по умолчанию, используемый при развертывании приложения, если версия не указана.
  • Отображаемое имя: понятное имя, которое пакетная служба может использовать для отображения сведений о приложении. Например, это имя можно использовать в пользовательском интерфейсе службы, доступном клиентам через пакетную службу.

Добавление нового пакета приложения

Чтобы добавить версию пакета приложения для существующего приложения, выберите приложение на странице Приложения учетной записи пакетной службы. Нажмите кнопку Добавить.

Как и для нового приложения, укажите версию для нового пакета, загрузите ZIP-файл в поле Пакет приложения, а затем выберите Отправить.

Обновление или удаление пакета приложения

Чтобы обновить или удалить существующий пакет приложения, выберите приложение на странице Приложения учетной записи пакетной службы. Щелкните многоточие в строке пакета приложения, который требуется изменить. Затем выберите действие, которое нужно выполнить.

Снимок экрана: параметры обновления и удаления пакетов приложений в портал Azure.

Если нажать кнопку Обновить, можно отправить новый файл .zip. Этот файл заменяет предыдущий файл .zip, отправленный для этой версии.

Если нажать кнопку Удалить, вам будет предложено подтвердить удаление этой версии. После нажатия кнопки ОК пакетная служба удаляет файл .zip из учетной записи хранения Azure. Удалив версию приложения по умолчанию, вы удалите настройку Версия по умолчанию для этого приложения.

Установка приложений на вычислительных узлах

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

Установка пакетов приложений уровня пула

Чтобы установить пакет приложения на все вычислительные узлы в пуле, укажите ссылки на один или несколько пакетов приложений для пула. Пакеты приложений, указанные для пула, устанавливаются на каждом вычислительном узле, который присоединяется к пулу, и на любом узле, который перезагружается или перезагружается.

В пакетной службе .NET укажите один или несколько CloudPool.ApplicationPackageReferences при создании нового пула или при использовании существующего пула. Класс ApplicationPackageReference определяет идентификатор приложения и версию для установки на вычислительные узлы пула.

// Create the unbound CloudPool
CloudPool myCloudPool =
    batchClient.PoolOperations.CreatePool(
        poolId: "myPool",
        targetDedicatedComputeNodes: 1,
        virtualMachineSize: "standard_d1_v2",
        VirtualMachineConfiguration: new VirtualMachineConfiguration(
            imageReference: new ImageReference(
                                publisher: "MicrosoftWindowsServer",
                                offer: "WindowsServer",
                                sku: "2019-datacenter-core",
                                version: "latest"),
            nodeAgentSkuId: "batch.node.windows amd64");

// Specify the application and version to install on the compute nodes
myCloudPool.ApplicationPackageReferences = new List<ApplicationPackageReference>
{
    new ApplicationPackageReference {
        ApplicationId = "litware",
        Version = "1.1001.2b" }
};

// Commit the pool so that it's created in the Batch service. As the nodes join
// the pool, the specified application package is installed on each.
await myCloudPool.CommitAsync();

Важно!

Если развертывание пакета приложения завершается сбоем, пакетная служба помечает узел непригодным для использования и выполнение задач на этом узле не запланировано. В этом случае следует перезапустить этот узел, чтобы повторно инициировать развертывание пакета. Перезапуск узла также возобновляет планирование задач на узле.

Установка пакетов приложений уровня задач

Как и для пакетов уровня пула, укажите ссылки на один или несколько пакетов приложений для задачи. Если задача запланирована для выполнения на узле, пакет загружается и извлекается непосредственно перед выполнением командной строки задачи. Если указанный пакет и версия уже установлены на узле, пакет не загружается и используется существующий пакет.

Чтобы установить пакет приложений уровня задач, настройте свойство CloudTask.ApplicationPackageReferences задачи.

CloudTask task =
    new CloudTask(
        "litwaretask001",
        "cmd /c %AZ_BATCH_APP_PACKAGE_LITWARE%\\litware.exe -args -here");

task.ApplicationPackageReferences = new List<ApplicationPackageReference>
{
    new ApplicationPackageReference
    {
        ApplicationId = "litware",
        Version = "1.1001.2b"
    }
};

Выполнение установленных приложений

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

На узлах Windows переменная имеет следующий формат:

Windows:
AZ_BATCH_APP_PACKAGE_APPLICATIONID#version

На узлах Linux формат немного отличается. Точки (.), дефисы (-) и символы решетки (#) в переменной среды преобразовываются в символы подчеркивания. Кроме того, сохраняется регистр идентификатора приложения. Пример:

Linux:
AZ_BATCH_APP_PACKAGE_applicationid_version

Свойства APPLICATIONID и version — это значения, соответствующие версии пакета и приложения, указанных при развертывании. Например, если указать, что на узлах Windows должна быть установлена версия 2.7 средства blender , командные строки задачи будут использовать эту переменную среды для доступа к ее файлам:

Windows:
AZ_BATCH_APP_PACKAGE_BLENDER#2.7

На узлах Linux укажите переменную среды в таком формате. Преобразуйте точки (.), дефисы (-) и знаки номера (#) в нижние подчеркивания и соблюдайте регистр идентификатора приложения:

Linux:
AZ_BATCH_APP_PACKAGE_blender_2_7

При передаче пакета приложения можно указать версию по умолчанию для развертывания на вычислительных узлах. Если вы указали версию по умолчанию для приложения, можно опустить суффикс версии при ссылке на приложение. Версию приложения по умолчанию можно указать на портале Azure в окне Приложения, как показано в разделе Передача приложений и управление ими.

Например, если вы задали "2.7" в качестве версии по умолчанию для blender приложений, а задачи ссылаются на следующую переменную среды, то узлы Windows используют версию 2.7:

AZ_BATCH_APP_PACKAGE_BLENDER

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

string taskId = "blendertask01";
string commandLine =
    @"cmd /c %AZ_BATCH_APP_PACKAGE_BLENDER%\blender.exe -args -here";
CloudTask blenderTask = new CloudTask(taskId, commandLine);

Совет

Дополнительные сведения о параметрах среды вычислительных узлов см. в разделе Параметры среды для задач.

Обновление пакетов приложений пула

Если для существующего пула уже выполнена настройка пакета приложения, вы можете указать новый пакет для пула. Это означает следующее:

  • Пакетная служба устанавливает новый указанный пакет на все новые узлы, присоединенные к пулу, и на все имеющиеся узлы, которые были перезагружены или для которых был повторно создан образ.
  • Вычислительные узлы, которые уже находятся в пуле при обновлении ссылок на пакеты, не устанавливают новый пакет приложения автоматически. Для получения нового пакета их необходимо перезагрузить либо заново создать для них образ.
  • Переменные среды, создаваемые при развертывании нового пакета, отражают новые ссылки на пакеты приложения.

В нашем примере для имеющегося пула настроена версия 2.7 приложения blender (в качестве одного из свойств CloudPool.ApplicationPackageReferences). Чтобы обновить узлы в пуле, используя версию 2.76b, укажите новое свойство ApplicationPackageReference с новой версией, а затем подтвердите изменения.

string newVersion = "2.76b";
CloudPool boundPool = await batchClient.PoolOperations.GetPoolAsync("myPool");
boundPool.ApplicationPackageReferences = new List<ApplicationPackageReference>
{
    new ApplicationPackageReference {
        ApplicationId = "blender",
        Version = newVersion }
};
await boundPool.CommitAsync();

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

Список приложений в учетной записи пакетной службы

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

// List the applications and their application packages in the Batch account.
List<ApplicationSummary> applications = await batchClient.ApplicationOperations.ListApplicationSummaries().ToListAsync();
foreach (ApplicationSummary app in applications)
{
    Console.WriteLine("ID: {0} | Display Name: {1}", app.Id, app.DisplayName);

    foreach (string version in app.Versions)
    {
        Console.WriteLine("  {0}", version);
    }
}

Дальнейшие действия