Compartilhar via


Montar um sistema de arquivos virtual em um pool do Lote

O Lote do Azure suporta a montagem do armazenamento em nuvem ou um sistema de arquivos externo nos nós de computação do Windows ou Linux nos pools do Lote. Quando um nó de computação se junta ao pool, o sistema de arquivos virtual é montado e age 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 do Lote para .NET.

A montagem do sistema de arquivos no pool torna o acesso aos dados mais fácil e eficiente do que exigir que as tarefas obtenham seus próprios dados de um grande conjunto de dados compartilhados. Considere um cenário em que várias tarefas precisam acessar um conjunto comum de dados, como renderizar um filme. Cada tarefa renderiza um ou mais quadros de uma só vez a partir dos arquivos da 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, desempenho contínuo e operações de entrada/saída por segundo (IOPS). Você pode dimensionar o sistema de arquivos independentemente com base no número de nós de computação que acessam simultaneamente os dados.

Por exemplo, você pode usar um cache na memória distribuído do Avere vFXT para dar suporte a renderizações em grande escala de filmes 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 blobs baseado em nuvem, você pode usar BlobFuse para montar os dados como um sistema de arquivos local. Arquivos do Azure fornece um fluxo de trabalho semelhante ao do BlobFuse e está disponível no Windows e no Linux.

Configurações com suporte

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

  • Arquivos do Azure
  • Armazenamento de Blobs do Azure
  • Sistema de Arquivos de Rede (NFS), incluindo um cache Avere vFXT
  • CIFS (sistema de arquivos de Internet comum)

O Batch oferece suporte aos seguintes tipos de sistema de arquivos virtuais para os agentes de nó que são produzidos para seus respectivos editores e ofertas.

Tipo de sistema operacional Compartilhamento de Arquivos do Azure Contêiner de blobs do Azure Montagem de NFS Montagem de CIFS
Linux ✔️ ✔️ ✔️ ✔️
Windows ✔️

Observação

A montagem de um sistema de arquivos virtual não é suportada nos pools do Lote criados antes de 8 de agosto de 2019.

Requisitos de rede

Ao usar montagens de arquivos virtuais com pools do Lote 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, confira Pools do Lote 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 marca de serviço storage. Para obter mais informações, veja Usar um compartilhamento de arquivo do Azure com o Windows.

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

  • O Sistema de Arquivos de Rede (NFS) requer acesso à porta 2049 por padrão. Sua configuração pode ter outros requisitos. VMs devem ter acesso ao gerenciador de pacotes apropriado para baixar os pacotes nfs-common (para Debian ou Ubuntu). A URL pode variar com base na versão do SO. Dependendo da sua configuração, talvez você também precise acessar outras URLs.

    A montagem de Blob do Azure ou 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 da rede virtual da conta de armazenamento.

  • O Sistema de Arquivos da Internet Comum (CIFS) requer acesso à porta TCP 445. As VMs devem ter acesso ao gerenciador de pacotes apropriado para baixar o pacote cifs-utils. A URL pode variar com base na versão do SO.

Configuração e implementação da 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 do sistema de arquivos ocorre quando um nó de computação se junta a um pool, reinicia ou tem a imagem refeita.

Para montar um sistema de arquivos em um pool, você cria um objeto MountConfiguration que corresponde ao seu sistema de arquivos virtual: AzureBlobFileSystemConfiguration, AzureFileShareConfiguration, NfsMountConfiguration ou CifsMountConfiguration.

Todos os objetos de configuração de montagem precisam dos seguintes parâmetros de base. 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 em mais detalhes.

  • Nome da conta ou origem da conta de armazenamento.

  • Caminho ou fonte de montagem relativa, a localização do sistema de arquivos a ser montado no nó de computação, em relação ao diretório padrão \fsmounts acessível via AZ_BATCH_NODE_MOUNTS_DIR.

    A localização exata do diretório \fsmounts varia dependendo do SO do nó. Por exemplo, a localização em um nó do Ubuntu está mapeada para mnt\batch\tasks\fsmounts.

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

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

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

  • No Linux, o Lote instala o pacote cifs-utils. Em seguida, o Lote emite o comando de montagem.

  • No Windows, o Lote usa cmdkey para adicionar suas credenciais de conta do Lote. Em seguida, o Lote emite o comando de montagem por meio de net use. 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 de ambiente AZ_BATCH_NODE_MOUNTS_DIR, que aponta para a localização do sistema de arquivos e dos arquivos de log montados. 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 do Lote 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 do Lote.

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 do Lote.

Pré-requisitos

  • Uma conta do Azure com uma assinatura ativa.
  • Azure PowerShell instalado ou use o Azure Cloud Shell e selecione PowerShell para a interface.
  • Uma conta existente do Lote com uma conta do Armazenamento do Microsoft Azure vinculada que tenha um compartilhamento de arquivo.
  1. Entrar na sua assinatura do Azure, substituindo o espaço reservado pela sua ID de assinatura.

    Connect-AzAccount -Subscription "<subscription-ID>"
    
  2. Obtenha o contexto para sua conta do Lote. Substitua o marcador de posição <batch-account-name> pelo nome da sua conta do Lote.

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

    O script a seguir cria um pool com um nó do tamanho Standard_D2_V2 do Windows Server 2016 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.

Acessar os arquivos 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 somente às tarefas do Lote do Azure. Se você usar o Protocolo RDP (RDP) para se conectar ao nó, sua conta de usuário não terá acesso automático à unidade de montagem. Ao se conectar ao nó pelo RDP, você deve adicionar credenciais para que a conta de armazenamento acesse a unidade S diretamente.

Use cmdkey para adicionar as credenciais. Substitua os espaços reservados <storage-account-name> e <storage-account-key> por 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 sistema de arquivos no local AZ_BATCH_NODE_MOUNTS_DIR. Os arquivos do 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 teste tem um arquivo de log de montagem chamado: cifs-test.log.

Investigar os erros de montagem

Você pode usar RDP ou SSH para o nó para verificar os arquivos de log pertencentes a 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ó de lote:

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, faça RDP ou SSH para o nó para verificar os arquivos de log relacionados. O agente em lote implementa a montagem de forma diferente no Windows e Linux para compartilhamentos de arquivos do Azure. No Linux, o Lote instala o pacote cifs-utils. Em seguida, o Lote emite o comando de montagem. No Windows, o Lote usa cmdkey para adicionar suas credenciais de conta do Lote. Em seguida, o Lote emite o comando de montagem por meio de net use. Por exemplo:

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

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

  3. Examine 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 Solucionador de problemas de compartilhamentos de arquivos do Azure.

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

  1. No portal do Azure, pesquise e selecione a conta do Lote que tem seu pool.

  2. Na página da conta do 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 Selecionar contêiner de armazenamento.

  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 o qual carregar os arquivos e selecione Selecionar.

  10. Selecione Iniciar upload.

  11. Quando o upload for concluído, baixe os arquivos e abra agent-debug.log.

  12. Examine 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 Solucionador de problemas de compartilhamentos de arquivos do Azure.

Montar manualmente um compartilhamento de arquivo com o PowerShell

Se você não conseguir diagnosticar ou corrigir os erros de montagem, 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, pesquise e selecione a conta de armazenamento que tem seu compartilhamento de arquivos.

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

  5. Na página Compartilhamentos de arquivos, selecione o compartilhamento de arquivos que você 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, insira a unidade que você deseja usar. O padrão é Z.

  9. Para 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 no nó por RDP.

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

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

Exemplos de configurações de montagem

As configurações de exemplo do 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

Os Arquivos do Azure consistem na oferta padrão do sistema de arquivos de nuvem do Azure. A configuração a seguir monta um compartilhamento de Arquivos do Azure chamado <file-share-name> na unidade S. Para obter informações sobre os parâmetros no exemplo, consulte Montar o compartilhamento de arquivos SMB fof Azure no Windows ou Criar um compartilhamento de arquivos NFS do Azure 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 blobs do Azure

Outra opção é usar o armazenamento de Blobs do Azure por meio de BlobFuse. A montagem de um sistema de arquivos de 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 artigos a seguir:

A configuração a seguir monta um sistema de arquivos de blob com as opções do BlobFuse. Para fins de ilustração, o exemplo mostra AccountKey, SasKey e IdentityReference, mas 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 no BlobFuse, execute a tarefa como administrador. O BlobFuse monta o diretório no espaço do usuário e, na criação do pool, monta o diretório como raiz. No Linux, todas as tarefas de administrador são raiz. A página de referência do FUSE descreve todas as opções de módulos do FUSE.

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

NFS

Você pode montar compartilhamentos NFS nos nós de pool para permitir que o Lote 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 dão suporte a outras interfaces padrão compatíveis com NFS, como NFS para Blob do Azure e NFS para Arquivos do Azure .

O seguinte exemplo 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 nos nós do pool é outra maneira de fornecer acesso aos sistemas de arquivos tradicionais. O CIFS é um protocolo de compartilhamento de arquivos que fornece um mecanismo de plataforma cruzada e aberta para solicitar serviços e arquivos do servidor de rede. O CIFS é baseado na versão aprimorada do protocolo SMB para compartilhamento de arquivos na Internet e na intranet.

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

Observação

Procurando um exemplo usando o PowerShell em vez de C#? Você pode encontrar outro ótimo exemplo aqui: Montar o Arquivo do Azure para Lote do Azure Pool.

Próximas etapas