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


Подключение виртуальной файловой системы в пуле пакетной службы

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

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

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

Например, можно использовать распределенный кэш Avere vFXT для поддержки крупномасштабных отрисовок с тысячами одновременных узлов отрисовки, которые обращаются к локальным исходным данным. Кроме того, для данных, уже находящихся в облачно-ориентированных хранилищах для блобов, можно использовать BlobFuse для подключения данных как локальную файловую систему. Файлы Azure предоставляют аналогичный рабочий процесс blobFuse и доступны как в Windows, так и в Linux.

Поддерживаемые конфигурации

Вы можете подключить следующие типы файловых систем:

  • Azure Files
  • Хранилище блочных объектов Azure
  • Сетевая файловая система (NFS), включая кэш Avere vFXT
  • Общая файловая система Интернета (CIFS)

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

Тип ОС Общий ресурс файлов Azure Контейнер блоб-объектов Azure Подключение NFS Подключение CIFS
Linux ✔️ ✔️ ✔️ ✔️
Windows ✔️

Note

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

Требования к сети

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

  • Общие папки Azure требуют, чтобы TCP-порт 445 был открыт для трафика в и из тега службы storage. Дополнительные сведения см. в статье "Использование общей папки Azure с Windows".

  • Контейнеры BLOB-объектов Azure требуют, чтобы TCP-порт 443 был открыт для входящего и исходящего трафика через тэг storage службы. Виртуальные машины (ВМ) должны иметь доступ к https://packages.microsoft.com, чтобы загружать пакеты blobfuse и gpg. В зависимости от конфигурации может потребоваться доступ к другим URL-адресам.

  • Для сетевой файловой системы (NFS) по умолчанию требуется доступ к порту 2049. У вашей конфигурации могут быть другие требования. Для скачивания nfs-common пакетов (для Debian или Ubuntu) виртуальные машины должны иметь доступ к соответствующему диспетчеру пакетов. URL-адрес может отличаться в зависимости от версии ОС. В зависимости от конфигурации может потребоваться доступ к другим URL-адресам.

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

  • Для общей файловой системы Интернета (CIFS) требуется доступ к TCP-порту 445. Для скачивания пакета виртуальные машины должны иметь доступ к соответствующему диспетчеру cifs-utils пакетов. URL-адрес может отличаться в зависимости от версии ОС.

Конфигурация монтажа и реализация

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

Чтобы подключить файловую систему на пуле, создайте объект MountConfiguration, соответствующий вашей виртуальной файловой системе: AzureBlobFileSystemConfiguration, AzureFileShareConfiguration, NfsMountConfiguration или CifsMountConfiguration.

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

  • Имя учетной записи или источник учетной записи хранения.

  • Относительный путь подключения или источник, расположение файловой системы для подключения на вычислительном узле относительно стандартного каталога \fsmounts , доступного через AZ_BATCH_NODE_MOUNTS_DIR.

    Точное расположение каталога \fsmounts зависит от ОС узла. Например, расположение на узле Ubuntu сопоставляется с mnt\batch\tasks\fsmounts.

  • Параметры монтирования или параметры BLOBFuse, описывающие конкретные параметры для монтирования файловой системы.

При создании пула и объекта MountConfiguration вы назначаете объект свойству MountConfigurationList. Монтирование файловой системы происходит при присоединении узла к пулу, перезапуске или переустановке образа.

Агент Batch реализует подключение по-разному на Windows и Linux.

  • В Linux пакетная служба устанавливает пакет cifs-utils. Затем пакетная служба выдает команду подключения.

  • В Windows Batch использует cmdkey для добавления учетных данных вашей учетной записи Batch. Затем Batch выполняет команду монтирования через net use. Рассмотрим пример.

    net use S: \\<storage-account-name>.file.core.windows.net\<fileshare> /u:AZURE\<storage-account-name> <storage-account-key>
    

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

Монтирование файлового хранилища Azure с помощью PowerShell

С помощью Azure PowerShell можно подключить ресурс общего доступа Azure Files в пуле вычислительных узлов Batch для Windows или Linux. В следующей процедуре описано конфигурирование и монтирование файловой системы общего хранилища Azure в пуле служб Batch.

Important

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

Prerequisites

  • Учетная запись Azure с активной подпиской.
  • Установлен Azure PowerShell или используйте Azure Cloud Shell и выберите PowerShell для интерфейса.
  • Существующая учетная запись пакетной службы с связанной учетной записью хранения Azure с общей папкой.
  1. Войдите в подписку Azure, заменив заполнитель идентификатором подписки.

    Connect-AzAccount -Subscription "<subscription-ID>"
    
  2. Получите контекст для вашей учетной записи Batch. Замените <batch-account-name> именем вашей учетной записи Batch.

    $context = Get-AzBatchAccount -AccountName <batch-account-name>
    
  3. Создайте Batch-пул со следующими настройками. Замените заполнители <storage-account-name>, <storage-account-key> и <file-share-name> значениями из учетной записи хранения, связанной с вашей учетной записью Batch. Замените <pool-name> заполнитель именем, которое требуется для пула.

    Следующий сценарий создает пул с одним узлом Windows Server 2016 версии Datacenter, размера Standard_D2_V2, а затем монтирует файловое хранилище Azure на диск S узла.

    $fileShareConfig = New-Object -TypeName "Microsoft.Azure.Commands.Batch.Models.PSAzureFileShareConfiguration" -ArgumentList @("<storage-account-name>", "https://<storage-account-name>.file.core.windows.net/batchfileshare1", "S", "<storage-account-key>")
    
    $mountConfig = New-Object -TypeName "Microsoft.Azure.Commands.Batch.Models.PSMountConfiguration" -ArgumentList @($fileShareConfig)
    
    $imageReference = New-Object -TypeName "Microsoft.Azure.Commands.Batch.Models.PSImageReference" -ArgumentList @("WindowsServer", "MicrosoftWindowsServer", "2016-Datacenter", "latest")
    
    $configuration = New-Object -TypeName "Microsoft.Azure.Commands.Batch.Models.PSVirtualMachineConfiguration" -ArgumentList @($imageReference, "batch.node.windows amd64")
    
    New-AzBatchPool -Id "<pool-name>" -VirtualMachineSize "STANDARD_D2_V2" -VirtualMachineConfiguration $configuration -TargetDedicatedComputeNodes 1 -MountConfiguration @($mountConfig) -BatchContext $context
    
  4. Подключитесь к узлу и проверьте правильность выходного файла.

Доступ к подключенным файлам

Задачи Azure Batch могут получить доступ к смонтированным файлам, используя прямой путь диска, например:

cmd /c "more S:\folder1\out.txt & timeout /t 90 > NULL"

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

Используйте cmdkey для добавления учетных данных. Замените <storage-account-name><storage-account-key> заполнители собственными сведениями.

cmdkey /add:"<storage-account-name>.file.core.windows.net" /user:"Azure\<storage-account-name>" /pass:"<storage-account-key>"

Устранение неполадок монтажа

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

Чтобы получить файлы журнала для отладки, можно использовать API OutputFiles для отправки файлов *.log . Файлы *.log содержат сведения о монтировании файловой системы в местоположении AZ_BATCH_NODE_MOUNTS_DIR. Файлы журнала монтирования имеют формат: <type>-<mountDirOrDrive>.log для каждого монтирования. Например, подключение CIFS в каталоге подключения с именем test содержит файл журнала подключения с именем cifs-test.log.

Ошибки монтирования

Чтобы проверить файлы журнала, относящиеся к подключениям файловой системы, можно подключиться по RDP или SSH к узлу. При попытке подключить общий ресурс файлов Azure к узлу Batch может возникнуть следующее сообщение об ошибке:

Mount Configuration Error | An error was encountered while configuring specified mount(s)
Message: System error (out of memory, cannot fork, no more loop devices)
MountConfigurationPath: S

Если вы получите эту ошибку, подключитесь к узлу по RDP или SSH, чтобы проверить связанные файлы журналов. Агент пакетной обработки реализует монтирование по-разному в Windows и Linux для общих файловых хранилищ Azure. В Linux пакетная служба устанавливает пакет cifs-utils. Затем пакетная служба выдает команду подключения. В Windows Batch использует cmdkey для добавления учетных данных вашей учетной записи Batch. Затем Batch выполняет команду монтирования через net use. Рассмотрим пример.

net use S: \\<storage-account-name>.file.core.windows.net\<fileshare> /u:AZURE\<storage-account-name> <storage-account-key>
  1. Подключитесь к узлу через RDP.

  2. Откройте файл журнала fshare-S.log по адресу D:\batch\tasks\fsmounts.

  3. Просмотрите сообщения об ошибках, например:

    CMDKEY: Credential added successfully.
    System error 86 has occurred.
    
    The specified network password is not correct.
    
  4. Устраняйте неполадки с помощью средства устранения неполадок общих папок Azure.

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

  1. На портале Azure найдите и выберите учетную запись Batch, содержащую ваш пул.

  2. На странице Batch учетной записи выберите пулы в левой области навигации.

  3. На странице "Пулы" выберите имя пула.

  4. На странице пула выберите узлы в левой навигационной панели.

  5. На странице "Узлы" выберите имя узла.

  6. На странице узла выберите Загрузить пакетные журналы.

  7. На панели "Отправить пакетные журналы" выберите "Выбрать контейнер хранилища".

  8. На странице учетных записей хранения выберите учетную запись хранения.

  9. На странице "Контейнеры" выберите или создайте контейнер для отправки файлов в и выберите "Выбрать".

  10. Нажмите кнопку "Начать отправку".

  11. После завершения отправки скачайте файлы и откройте agent-debug.log.

  12. Просмотрите сообщения об ошибках, например:

    ..20210322T113107.448Z.00000000-0000-0000-0000-000000000000.ERROR.agent.mount.filesystems.basefilesystem.basefilesystem.py.run_cmd_persist_output_async.59.2912.MainThread.3580.Mount command failed with exit code: 2, output:
    
    CMDKEY: Credential added successfully.
    
    System error 86 has occurred.
    
    The specified network password is not correct.
    
  13. Устраняйте неполадки с помощью средства устранения неполадок общих папок Azure.

Подключение общей папки вручную с помощью PowerShell

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

  1. Создайте пул без конфигурации подключения. Рассмотрим пример.

    $imageReference = New-Object -TypeName "Microsoft.Azure.Commands.Batch.Models.PSImageReference" -ArgumentList @("WindowsServer", "MicrosoftWindowsServer", "2016-Datacenter", "latest")
    
    $configuration = New-Object -TypeName "Microsoft.Azure.Commands.Batch.Models.PSVirtualMachineConfiguration" -ArgumentList @($imageReference, "batch.node.windows amd64")
    
    New-AzBatchPool -Id "<pool-name>" -VirtualMachineSize "STANDARD_D2_V2" -VirtualMachineConfiguration $configuration -TargetDedicatedComputeNodes 1  -BatchContext $Context
    
  2. Подождите, пока узел будет находиться в состоянии простоя .

  3. На портале Azure найдите и выберите учетную запись хранения с общей папкой.

  4. В меню страницы учетной записи хранения выберите общие папки в области навигации слева.

  5. На странице файловых ресурсов выберите файловый ресурс, который вы хотите подключить.

  6. На странице общего доступа выберите Подключить.

  7. В области "Подключиться" выберите вкладку "Windows ".

  8. В поле "Буква диска" введите диск, который вы хотите использовать. Значение по умолчанию — Z.

  9. Для метода проверки подлинности выберите способ подключения к общей папке.

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

  11. Подключитесь к узлу через RDP.

  12. Выполните команду, скопированную для монтирования общей папки.

  13. Обратите внимание на сообщения об ошибках в выходных данных. Используйте эти сведения для устранения неполадок, связанных с сетью.

Примеры конфигураций подключения

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

Общий ресурс файлов Azure

Файлы Azure — это стандартное предложение облачной файловой системы Azure. Следующая конфигурация монтирует общий ресурс Azure Files с именем <file-share-name> на диск S. Сведения о параметрах в примере см. в статье "Подключение общей папки Azure SMB в Windows" или создание общей папки Azure NFS и ее подключение на виртуальную машину Linux с помощью портала Azure.

new PoolAddParameter
{
    Id = poolId,
    MountConfiguration = new[]
    {
        new MountConfiguration
        {
            AzureFileShareConfiguration = new AzureFileShareConfiguration
            {
                AccountName = "<storage-account-name>",
                AzureFileUrl = "https://<storage-account-name>.file.core.windows.net/<file-share-name>",
                AccountKey = "<storage-account-key>",
                RelativeMountPath = "S",
                MountOptions = "-o vers=3.0,dir_mode=0777,file_mode=0777,sec=ntlmssp"
            },
        }
    }
}

Контейнер блоб-объектов Azure

Другим вариантом является использование хранилища объектов Blob Azure через BlobFuse. Для монтирования файловой системы Blob требуется ключ учетной записи, ключ SAS или управляемое удостоверение с доступом к вашей учетной записи хранения.

Сведения о получении этих ключей или удостоверений см. в следующих статьях:

Следующая конфигурация подключает файловую систему BLOB-объектов с параметрами BLOBFuse. В целях иллюстрации в примере показано AccountKeySasKey и IdentityReference, но можно на самом деле указать только один из этих методов.

new PoolAddParameter
{
    Id = poolId,
    MountConfiguration = new[]
    {
        new MountConfiguration
        {
            AzureBlobFileSystemConfiguration = new AzureBlobFileSystemConfiguration
            {
                AccountName = "<storage-account-name>",
                ContainerName = "<container-name>",
                // Use only one of the following three lines:
                AccountKey = "<storage-account-key>",
                SasKey = "<sas-key>",
                IdentityReference = new ComputeNodeIdentityReference("/subscriptions/<subscription>/resourceGroups/<resource-group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<identity-name>"),
                RelativeMountPath = "<relative-mount-path>",
                BlobfuseOptions = "-o attr_timeout=240 -o entry_timeout=240 -o negative_timeout=120 "
            },
        }
    }
}

Чтобы получить доступ по умолчанию к подключенному каталогу BLOBFuse, выполните задачу от имени администратора. BlobFuse подключает каталог в пользовательском пространстве и при создании пула подключает каталог как корневой. В Linux все задачи администратора являются корневыми. Справочная страница FUSE описывает все параметры модуля FUSE.

Дополнительные сведения и советы по использованию BLOBFuse см. в следующих ссылках:

NFS

Общие папки NFS можно подключить к узлам пула, чтобы пакетная служба могла получить доступ к традиционным файловым системам. Настройка может быть одним сервером NFS, развернутым в облаке, или локальным сервером NFS, к которому обращаются через виртуальную сеть. Подключения NFS поддерживают Avere vFXT, распределенный кэш в памяти для задач высокопроизводительных вычислений (HPC). Подключения NFS также поддерживают другие интерфейсы, которые соответствуют стандартам NFS, такие как NFS для Azure Blob и NFS для Azure Files.

В следующем примере показана конфигурация подключения файловой системы NFS:

new PoolAddParameter
{
    Id = poolId,
    MountConfiguration = new[]
    {
        new MountConfiguration
        {
            NfsMountConfiguration = new NFSMountConfiguration
            {
                Source = "<source>",
                RelativeMountPath = "<relative-mount-path>",
                MountOptions = "options ver=3.0"
            },
        }
    }
}

CIFS

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

В следующем примере показана конфигурация подключения файлов CIFS.

new PoolAddParameter
{
    Id = poolId,
    MountConfiguration = new[]
    {
        new MountConfiguration
        {
            CifsMountConfiguration = new CIFSMountConfiguration
            {
                Username = "<storage-account-name>",
                RelativeMountPath = "<relative-mount-path>",
                Source = "<source>",
                Password = "<storage-account-key>",
                MountOptions = "-o vers=3.0,dir_mode=0777,file_mode=0777,serverino,domain=<domain-name>"
            },
        }
    }
}

Note

Ищете пример использования PowerShell, а не C#? Вы можете найти еще один отличный пример: подключение файла Azure к пулу пакетной службы Azure.

Дальнейшие шаги