Monter un système de fichiers virtuel sur un pool Batch
Azure Batch prend en charge le montage de stockage cloud ou d’un système de fichiers externe sur les nœuds de calcul Windows ou Linux dans les pools Batch. Lorsqu’un nœud de calcul rejoint un pool, le système de fichiers virtuel est monté et traité comme un lecteur local sur ce nœud. Cet article vous présente comment monter un système de fichiers virtuel sur un pool de nœuds de calcul à l’aide de la Bibliothèque de gestion Batch pour .NET.
Le montage du système de fichiers dans le pool rend l’accès aux données plus facile et plus efficace que les tâches nécessitant d’obtenir leurs propres données à partir d’un grand jeu de données partagé. Imaginez un scénario avec plusieurs tâches nécessitant l’accès à un jeu de données commun, comme le rendu d’un film. Chaque tâche restitue un ou plusieurs frames à la fois à partir des fichiers de scène. En montant un lecteur contenant les fichiers de scène, il est plus facile pour chaque nœud de calcul d’accéder aux données partagées.
En outre, vous pouvez choisir le système de fichiers sous-jacent pour répondre aux exigences en matière de performances, de débit et d’opérations d’entrée/sortie par seconde (IOPS). Vous pouvez mettre à l’échelle le système de fichiers indépendamment en fonction du nombre de nœuds de calcul qui accèdent simultanément aux données.
Par exemple, il est possible d’utiliser un cache en mémoire distribué Avere vFXT, qui peut être utilisé pour prendre en charge des rendus de films à grande échelle avec des milliers de nœuds de rendu simultanés, en accédant aux données sources qui résident localement. Ou, pour les données qui se trouvent déjà dans le stockage blob basé sur le cloud, vous pouvez utiliser BlobFuse pour monter les données en tant que système de fichiers local. Azure Files fournit un flux de travail similaire à celui de BlobFuse et est disponible sur Windows et Linux.
Configurations prises en charge
Vous pouvez monter les types de systèmes de fichiers suivants :
- Azure Files
- Stockage Blob Azure
- NFS (Network File System), y compris un cache Avere vFXT
- Common Internet File System (CIFS)
Batch prend en charge les types de systèmes de fichiers virtuels suivants pour les agents de nœud produits pour leur éditeur et offre respectifs.
Type de système d’exploitation | Partage Azure Files | Conteneur de blobs Azure | Montage NFS | Montage CIFS |
---|---|---|---|---|
Linux | ✔️ | ✔️ | ✔️ | ✔️ |
Windows | ✔️ | ❌ | ❌ | ❌ |
Remarque
Le montage d’un système de fichiers virtuel n’est pas pris en charge sur les pools Batch créés avant le 8 août 2019.
Configuration requise du réseau
Lorsque vous utilisez des montages de fichiers virtuels avec des pools Batch dans un réseau virtuel, gardez à l’esprit les exigences suivantes et assurez-vous qu’aucun trafic requis n’est bloqué. Pour plus d’informations, consultez Pools Batch dans un réseau virtuel.
Les Partages Azure Files nécessitent que le port TCP 445 soit ouvert pour le trafic vers et à partir de l’étiquette de service
storage
. Pour plus d’informations, consultez Utiliser un partage de fichiers Azure avec Windows.Les Conteneurs d’objets blob Azure nécessitent que le port TCP 443 soit ouvert pour le trafic vers et depuis l’étiquette de service
storage
. Les machines virtuelles doivent avoir accès àhttps://packages.microsoft.com
pour télécharger les packagesblobfuse
etgpg
. Selon votre configuration, vous pouvez avoir besoin d’accéder à d’autres URL.Le Système de fichiers réseau (NFS) nécessite l’accès au port 2049 par défaut. Votre configuration peut avoir d’autres exigences. Les machines virtuelles doivent avoir accès au gestionnaire de package approprié pour télécharger les packages
nfs-common
(pour Debian ou Ubuntu). L’URL peut varier en fonction de la version de votre système d’exploitation. Selon votre configuration, vous pouvez également avoir besoin d’accéder à d’autres URL.Le montage d’un objet BLOB Azure ou Azure Files via NFS peut avoir davantage d’exigence de mise en réseau. Par exemple, vos nœuds de calcul peuvent avoir besoin d’utiliser le même sous-réseau de réseau virtuel que le compte de stockage.
Le Système de fichiers Internet commun (CIFS) nécessite l’accès au port TCP 445. Les machines virtuelles doivent avoir accès au gestionnaire de package approprié pour télécharger le package
cifs-utils
. L’URL peut varier en fonction de la version de votre système d’exploitation.
Configuration et implémentation du montage
Le montage d’un système de fichiers virtuel sur un pool rend le système de fichiers disponible pour chaque nœud de calcul du pool. La configuration du système de fichiers se produit lorsqu’un nœud de calcul rejoint un pool, redémarre ou est réinitialisé.
Pour monter un système de fichiers sur un pool, vous créez un objet MountConfiguration qui correspond à votre système de fichiers virtuel : AzureBlobFileSystemConfiguration
, AzureFileShareConfiguration
, NfsMountConfiguration
ou CifsMountConfiguration
.
Tous les objets de configuration de montage ont besoin des paramètres de base suivants. Certaines configurations de montage ont des paramètres spécifiques pour le système de fichiers particulier, que les exemples de code présentent plus en détail.
Nom de compte ou source du compte de stockage.
Chemin de montage relatif ou source : emplacement du système de fichiers monté sur le nœud de calcul, par rapport au répertoire \fsmounts standard accessible via
AZ_BATCH_NODE_MOUNTS_DIR
.L’emplacement exact du répertoire \fsmounts varie en fonction du système d’exploitation du nœud. Par exemple, l’emplacement sur un nœud Ubuntu est mappé à mnt\batch\tasks\fsmounts.
Les options de montage ou BlobFuse décrivent les paramètres spécifiques pour le montage d’un système de fichiers.
Lorsque vous créez le pool et l’objet MountConfiguration
, vous attribuez l’objet à la propriété MountConfigurationList
. Le montage du système de fichiers se produit lorsqu’un nœud rejoint le pool, redémarre ou est réinitialisé.
L’agent Batch implémente le montage différemment sur Windows et Linux.
Sur Linux, Batch installe le package
cifs-utils
. Ensuite, Batch émet la commande mount.Sur Windows, Batch utilise
cmdkey
pour ajouter les informations d’identification de votre compte Batch. Ensuite, Batch émet la commande de montage vianet use
. Par exemple :net use S: \\<storage-account-name>.file.core.windows.net\<fileshare> /u:AZURE\<storage-account-name> <storage-account-key>
Le montage du système de fichiers crée une variable d’environnement AZ_BATCH_NODE_MOUNTS_DIR
qui pointe vers l’emplacement du système de fichiers monté et des fichiers journaux. Vous pouvez utiliser les fichiers journaux pour la résolution des problèmes et le débogage.
Monter un partage Azure Files avec PowerShell
Vous pouvez utiliser Azure PowerShell pour monter un partage Azure Files sur un pool Batch Windows ou Linux. La procédure suivante vous guide tout au long de la configuration et du montage d’un système de fichiers de partage Azure Files sur un pool Batch.
Important
Le nombre maximal de systèmes de fichiers montés sur un pool est de 10. Pour plus d’informations et pour connaître les autres limitations, consultez Quotas et limites du service Batch.
Prérequis
- Compte Azure avec un abonnement actif.
- Azure PowerShell installé ou utilisez Azure Cloud Shell et sélectionnez PowerShell pour l’interface.
- Un compte Batch existant avec un compte de stockage Azure lié qui a un partage de fichiers.
Connectez-vous à votre abonnement Azure en remplaçant l’espace réservé par votre ID d’abonnement.
Connect-AzAccount -Subscription "<subscription-ID>"
Obtenez le contexte de votre compte Batch. Remplacez l’espace réservé
<batch-account-name>
par le nom de votre compte Batch.$context = Get-AzBatchAccount -AccountName <batch-account-name>
Créez un pool Batch avec les paramètres suivants. Remplacez les espaces réservés
<storage-account-name>
,<storage-account-key>
et<file-share-name>
par les valeurs du compte de stockage lié à votre compte Batch. Remplacez l’espace réservé<pool-name>
par le nom souhaité pour le pool.Le script suivant crée un pool avec un nœud Windows Server 2016 Datacenter, de taille Standard_D2_V2, puis monte le partage Azure Files sur le lecteur S du nœud.
$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
Connectez-vous au nœud et vérifiez que le fichier de sortie est correct.
Accéder aux fichiers montés
Les tâches Azure Batch peuvent accéder aux fichiers montés à l’aide du chemin d’accès direct du lecteur, par exemple :
cmd /c "more S:\folder1\out.txt & timeout /t 90 > NULL"
L’agent Azure Batch n’accorde l’accès que pour les tâches Azure Batch. Si vous utilisez le protocole RDP (Remote Desktop Protocol) pour vous connecter au nœud, votre compte d’utilisateur n’a pas accès automatiquement au lecteur de montage. Lorsque vous vous connectez au nœud via RDP, vous devez ajouter des informations d’identification pour que le compte de stockage accède directement au lecteur S.
Utilisez cmdkey
pour ajouter les informations d’identification. Remplacez les espaces réservés <storage-account-name>
et <storage-account-key
> par vos propres informations.
cmdkey /add:"<storage-account-name>.file.core.windows.net" /user:"Azure\<storage-account-name>" /pass:"<storage-account-key>"
Résoudre les problèmes de montage
Si une configuration de montage échoue, le nœud de calcul échoue et l’état du nœud devient Inutilisable. Pour diagnostiquer un échec de configuration de montage, examinez la propriété ComputeNodeError pour plus d’informations sur l’erreur.
Pour obtenir les fichiers journaux pour le débogage, vous pouvez utiliser l’API OutputFiles pour charger les fichiers *.log. Les fichiers *.log contiennent des informations sur le montage du système de fichiers à l’emplacement AZ_BATCH_NODE_MOUNTS_DIR
. Les fichiers journaux montés présentent le format : <type>-<mountDirOrDrive>.log pour chaque montage. Par exemple, un montage CIFS dans un répertoire de montage nommé test comporte un fichier journal de montage nommé : cifs-test.log.
Examiner les erreurs de montage
Vous pouvez RDP ou SSH sur le nœud pour vérifier les fichiers journaux relatifs aux montages de système de fichiers. L’exemple de message d’erreur suivant est possible lorsque vous essayez de monter un partage de fichiers Azure sur un nœud 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 vous recevez cette erreur, RDP ou SSH vers le nœud pour vérifier les fichiers journaux associés. L’agent Batch implémente le montage différemment sur Windows et Linux pour les partages de fichiers. Sur Linux, Batch installe le package cifs-utils
. Ensuite, Batch émet la commande mount. Sur Windows, Batch utilise cmdkey
pour ajouter les informations d’identification de votre compte Batch. Ensuite, Batch émet la commande de montage via net use
. Par exemple :
net use S: \\<storage-account-name>.file.core.windows.net\<fileshare> /u:AZURE\<storage-account-name> <storage-account-key>
Connectez-vous au nœud via RDP.
Ouvrez le fichier journal fshare-S.log, à l’emplacement D:\batch\tasks\fsmounts.
Passez en revue les messages d’erreur, par exemple :
CMDKEY: Credential added successfully. System error 86 has occurred. The specified network password is not correct.
Résolvez le problème à l’aide de l’utilitaire de résolution des problèmes de partages de fichiers Azure.
Si vous ne pouvez pas utiliser RDP ou SSH pour vérifier les fichiers journaux sur le nœud, vous pouvez charger les journaux sur votre compte de stockage Azure. Vous pouvez utiliser cette méthode pour les journaux Windows et Linux.
Dans le Portail Azure, recherchez et sélectionnez le compte Batch qui contient votre pool.
Dans la page du compte Batch, sélectionnez Pools dans le volet de navigation de gauche.
Dans la page Pools, sélectionnez le nom du pool.
Dans la page du pool, sélectionnez Nœuds dans le volet de navigation de gauche.
Dans la page Nœuds, sélectionnez le nom du nœud.
Sur la page du nœud, sélectionnez Charger les journaux de traitement par lots.
Dans le volet Charger les journaux de traitement par lots, sélectionnez Choisir un conteneur de stockage.
Sur la page Comptes de stockage, sélectionnez un compte de stockage.
Dans la page Conteneurs, sélectionnez ou créez un conteneur dans lequel charger les fichiers, puis sélectionnez Sélectionner.
Sélectionnez Démarrer le chargement.
Une fois le chargement terminé, téléchargez les fichiers et ouvrez agent-debug.log.
Passez en revue les messages d’erreur, par exemple :
..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.
Résolvez le problème à l’aide de l’utilitaire de résolution des problèmes de partages de fichiers Azure.
Montage manuel d’un partage de fichiers avec PowerShell
Si vous ne pouvez pas diagnostiquer ou corriger les erreurs de montage, vous pouvez utiliser PowerShell pour monter le partage de fichiers manuellement.
Créez un pool sans configuration de montage. Par exemple :
$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
Attendez que le nœud soit à l’état Inactif.
Dans le Portail Azure, recherchez et sélectionnez le compte de stockage qui contient votre partage de fichiers.
Dans le menu de la page du compte de stockage, sélectionnez Partages de fichiers dans le volet de navigation de gauche.
Dans la page Partages de fichiers, sélectionnez le partage de fichiers que vous souhaitez monter.
Dans la page du partage de fichiers, sélectionnez Se connecter.
Dans le volet Connecter, sélectionnez l’onglet Windows.
Dans Lettre de lecteur, entrez le lecteur que vous souhaitez utiliser. La valeur par défaut est Z.
Dans Méthode d’authentification, sélectionnez la façon dont vous souhaitez vous connecter au partage de fichiers.
Sélectionnez Afficher le script, puis copiez le script PowerShell pour le montage du partage de fichiers.
Connectez-vous au nœud via RDP.
Exécutez la commande que vous avez copiée pour monter le partage de fichiers.
Notez les messages d’erreur dans la sortie. Utilisez ces informations pour résoudre les problèmes liés à la mise en réseau.
Exemples de configurations de montage
Les exemples de configurations de code suivants illustrent le montage de différents systèmes de partages de fichiers sur un pool de nœuds de calcul.
Partage Azure Files
Azure Files est l’offre standard de systèmes de fichiers cloud d’Azure. La configuration suivante monte un partage Azure Files nommé <file-share-name>
sur le lecteur S. Pour plus d’informations sur les paramètres de l’exemple, consultez Monter un partage de fichiers Azure SMB sur Windows ou Créer un partage de fichiers Azure NFS et le monter sur une machine virtuelle Linux à l’aide du portail 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"
},
}
}
}
Conteneur de blobs Azure
Une autre option consiste à utiliser le stockage d'objets blob Azure via BlobFuse. Le montage d’un système de fichiers blob nécessite une clé de compte, une clé de signature d’accès partagé (SAP) ou une identité managée avec accès à votre compte de stockage.
Pour plus d’informations sur l’obtention de ces clés ou identités, consultez les articles suivants :
Configurer des identités managées dans des pools Batch
Conseil
Si vous utilisez une identité managée, assurez-vous que l’identité a été attribuée au pool pour qu’elle soit disponible sur la machine virtuelle qui effectue le montage. L’identité doit également avoir le rôle Contributeur aux données Blob du stockage.
La configuration suivante monte un système de fichiers blob avec les options BlobFuse. À des fins d’illustration, l’exemple montre AccountKey
, SasKey
et IdentityReference
, mais vous ne pouvez en fait spécifier qu’une seule de ces méthodes.
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 "
},
}
}
}
Pour accéder par défaut au répertoire monté avec BlobFuse, exécutez la tâche en tant qu'administrateur. BlobFuse monte le répertoire au niveau de l’espace utilisateur et, lors de la création du pool, le monte en tant que racine. Dans Linux, toutes les tâches de l’administrateur sont racine. La page de référence FUSE décrit toutes les options du module FUSE.
Pour plus d’informations et des conseils sur l’utilisation de BlobFuse, consultez les références suivantes :
- Projet Blobfuse2
- FAQ sur la résolution des problèmes de BlobFuse
- Problèmes avec GitHub dans le référentiel azure-storage-fuse
NFS
Vous pouvez monter des partages NFS sur des nœuds de pool pour permettre à Batch d’accéder aux systèmes de fichiers traditionnels. Il peut s’agir d’un serveur NFS unique déployé dans le cloud ou d’un serveur NFS local accessible via un réseau virtuel. Les montages NFS prennent en charge Avere vFXT, un cache en mémoire distribué pour les tâches de calcul haute performance (HPC) gourmandes en données. Les montages NFS prennent également en charge les autres interfaces conformes à NFS standard, telles que NFS for Azure Blob et NFS for Azure Files.
L’exemple suivant montre une configuration pour un montage de système de fichiers NFS :
new PoolAddParameter
{
Id = poolId,
MountConfiguration = new[]
{
new MountConfiguration
{
NfsMountConfiguration = new NFSMountConfiguration
{
Source = "<source>",
RelativeMountPath = "<relative-mount-path>",
MountOptions = "options ver=3.0"
},
}
}
}
CIFS
Le montage de CIFS sur des nœuds de pool est un autre moyen de fournir l’accès aux systèmes de fichiers traditionnels. CIFS est un protocole de partage de fichiers qui fournit un mécanisme ouvert et multiplateforme pour la demande de fichiers et de services de serveur réseau. CIFS est basé sur la version améliorée du protocole SMB pour le partage de fichiers intranet et Internet.
L’exemple suivant montre une configuration pour un montage de fichiers 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>"
},
}
}
}
Notes
Vous recherchez un exemple d’utilisation de PowerShell plutôt que de C# ? Vous trouverez un autre excellent exemple ici : Monter Azure File sur Azure Batch Pool.