Montaje de un sistema de archivos virtual en un grupo de Batch

Precaución

En este artículo se hace referencia a CentOS, una distribución de Linux que está cerca de su estado Final de ciclo vida (EOL). Tenga en cuenta su uso y planeación en consecuencia. Para obtener más información, consulte la Guía de fin de vida de CentOS.

Azure Batch admite el montaje de almacenamiento en la nube o un sistema de archivos externo en nodos de ejecución de Windows o Linux en los grupos de Batch. Cuando un nodo de ejecución se une a un grupo, el sistema de archivos virtual monta y actúa como una unidad local en ese nodo. Este artículo le muestra cómo montar un sistema de archivos virtual en un grupo de nodos de ejecución mediante la biblioteca de administración de Batch para .NET.

El montaje del sistema de archivos en el grupo facilita y hace que el acceso a los datos sea más sencillo y eficaz que requerir tareas para obtener sus propios datos de un conjunto de datos compartido de gran tamaño. Considere un escenario que consta de varias tareas que necesitan acceso a un conjunto de datos común, como la representación de una película. Cada tarea representa uno o varios fotogramas a la vez de los archivos de la escena. Al montar una unidad que contiene los archivos de la escena, es más fácil que cada uno de los nodos de ejecución tengan acceso a los datos compartidos.

Además, puede elegir el sistema de archivos subyacente para satisfacer los requisitos de rendimiento, a lo largo y las operaciones de entrada y salida por segundo (IOPS). Puede escalar de forma independiente el sistema de archivos en función del número de nodos de proceso que acceden simultáneamente a los datos.

Por ejemplo, podría usar una caché en memoria distribuida de Avere vFXT para admitir representaciones cinematográficas de gran tamaño con miles de nodos de representación simultáneos y acceder a los datos de origen locales. O bien, para los datos que ya están en el almacenamiento de blobs basado en la nube, puede usar BlobFuse para montar los datos como un sistema de archivos local. Azure Files proporciona un flujo de trabajo similar al de BlobFuse y está disponible en Windows y Linux.

Configuraciones admitidas

Puede montar los siguientes tipos de sistemas de archivos:

  • Azure Files
  • Azure Blob Storage
  • Network File System (NFS), incluida una caché de Avere vFXT
  • Sistema de archivos de Internet común (CIFS)

Batch admite los siguientes tipos de sistemas de archivos virtuales para los agentes de nodo que se generan para sus respectivos publicador y oferta.

Tipo de SO Recurso compartido de Azure Files Contenedor de blobs de Azure Montaje de NFS Montaje de CIFS
Linux ✔️ ✔️ ✔️ ✔️
Windows ✔️

Nota:

El montaje de un sistema de archivos virtual se admite en grupos de Batch creados antes del 8 de agosto del 2019.

Requisitos de red

Cuando usa montajes de archivos virtuales con grupos de Batch en una red virtual, tenga en mente los siguientes requisitos y asegúrese de que no se bloquee el tráfico necesario. Para más información, consulte Grupos de Batch en una red virtual.

  • Los Recursos compartidos de Azure Files requieren que el puerto TCP 445 esté abierto para el tráfico hacia y desde la etiqueta de servicio storage. Para más información, consulte Uso de un recurso compartido de archivos de Azure con Windows.

  • Los contenedores de blobs de Azure requieren que el puerto TCP 443 esté abierto para el tráfico hacia y desde la etiqueta de servicio storage. Las máquinas virtuales (VM) deben tener acceso a https://packages.microsoft.com para descargar los paquetes blobfuse y gpg. En función de la configuración, es posible que necesite acceder a otras direcciones URL.

  • El Sistema de archivos de red (NFS) requiere acceso al puerto 2049 de forma predeterminada. La configuración puede tener otros requisitos. Las máquinas virtuales deben tener acceso al administrador de paquetes adecuado para descargar los paquetes nfs-common (para Debian o Ubuntu) o nfs-utils (para CentOS). La dirección URL puede variar según la versión del sistema operativo. En función de la configuración, es posible que también necesite acceder a otras direcciones URL.

    El montaje de Azure Blob o Azure Files mediante NFS podría tener más requisitos de red. Por ejemplo, es posible que los nodos de proceso necesiten usar la misma subred de red virtual que la cuenta de almacenamiento.

  • El Sistema de archivos de Internet común (CIFS) requiere acceso al puerto TCP 445. Las máquinas virtuales deben tener acceso al administrador de paquetes adecuados para descargar el paquete cifs-utils. La dirección URL puede variar según la versión del sistema operativo.

Configuración e implementación del montaje

El montaje de un sistema de archivos virtual en un grupo hace que el sistema de archivos esté disponible para todos los nodos de ejecución del grupo. La configuración del sistema de archivos se produce cuando un nodo de proceso se une a un grupo o se reinicia, o bien cuando se restablece su imagen inicial.

Para montar un sistema de archivos en un grupo, cree un objeto MountConfiguration(Montar configuración) que coincida con el sistema de archivos virtual: AzureBlobFileSystemConfiguration, AzureFileShareConfiguration, NfsMountConfigurationo CifsMountConfiguration.

Todos los objetos de configuración de montaje necesitan los siguientes parámetros base. Algunas configuraciones de montaje tienen parámetros específicos para el sistema de archivos concreto, que los ejemplos de código exponen con más detalle.

  • Nombre de cuenta o origen de la cuenta de almacenamiento.

  • Ruta de acceso de montaje relativa u origen: ubicación del sistema de archivos montado en el nodo de ejecución, en relación con el directorio \fsmounts estándar accesible mediante AZ_BATCH_NODE_MOUNTS_DIR.

    La ubicación exacta del directorio \fsmounts varía en función del sistema operativo del nodo. Por ejemplo, la ubicación de un nodo de Ubuntu se asigna a mnt\batch\tasks\fsmounts. En un nodo CentOS, la ubicación se asigna a mnt\resources\batch\tasks\fsmounts.

  • Opciones de montaje u opciones de BlobFuseque describen parámetros específicos para el montaje de un sistema de archivos.

Al crear el grupo y el objeto MountConfiguration, asigne el objeto a la propiedad MountConfigurationList. El montaje del sistema de archivos se produce cuando un nodo se une al grupo o se reinicia, o bien cuando se restablece su imagen inicial.

El agente de Batch implementa el montaje de forma diferente en Windows y Linux.

  • En Linux, Batch instala el paquete cifs-utils. Después, Batch emite el comando de montaje.

  • En Windows, Batch usa cmdkey para agregar las credenciales de la cuenta de Batch. Después, Batch emite el comando de montaje mediante net use. Por ejemplo:

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

El montaje del sistema de archivos crea una variable de entorno AZ_BATCH_NODE_MOUNTS_DIR, que apunta a la ubicación del sistema de archivos montado y los archivos de registro. Puede usar los archivos de registro para solucionar problemas y depurar.

Montaje de un recurso compartido de Azure Files con PowerShell

Puede usar Azure PowerShell para montar un recurso compartido de Azure Files en un grupo de Batch de Windows o Linux. El procedimiento siguiente le guía por la configuración y el montaje de un sistema de archivos compartido de archivos de Azure en un grupo de Batch.

Importante

El número máximo de sistemas de archivos montados en un grupo es 10. Para obtener más información y otros límite consulte Límites y cuotas del servicio Batch.

Requisitos previos

  • Una cuenta de Azure con una suscripción activa.
  • Use Azure PowerShell que tiene instalado o use Azure Cloud Shell y seleccione PowerShell para la interfaz.
  • Una cuenta de Batch existente con una cuenta de Azure Storage vinculada que tenga un recurso compartido de archivos.
  1. Inicie sesión en su suscripción de Azure y reemplace el marcador de posición por el identificador de suscripción.

    Connect-AzAccount -Subscription "<subscription-ID>"
    
  2. Obtenga el contexto de la cuenta de Batch. Reemplace el marcador de posición <batch-account-name> por el nombre de la cuenta de Batch.

    $context = Get-AzBatchAccount -AccountName <batch-account-name>
    
  3. Cree un grupo de Batch con la siguiente configuración. Reemplace los marcadores de posición <storage-account-name>, <storage-account-key> y <file-share-name> por los valores de la cuenta de almacenamiento que esté vinculada a la cuenta de Batch. Reemplace el marcador de posición <pool-name> por el nombre que desea para el grupo.

    El siguiente script crea un grupo con un Centro de datos de Windows Server 2016, un nodo de tamaño Standard_D2_V2 y, a continuación, monta el recurso compartido de archivos de Azure en la unidad S del nodo.

    $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. Conéctese al nodo y compruebe que el archivo de salida es correcto.

Acceso a los archivos montados

Las tareas de Azure Batch pueden acceder a los archivos montados mediante la ruta de acceso directa de la unidad, por ejemplo:

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

El agente de Azure Batch concede acceso solo a las tareas de Azure Batch. Si usa el Protocolo de escritorio remoto (RDP) para conectarse al nodo, la cuenta de usuario no tiene acceso automático a la unidad de montaje. Al conectarse al nodo a través de RDP, debe agregar credenciales para que la cuenta de almacenamiento acceda directamente a la unidad S.

Use cmdkey para agregar las credenciales. Reemplace los marcadores de posición <storage-account-name>, <storage-account-key y > por sus propia información.

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

Solución de problemas de montaje

Si se produce un error en una configuración de montaje, se producirá un error en el nodo de ejecución y el estado del nodo está establecido como Inutilizable. Para diagnosticar un error de configuración de montaje, inspeccione la propiedad ComputeNodeError (Error de procesamiento de nodo) para obtener más información sobre el error.

Para conseguir archivos de registro para solucionar los errores, puede usar la API OutputFiles (Archivos de salida) para cargar los archivos *.log. Los archivos *.log contienen información sobre el montaje del sistema de archivos en la ubicación AZ_BATCH_NODE_MOUNTS_DIR. Los archivos de registro montados tienen el formato <type>-<mountDirOrDrive>.log en cada montaje. Por ejemplo, un montaje CIFS en un directorio de montaje denominado test tendrá un archivo de registro de montaje denominado cifs-test.log.

Investigación de errores de montaje

Puede usar RDP o SSH en el nodo para comprobar los archivos de registro pertenecientes a los montajes del sistema de archivos. Es posible que se muestre el siguiente mensaje de error de ejemplo al intentar montar un recurso compartido de archivos de Azure en un nodo de 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

Si recibe este error, conéctese mediante RDP o SSH al nodo para comprobar los archivos de registro relacionados. El agente de Batch implementa el montaje de los recursos compartidos de Azure de forma diferente en Windows y Linux. En Linux, Batch instala el paquete cifs-utils. Después, Batch emite el comando de montaje. En Windows, Batch usa cmdkey para agregar las credenciales de la cuenta de Batch. Después, Batch emite el comando de montaje mediante net use. Por ejemplo:

net use S: \\<storage-account-name>.file.core.windows.net\<fileshare> /u:AZURE\<storage-account-name> <storage-account-key>
  1. Conéctese al nodo mediante RDP.

  2. Abra el archivo de registro fshare-S.log, en D:\batch\tasks\fsmounts.

  3. Revise los mensajes de error, por ejemplo:

    CMDKEY: Credential added successfully.
    System error 86 has occurred.
    
    The specified network password is not correct.
    
  4. Solucione el problema mediante el solucionador de problemas de recursos compartidos de archivos de Azure.

Si no puede usar RDP o SSH para comprobar los archivos de registro en el nodo, puede cargar los registros en la cuenta de almacenamiento de Azure. Puede usar este método para los registros de Windows y Linux.

  1. En el Azure Portal, busque y seleccione la cuenta de Batch que tiene el grupo.

  2. En la página Cuenta de Batch, seleccione Grupos en el panel de navegación izquierdo.

  3. En la página Grupos, seleccione el nombre del grupo.

  4. En la página del grupo, seleccione Nodos en el panel de navegación izquierdo.

  5. En la página Nodos, seleccione el nombre del nodo.

  6. En la página de nodos, seleccione Cargar los registros de lotes.

  7. En el panel Cargar registros de lotes, seleccione su Escoger un contenedor de Azure Storage.

  8. En la página Cuentas de almacenamiento, seleccione una cuenta de almacenamiento.

  9. En la página Contenedores, seleccione o cree un contenedor en el que cargar los archivos y seleccione Seleccionar.

  10. Seleccione Iniciar carga.

  11. Cuando se complete la carga, descargue los archivos y abra agent-debug.log.

  12. Revise los mensajes de error, por ejemplo:

    ..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 el problema mediante el solucionador de problemas de recursos compartidos de archivos de Azure.

Montaje manual de un recurso compartido de archivos con PowerShell

Si no puede diagnosticar o corregir errores de montaje, puede usar PowerShell para montar el recurso compartido de archivos manualmente.

  1. Cree un grupo sin una configuración de montaje. Por ejemplo:

    $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. Espere a que el nodo se encuentre en estado Inactivo.

  3. En el Azure Portal, busque y seleccione la cuenta de almacenamiento que tiene el recurso compartido de archivos.

  4. En el menú de la página de la cuenta de almacenamiento, seleccione Recursos compartidos de archivos en el panel de navegación izquierdo.

  5. En la página Recursos compartidos de archivos, seleccione el recurso compartido que quiere montar.

  6. En la página del recurso compartido de archivos, seleccione Conectar.

  7. En el panel Conectar, seleccione la pestaña Windows.

  8. En Letra de unidad, escriba la unidad que quiere usar. El valor predeterminado es: Z.

  9. En Método de autenticación, seleccione cómo quiere conectarse al recurso compartido de archivos.

  10. Seleccione Mostrar script y copie el script de PowerShell para montar el recurso compartido de archivos.

  11. Conéctese al nodo mediante RDP.

  12. Ejecute el comando que copió para montar el recurso compartido de archivos.

  13. Observe los mensajes de error de la salida. Use esta información para solucionar cualquier problema relacionado con las redes.

Configuraciones de montaje de ejemplo

En los ejemplos configuración de código siguientes se muestra cómo montar varios sistemas de recursos compartidos de archivos en un grupo de nodos de ejecución.

Recurso compartido de Azure Files

Azure Files es la oferta estándar del sistema de archivos en la nube de Azure. La siguiente configuración monta un recurso compartido de Azure Files denominado <file-share-name> en la unidad S. Para obtener información sobre los parámetros del ejemplo, consulte Montaje del recurso compartido de archivos SMB de Azure en Windows o Creación de un recurso compartido de archivos de Azure NFS y montaje en una máquina virtual de Linux mediante Azure Portal.

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

Contenedor de blobs de Azure

Otra opción consiste en usar Azure Blob Storage a través de BlobFuse. El montaje de un sistema de archivos de blobs requiere una clave de cuenta, una clave de firma de acceso compartido (SAS) o una identidad administrada con acceso a la cuenta de almacenamiento.

Para obtener información sobre cómo obtener estas claves o identidades, consulte los artículos siguientes:

La siguiente configuración monta un sistema de archivos de blobs con opciones de BlobFuse. Con fines ilustrativos, el ejemplo muestra AccountKey, SasKey y IdentityReference, pero realmente solo puede especificar uno de estos 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 obtener acceso predeterminado al directorio montado de BlobFuse, ejecute la tarea como Administrador. BlobFuse monta el directorio en el espacio de usuario y, cuando se crea el grupo, monta el directorio como raíz. En Linux, todas las tareas de administrador son raíz. La página de referencia de FUSE describe todas las funciones del módulo FUSE.

Para obtener más información y sugerencias sobre el uso de BlobFuse, consulte las referencias siguientes:

NFS

Puede montar recursos compartidos nfs en nodos de grupo para permitir que Batch acceda a los sistemas de archivos tradicionales. La configuración se puede realizar con un solo servidor NFS implementado en la nube o un servidor NFS local al que se tiene acceso a través de una red virtual. Los montajes NFS admiten Avere vFXT, una caché distribuida en memoria para tareas de informática de alto rendimiento (HPC) que consumen muchos datos. Los montajes de NFS también son admiten otras interfaces compatibles con NFS, como NFS para Azure Blob y NFS para Azure Files.

En el ejemplo siguiente se muestra una configuración para un montaje del sistema de archivos NFS:

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

CIFS

El montaje de CIFS en nodos de grupo es otra manera de proporcionar acceso a los sistemas de archivos tradicionales. CIFS es un protocolo de uso compartido de archivos que proporciona un mecanismo abierto y multiplataforma para solicitar servicios y archivos de servidor de red. CIFS se basa en la versión mejorada del protocolo SMB, que está diseñado para el uso compartido de archivos de Internet e intranet.

En el ejemplo siguiente se muestra una configuración para un montaje de archivos 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

¿Busca un ejemplo con PowerShell en lugar de C#? Puede encontrar otro ejemplo excelente aquí: Montaje de archivos de Azure en grupos de Azure Batch.

Pasos siguientes