Partilhar via


Montar um sistema de ficheiros virtual num conjunto de lotes

O Lote do Azure dá suporte à montagem de armazenamento em nuvem ou a um sistema de arquivos externo em nós de computação do Windows ou Linux em pools de lotes. Quando um nó de computação se junta ao pool, o sistema de arquivos virtual é montado e atua como uma unidade local nesse nó. Este artigo mostra como montar um sistema de arquivos virtual em um pool de nós de computação usando a Biblioteca de Gerenciamento de Lote para .NET.

Montar o sistema de arquivos no pool torna o acesso aos dados mais fácil e eficiente do que exigir tarefas para obter seus próprios dados de um grande conjunto de dados compartilhados. Considere um cenário em que várias tarefas precisam de acesso a um conjunto comum de dados, como renderizar um filme. Cada tarefa renderiza um ou mais quadros de uma só vez a partir dos arquivos de cena. Ao montar uma unidade que contém os arquivos de cena, é mais fácil para cada nó de computação acessar os dados compartilhados.

Além disso, você pode escolher o sistema de arquivos subjacente para atender aos requisitos de desempenho, throughout e operações de entrada/saída por segundo (IOPS). Você pode dimensionar o sistema de arquivos de forma independente com base no número de nós de computação que acessam simultaneamente os dados.

Por exemplo, você pode usar um cache distribuído na memória do Avere vFXT para oferecer suporte a renderizações em grande escala de filme com milhares de nós de renderização simultâneos que acessam dados de origem locais. Ou, para dados que já estão no armazenamento de blob baseado em nuvem, você pode usar BlobFuse para montar os dados como um sistema de arquivos local. Os Arquivos do Azure fornecem um fluxo de trabalho semelhante ao do BlobFuse e estão disponíveis no Windows e no Linux.

Configurações suportadas

Você pode montar os seguintes tipos de sistemas de arquivos:

  • Ficheiros do Azure
  • Armazenamento de Blobs do Azure
  • Network File System (NFS), incluindo um cache Avere vFXT
  • Sistema comum de arquivos da Internet (CIFS)

O Batch suporta os seguintes tipos de sistema de arquivos virtuais para agentes de nó que são produzidos para seus respetivos editores e ofertas.

Tipo de SO Compartilhamento de arquivos do Azure Contêiner de Blob do Azure Suporte NFS Montagem CIFS
Linux ✔️ ✔️ ✔️ ✔️
Windows ✔️

Nota

A montagem de um sistema de arquivos virtual não é suportada em pools de lotes criados antes de 8 de agosto de 2019.

Requisitos de rede

Ao usar montagens de arquivos virtuais com pools de lotes em uma rede virtual, lembre-se dos seguintes requisitos e certifique-se de que nenhum tráfego necessário seja bloqueado. Para obter mais informações, consulte Pools de lotes em uma rede virtual.

  • Os compartilhamentos de Arquivos do Azure exigem que a porta TCP 445 esteja aberta para o tráfego de e para a storage marca de serviço. Para obter mais informações, consulte Usar um compartilhamento de arquivos do Azure com o Windows.

  • Os contêineres de Blob do Azure exigem que a porta TCP 443 esteja aberta para o tráfego de e para a storage marca de serviço. As máquinas virtuais (VMs) devem ter acesso para https://packages.microsoft.com baixar os blobfuse pacotes e gpg . Dependendo da sua configuração, você pode precisar de acesso a outros URLs.

  • O Network File System (NFS) requer acesso à porta 2049 por padrão. Sua configuração pode ter outros requisitos. As VMs devem ter acesso ao gerenciador de pacotes apropriado para baixar os nfs-common pacotes (para Debian ou Ubuntu). O URL pode variar de acordo com a versão do seu sistema operacional. Dependendo da sua configuração, você também pode precisar de acesso a outras URLs.

    A montagem do Blob do Azure ou dos Arquivos do Azure por meio de NFS pode ter mais requisitos de rede. Por exemplo, seus nós de computação podem precisar usar a mesma sub-rede de rede virtual que a conta de armazenamento.

  • Common Internet File System (CIFS) requer acesso à porta TCP 445. As VMs devem ter acesso ao gerenciador de pacotes apropriado para baixar o cifs-utils pacote. O URL pode variar de acordo com a versão do seu sistema operacional.

Configuração e implementação de montagem

A montagem de um sistema de arquivos virtual em um pool torna o sistema de arquivos disponível para cada nó de computação no pool. A configuração para o sistema de arquivos acontece quando um nó de computação se junta a um pool, é reiniciado ou é recriado.

Para montar um sistema de arquivos em um pool, crie um objeto MountConfiguration que corresponda ao seu sistema de arquivos virtual: AzureBlobFileSystemConfiguration, AzureFileShareConfiguration, NfsMountConfigurationou CifsMountConfiguration.

Todos os objetos de configuração de montagem precisam dos seguintes parâmetros básicos. Algumas configurações de montagem têm parâmetros específicos para o sistema de arquivos específico, que os exemplos de código apresentam com mais detalhes.

  • Nome da conta ou origem da conta de armazenamento.

  • Caminho de montagem relativo ou origem, o local do sistema de arquivos a ser montado no nó de computação, relativo ao diretório \fsmounts padrão acessível via AZ_BATCH_NODE_MOUNTS_DIR.

    O local exato do diretório \fsmounts varia dependendo do sistema operacional do nó. Por exemplo, o local em um nó do Ubuntu mapeia para mnt\batch\tasks\fsmounts.

  • Opções de montagem ou opções de BlobFuse que descrevem parâmetros específicos para montar um sistema de arquivos.

Ao criar o pool e o MountConfiguration objeto, você atribui o objeto à MountConfigurationList propriedade. A montagem para o sistema de arquivos acontece quando um nó se junta ao pool, é reiniciado ou é recriado.

O agente Batch implementa a montagem de forma diferente no Windows e Linux.

  • No Linux, o Batch instala o pacote cifs-utils. Em seguida, Batch emite o comando mount.

  • No Windows, o Batch usa cmdkey para adicionar suas credenciais de conta do Batch. Em seguida, Batch emite o comando mount através net usedo . Por exemplo:

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

A montagem do sistema de arquivos cria uma variável AZ_BATCH_NODE_MOUNTS_DIRde ambiente , que aponta para o local do sistema de arquivos montado e dos arquivos de log. Você pode usar os arquivos de log para solução de problemas e depuração.

Montar um compartilhamento de Arquivos do Azure com o PowerShell

Você pode usar o Azure PowerShell para montar um compartilhamento de Arquivos do Azure em um pool de lotes do Windows ou Linux. O procedimento a seguir orienta você na configuração e montagem de um sistema de arquivos de compartilhamento de arquivos do Azure em um pool de lotes.

Importante

O número máximo de sistemas de arquivos montados em um pool é 10. Para obter detalhes e outros limites, consulte Cotas e limites de serviço em lote.

Pré-requisitos

  • Uma conta do Azure com uma subscrição ativa.
  • Azure PowerShell instalado ou use o Azure Cloud Shell e selecione PowerShell para a interface.
  • Uma conta em lote existente com uma conta de Armazenamento do Azure vinculada que tenha um compartilhamento de arquivos.
  1. Entre em sua assinatura do Azure, substituindo o espaço reservado pela sua ID de assinatura.

    Connect-AzAccount -Subscription "<subscription-ID>"
    
  2. Obtenha o contexto da sua conta Batch. Substitua o espaço reservado pelo nome da <batch-account-name> conta do lote.

    $context = Get-AzBatchAccount -AccountName <batch-account-name>
    
  3. Crie um pool de lotes com as seguintes configurações. Substitua os <storage-account-name> espaços reservados , <storage-account-key>e pelos <file-share-name> valores da conta de armazenamento vinculada à sua conta de lote. Substitua o espaço reservado <pool-name> pelo nome desejado para o pool.

    O script a seguir cria um pool com um Datacenter do Windows Server 2016, nó de tamanho Standard_D2_V2 e, em seguida, monta o compartilhamento de arquivos do Azure na unidade S do nó.

    $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. Conecte-se ao nó e verifique se o arquivo de saída está correto.

Aceda aos ficheiros montados

As tarefas do Lote do Azure podem acessar os arquivos montados usando o caminho direto da unidade, por exemplo:

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

O agente do Lote do Azure concede acesso apenas para tarefas do Lote do Azure. Se você usar o protocolo RDP (Remote Desktop Protocol) para se conectar ao nó, sua conta de usuário não terá acesso automático à unidade de montagem. Quando você se conecta ao nó através de RDP, você deve adicionar credenciais para a conta de armazenamento para acessar a unidade S diretamente.

Use cmdkey para adicionar as credenciais. Substitua os espaços reservados e <storage-account-key> por <storage-account-name> suas próprias informações.

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

Solucionar problemas de montagem

Se uma configuração de montagem falhar, o nó de computação falhará e o estado do nó será definido como Inutilizável. Para diagnosticar uma falha de configuração de montagem, inspecione a propriedade ComputeNodeError para obter detalhes sobre o erro.

Para obter arquivos de log para depuração, você pode usar a API OutputFiles para carregar os arquivos *.log . Os arquivos *.log contêm informações sobre a montagem do AZ_BATCH_NODE_MOUNTS_DIR sistema de arquivos no local. Os arquivos de log de montagem têm o formato: <type-mountDirOrDrive><>.log para cada montagem. Por exemplo, uma montagem CIFS em um diretório de montagem chamado test tem um arquivo de log de montagem chamado: cifs-test.log.

Investigar erros de montagem

Você pode RDP ou SSH para o nó para verificar os arquivos de log pertencentes às montagens do sistema de arquivos. A seguinte mensagem de erro de exemplo é possível quando você tenta montar um compartilhamento de arquivos do Azure em um nó 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

Se você receber esse erro, RDP ou SSH para o nó para verificar os arquivos de log relacionados. O agente Batch implementa a montagem de forma diferente em compartilhamentos de arquivos do Windows e Linux para Azure. No Linux, o Batch instala o pacote cifs-utils. Em seguida, Batch emite o comando mount. No Windows, o Batch usa cmdkey para adicionar suas credenciais de conta do Batch. Em seguida, Batch emite o comando mount através net usedo . Por exemplo:

net use S: \\<storage-account-name>.file.core.windows.net\<fileshare> /u:AZURE\<storage-account-name> <storage-account-key>
  1. Conecte-se ao nó pelo RDP.

  2. Abra o arquivo de log fshare-S.log, em D:\batch\tasks\fsmounts.

  3. Analise as mensagens de erro, por exemplo:

    CMDKEY: Credential added successfully.
    System error 86 has occurred.
    
    The specified network password is not correct.
    
  4. Solucione o problema usando a solução de problemas de compartilhamentos de arquivos do Azure.

Se você não puder usar RDP ou SSH para verificar os arquivos de log no nó, poderá carregar os logs em sua conta de armazenamento do Azure. Você pode usar esse método para logs do Windows e Linux.

  1. No portal do Azure, procure e selecione a conta Batch que tem seu pool.

  2. Na página Conta de lote, selecione Pools na navegação à esquerda.

  3. Na página Pools, selecione o nome do pool.

  4. Na página do pool, selecione Nós na navegação à esquerda.

  5. Na página Nós, selecione o nome do nó.

  6. Na página do nó, selecione Carregar logs em lote.

  7. No painel Carregar logs em lote, selecione Contêiner de armazenamento de escolha.

  8. Na página Contas de armazenamento, selecione uma conta de armazenamento.

  9. Na página Contêineres, selecione ou crie um contêiner para carregar os arquivos e selecione Selecionar.

  10. Selecione Iniciar carregamento.

  11. Quando o carregamento estiver concluído, transfira os ficheiros e abra-agent-debug.log.

  12. Analise as mensagens de erro, por exemplo:

    ..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. Solucione o problema usando a solução de problemas de compartilhamentos de arquivos do Azure.

Montar manualmente uma partilha de ficheiros com o PowerShell

Se não for possível diagnosticar ou corrigir erros de montagem, você poderá usar o PowerShell para montar o compartilhamento de arquivos manualmente.

  1. Crie um pool sem uma configuração de montagem. Por exemplo:

    $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. Aguarde até que o nó esteja no estado Ocioso .

  3. No portal do Azure, procure e selecione a conta de armazenamento que tem seu compartilhamento de arquivos.

  4. No menu da página da conta de armazenamento, selecione Compartilhamentos de arquivos na navegação à esquerda.

  5. Na página Compartilhamentos de arquivos, selecione o compartilhamento de arquivos que deseja montar.

  6. Na página do compartilhamento de arquivos, selecione Conectar.

  7. No painel Conectar, selecione a guia Windows.

  8. Em Letra da unidade, introduza a unidade que pretende utilizar. O padrão é Z.

  9. Em Método de autenticação, selecione como você deseja se conectar ao compartilhamento de arquivos.

  10. Selecione Mostrar Script e copie o script do PowerShell para montar o compartilhamento de arquivos.

  11. Conecte-se ao nó pelo RDP.

  12. Execute o comando copiado para montar o compartilhamento de arquivos.

  13. Observe todas as mensagens de erro na saída. Use essas informações para solucionar problemas relacionados à rede.

Exemplo de configurações de montagem

As configurações de exemplo de código a seguir demonstram a montagem de vários sistemas de compartilhamento de arquivos em um pool de nós de computação.

Compartilhamento de arquivos do Azure

O Azure Files é a oferta padrão do sistema de arquivos na nuvem do Azure. A configuração a seguir monta um compartilhamento de Arquivos do Azure nomeado <file-share-name> para a unidade S . Para obter informações sobre os parâmetros no exemplo, consulte Montar compartilhamento de arquivos do Azure SMB no Windows ou Criar um compartilhamento de arquivos do Azure NFS e montá-lo em uma VM Linux usando o portal do 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"
            },
        }
    }
}

Contêiner de Blob do Azure

Outra opção é usar o armazenamento de Blob do Azure via BlobFuse. A montagem de um sistema de arquivos blob requer uma chave de conta, uma chave de assinatura de acesso compartilhado (SAS) ou uma identidade gerenciada com acesso à sua conta de armazenamento.

Para obter informações sobre como obter essas chaves ou identidade, consulte os seguintes artigos:

A configuração a seguir monta um sistema de arquivos de blob com opções de BlobFuse. Para fins de ilustração, o exemplo mostra AccountKey, SasKey e IdentityReference, mas na verdade você pode especificar apenas um desses métodos.

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 "
            },
        }
    }
}

Para obter acesso padrão ao diretório montado BlobFuse, execute a tarefa como administrador. BlobFuse monta o diretório no espaço do usuário e, na criação do pool, monta o diretório como root. No Linux, todas as tarefas do administrador são root. A página de referência FUSE descreve todas as opções para o módulo FUSE.

Para obter mais informações e dicas sobre como usar o BlobFuse, consulte as seguintes referências:

NFS

Você pode montar compartilhamentos NFS em nós de pool para permitir que o Batch acesse sistemas de arquivos tradicionais. A configuração pode ser um único servidor NFS implantado na nuvem ou um servidor NFS local acessado por uma rede virtual. As montagens NFS suportam Avere vFXT, um cache distribuído na memória para tarefas de computação de alto desempenho (HPC) com uso intensivo de dados. As montagens NFS também oferecem suporte a outras interfaces padrão compatíveis com NFS, como NFS para Blob do Azure e NFS para Arquivos do Azure.

O exemplo a seguir mostra uma configuração para uma montagem do sistema de arquivos NFS:

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

CIFS

A montagem do CIFS em nós de pool é outra maneira de fornecer acesso aos sistemas de arquivos tradicionais. O CIFS é um protocolo de compartilhamento de arquivos que fornece um mecanismo aberto e multiplataforma para solicitar arquivos e serviços de servidor de rede. O CIFS baseia-se na versão melhorada do protocolo SMB para partilha de ficheiros na Internet e intranet.

O exemplo a seguir mostra uma configuração para uma montagem de arquivo 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>"
            },
        }
    }
}

Nota

Procurando um exemplo usando o PowerShell em vez de C#? Você pode encontrar outro ótimo exemplo aqui: Mount Azure File to Azure Batch Pool.

Próximos passos