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


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

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

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

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

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

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

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

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

Тип ОС Общая папка "Файлы Azure" Контейнер BLOB-объектов Azure Подключение NFS Подключение CIFS
Linux ✔️ ✔️ ✔️ ✔️
Windows ✔️

Примечание.

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

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

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

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

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

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

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

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

Конфигурация подключения и реализация

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

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

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

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

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

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

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

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

Агент пакетной службы реализует подключение в Windows и в Linux по-разному.

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

  • В Windows пакетная служба использует cmdkey для добавления данных учетной записи пакетной службы. Затем пакетная служба выдает команду подключения через 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 общего ресурса в пуле пакетной службы Windows или Linux. В следующей процедуре описана настройка и подключение файловой системы общей папки Azure в пуле пакетной службы.

Внимание

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

Необходимые компоненты

  1. Войдите в подписку Azure, заменив заполнитель идентификатором подписки.

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

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

    Следующий сценарий создает пул с одним центром обработки данных Windows Server 2016, 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 задачи могут получить доступ к подключенным файлам с помощью прямого пути диска, например:

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 к узлу пакетной службы:

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 пакетная служба использует cmdkey для добавления данных учетной записи пакетной службы. Затем пакетная служба выдает команду подключения через 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 найдите и выберите учетную запись пакетной службы с пулом.

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

  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 с именем <file-share-name> S-диска. Сведения о параметрах в примере см. в статье "Подключение общей папки Azure SMB Azure в 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"
            },
        }
    }
}

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

Другим вариантом является использование хранилища BLOB-объектов Azure через BLOBFuse. Для подключения файловой системы BLOB-объектов требуется ключ учетной записи, ключ подписанного URL-адреса (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 для BLOB-объектов Azure и NFS для Файлы Azure.

В следующем примере показана конфигурация подключения файловой системы 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>"
            },
        }
    }
}

Примечание.

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

Следующие шаги