Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Azure Batch supporta il montaggio dell'archiviazione cloud o di un file system esterno nei nodi di calcolo Windows o Linux nei pool di Batch. Quando un nodo di calcolo viene aggiunto al pool, il file system virtuale monta e funge da unità locale in tale nodo. Questo articolo illustra come montare un file system virtuale in un pool di nodi di calcolo usando la libreria di gestione batch per .NET.
Il montaggio del file system sul pool semplifica l'accesso ai dati ed è più efficiente rispetto al fatto di richiedere alle attività di ottenere i propri dati da un set di dati condiviso di grandi dimensioni. Si consideri uno scenario in cui più attività devono accedere a un set comune di dati, ad esempio il rendering di un filmato. Ogni attività esegue il rendering di uno o più fotogrammi contemporaneamente dai file della scena. Montando un'unità che contiene i file della scena, è più semplice per ogni nodo di calcolo accedere ai dati condivisi.
È possibile anche scegliere il file system sottostante per soddisfare le esigenze di prestazioni, throughput e operazioni di input/output al secondo (IOPS). È possibile ridimensionare in modo indipendente il file system in base al numero di nodi di calcolo che accedono simultaneamente ai dati.
Ad esempio, è possibile usare una cache in memoria distribuita di Avere vFXT per supportare rendering su larga scala di film con migliaia di nodi di rendering simultanei che accedono ai dati di origine locali. In alternativa, per i dati già presenti nell'archivio BLOB basato sul cloud, è possibile usare BlobFuse per montare i dati come file system locale. File di Azure fornisce un flusso di lavoro simile a quello di BlobFuse ed è disponibile sia in Windows che in Linux.
Configurazioni supportate
È possibile montare i tipi di file system seguenti:
- File di Azure
- Archivio BLOB di Azure
- Network File System (NFS), inclusa una cache Avere vFXT
- Common Internet File System (CIFS)
Batch supporta i seguenti tipi di file system virtuali per gli agenti di nodo prodotti per il rispettivo editore e offerta.
| OS Type (Tipo di sistema operativo) | Condivisione di File di Azure | Contenitore BLOB di Azure | Montaggio NFS | Montaggio CIFS |
|---|---|---|---|---|
| Linux | ✔️ | ✔️ | ✔️ | ✔️ |
| Windows | ✔️ | ❌ | ❌ | ❌ |
Nota
Il montaggio di un file system virtuale non è supportato nei pool di Batch creati prima dell'8 agosto 2019.
Requisiti di rete
Quando si usano i montaggi di file virtuali con i pool di Batch in una rete virtuale, tenere presenti i requisiti seguenti e assicurarsi che non venga bloccato alcun traffico necessario. Per altre informazioni, vedere Pool di Batch in una rete virtuale.
Condivisioni di File di Azure richiedono che la porta TCP 445 sia aperta per il traffico da e verso il tag del servizio
storage. Per altre informazioni, vedere Usare una condivisione file di Azure con Windows.I contenitori BLOB di Azure richiedono che la porta TCP 443 sia aperta per il traffico da e verso il tag del
storageservizio. Le macchine virtuali (VM) devono avere accesso ahttps://packages.microsoft.comper scaricare i pacchettiblobfuseegpg. A seconda della configurazione, potrebbe essere necessario accedere ad altri URL.Per impostazione predefinita, Network File System (NFS) richiede l'accesso alla porta 2049. La configurazione potrebbe avere altri requisiti. Le macchine virtuali devono avere accesso alla gestione pacchetti appropriata per scaricare i
nfs-commonpacchetti (per Debian o Ubuntu). L'URL può variare in base alla versione del sistema operativo. A seconda della configurazione, potrebbe essere necessario anche accedere ad altri URL.Il montaggio tramite NFS di blob di Azure o file di Azure potrebbe avere più requisiti di rete. Ad esempio, i nodi di calcolo potrebbero dover usare la stessa subnet di rete virtuale dell'account di archiviazione.
Common Internet File System (CIFS) richiede l'accesso alla porta TCP 445. Per scaricare il
cifs-utilspacchetto, le macchine virtuali devono avere accesso alla gestione pacchetti appropriata. L'URL può variare in base alla versione del sistema operativo.
Configurazione e implementazione del montaggio
Il montaggio di un file system virtuale in un pool rende disponibile il file system per ogni nodo di calcolo del pool. La configurazione per il file system avviene quando un nodo di calcolo si unisce a un pool, viene riavviato o viene reimmaginato.
Per montare un file system in un pool, creare un oggetto MountConfiguration che corrisponda al file system virtuale: AzureBlobFileSystemConfiguration, AzureFileShareConfiguration, NfsMountConfigurationo CifsMountConfiguration.
Per tutti gli oggetti di configurazione di montaggio sono necessari i parametri di base seguenti. Alcune configurazioni di montaggio hanno parametri specifici per il file system specifico, che gli esempi di codice presenti in modo più dettagliato.
Nome dell'account o origine dell'account di archiviazione.
Percorso di montaggio relativo o origine, percorso del file system da montare sul nodo di calcolo, rispetto alla directory standard \fsmounts accessibile tramite
AZ_BATCH_NODE_MOUNTS_DIR.Il percorso esatto della directory \fsmounts varia a seconda del sistema operativo del nodo. Ad esempio, il percorso in un nodo Ubuntu viene mappato a mnt\batch\tasks\fsmounts.
Opzioni di montaggio o opzioni BlobFuse che descrivono parametri specifici per il montaggio di un file system.
Quando si crea il pool e l'oggetto MountConfiguration , si assegna l'oggetto alla MountConfigurationList proprietà . Il montaggio per il file system si verifica quando un nodo viene aggiunto al pool, viene riavviato o viene reimmaginato.
L'agente Batch implementa il montaggio in modo diverso in Windows e Linux.
In Linux Batch installa il pacchetto
cifs-utils. Batch rilascia quindi il comando di montaggio.In Windows Batch usa
cmdkeyper aggiungere le credenziali dell'account Batch. Batch invia quindi il comando di montaggio tramitenet use. Ad esempio:net use S: \\<storage-account-name>.file.core.windows.net\<fileshare> /u:AZURE\<storage-account-name> <storage-account-key>
Il montaggio del file system crea una variabile di ambiente AZ_BATCH_NODE_MOUNTS_DIR, che punta al percorso del file system montato e dei file di log. È possibile usare i file di log per la risoluzione dei problemi e il debug.
Montare una condivisione File di Azure con PowerShell
È possibile usare Azure PowerShell per montare una condivisione File di Azure in un pool di Batch Windows o Linux. La procedura seguente illustra come configurare e montare un file system di condivisione file di Azure in un pool di Batch.
Importante
Il numero massimo di file system montati in un pool è 10. Per informazioni dettagliate e altri limiti, vedere Quote e limiti del servizio Batch.
Prerequisiti
- Un account Azure con una sottoscrizione attiva.
- Azure PowerShell installato o usare Azure Cloud Shell e selezionare PowerShell per l'interfaccia.
- Un account Batch esistente con un account Azure Storage collegato che dispone di una condivisione file.
Accedere alla sottoscrizione di Azure, sostituendo il segnaposto con l'ID sottoscrizione.
Connect-AzAccount -Subscription "<subscription-ID>"Ottieni il contesto per l'account Batch. Sostituisci il
<batch-account-name>segnaposto con il nome dell'account Batch.$context = Get-AzBatchAccount -AccountName <batch-account-name>Creare un pool di Batch con le impostazioni seguenti. Sostituire i segnaposto
<storage-account-name>,<storage-account-key>, e<file-share-name>con i valori dell'account di archiviazione collegato all'account Batch. Sostituire il<pool-name>segnaposto con il nome desiderato per il pool.Lo script seguente crea un pool con un nodo di calcolo Windows Server 2016 Datacenter di dimensione Standard_D2_V2 e quindi monta la condivisione file Azure sull'unità 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 $contextConnettersi al nodo e verificare che il file di output sia corretto.
Accedere ai file montati
Le attività di Azure Batch possono accedere ai file montati usando il percorso diretto dell'unità, ad esempio:
cmd /c "more S:\folder1\out.txt & timeout /t 90 > NULL"
L'agente di Azure Batch concede l'accesso solo per le attività di Azure Batch. Se si usa Remote Desktop Protocol (RDP) per connettersi al nodo, l'account utente non ha accesso automatico all'unità di montaggio. Quando ci si connette al nodo tramite RDP, è necessario aggiungere le credenziali per l'account di archiviazione per accedere direttamente all'unità S .
Usare cmdkey per aggiungere le credenziali. Sostituire i segnaposto <storage-account-name> e <storage-account-key> con le proprie informazioni.
cmdkey /add:"<storage-account-name>.file.core.windows.net" /user:"Azure\<storage-account-name>" /pass:"<storage-account-key>"
Risolvere i problemi di montaggio
Se una configurazione di montaggio non riesce, il nodo di calcolo ha esito negativo e lo stato del nodo è impostato su Unusable. Per diagnosticare un errore di configurazione del montaggio, esaminare la proprietà ComputeNodeError per informazioni dettagliate sull'errore.
Per ottenere i file di log per il debug, è possibile usare l'API OutputFiles per caricare i file *.log . I file *.log contengono informazioni sul mount del file system nella posizione indicata da AZ_BATCH_NODE_MOUNTS_DIR. I file di log di montaggio hanno il formato: <type>-<mountDirOrDrive>.log per ogni montaggio. Ad esempio, un montaggio CIFS in una directory di montaggio denominata test ha un file di log di montaggio denominato: cifs-test.log.
Analizzare gli errori di montaggio
È possibile usare RDP o SSH per il nodo per controllare i file di log relativi ai montaggi del file system. Il messaggio di errore di esempio seguente è possibile quando si tenta di montare una condivisione file di Azure in un nodo 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 viene visualizzato questo errore, RDP o SSH al nodo per controllare i file di log correlati. L'agente Batch implementa il montaggio in modo diverso in Windows e Linux per le condivisioni file di Azure. In Linux Batch installa il pacchetto cifs-utils. Batch rilascia quindi il comando di montaggio. In Windows Batch usa cmdkey per aggiungere le credenziali dell'account Batch. Batch invia quindi il comando di montaggio tramite net use. Ad esempio:
net use S: \\<storage-account-name>.file.core.windows.net\<fileshare> /u:AZURE\<storage-account-name> <storage-account-key>
Connettersi al nodo tramite RDP.
Aprire il file di log fshare-S.log, in D:\batch\tasks\fsmounts.
Esaminare i messaggi di errore, ad esempio:
CMDKEY: Credential added successfully. System error 86 has occurred. The specified network password is not correct.Risolvere il problema usando lo strumento di risoluzione dei problemi delle condivisioni file di Azure.
Se non è possibile usare RDP o SSH per controllare i file di log nel nodo, è possibile caricare i log nell'account di archiviazione di Azure. È possibile usare questo metodo per i log di Windows e Linux.
Nel portale di Azure, cerca e seleziona l'account Batch con il tuo pool.
Nella pagina Account Batch, selezionare Pools dalla barra di navigazione a sinistra.
Nella pagina Pool selezionare il nome del pool.
Nella pagina del pool, selezionare Nodi dal riquadro di navigazione a sinistra.
Nella pagina Nodi selezionare il nome del nodo.
Nella pagina del nodo, selezionare Carica log batch.
Nel riquadro Carica log batch, selezionare Seleziona contenitore di memoria.
Nella pagina Account di archiviazione selezionare un account di archiviazione.
Nella pagina Contenitori selezionare o creare un contenitore in cui caricare i file e selezionare Seleziona.
Selezionare Avvia caricamento.
Al termine del caricamento, scaricare i file e aprire agent-debug.log.
Esaminare i messaggi di errore, ad esempio:
..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.Risolvere il problema usando lo strumento di risoluzione dei problemi delle condivisioni file di Azure.
Montare manualmente una condivisione file con PowerShell
Se non è possibile diagnosticare o correggere gli errori di montaggio, è possibile usare PowerShell per montare manualmente la condivisione file.
Creare un pool senza una configurazione di montaggio. Ad esempio:
$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 $ContextAttendere che il nodo sia nello stato inattiva .
Nel portale di Azure cercare e selezionare l'account di archiviazione con la condivisione di file.
Nel menu della pagina dell'account di archiviazione selezionare File shares nel riquadro di spostamento a sinistra.
Nella pagina Condivisioni file, selezionare la condivisione file che si desidera montare.
Nella pagina della condivisione file selezionare Connetti.
Nel riquadro Connetti selezionare la scheda Windows.
Per lettera dell'unità, inserire l'unità che si desidera usare. Il valore predefinito è Z.
Per Metodo di autenticazione selezionare la modalità di connessione alla condivisione file.
Selezionare Mostra Script e copiare lo script di PowerShell per montare la condivisione file.
Connettersi al nodo tramite RDP.
Eseguire il comando copiato per montare la condivisione file.
Prendere nota di eventuali messaggi di errore nell'output. Usare queste informazioni per risolvere eventuali problemi correlati alla rete.
Configurazioni di montaggio di esempio
Le configurazioni di esempio di codice seguenti illustrano il montaggio di vari file share system in un pool di nodi di calcolo.
Condivisione di File di Azure
Azure Files è l'offerta standard per il file system cloud di Azure. La configurazione seguente monta una condivisione File di Azure denominata <file-share-name> nell'unità S. Per informazioni sui parametri nell'esempio, vedere Montare una condivisione file di Azure SMB in Windows o Creare una condivisione file di Azure NFS e montarla in una macchina virtuale Linux usando il portale di 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"
},
}
}
}
Contenitore BLOB di Azure
Un'altra opzione consiste nell'usare l'archiviazione BLOB di Azure tramite BlobFuse. Per montare un file system BLOB è necessaria una chiave dell'account, una chiave SAS (firma di accesso condiviso) oppure un'identità gestita con accesso al tuo account di archiviazione.
Per informazioni su come ottenere queste chiavi o identità, vedere gli articoli seguenti:
Concedere accesso limitato alle risorse di Archiviazione di Azure tramite firme di accesso condiviso
Configurare le identità gestite nei pool Batch
Suggerimento
Se si usa un'identità gestita, assicurarsi che l'identità sia stata assegnata al pool in modo che sia disponibile nella macchina virtuale che esegue il montaggio. L'identità deve avere anche il ruolo di Collaboratore dati BLOB di archiviazione.
La configurazione seguente monta un file system BLOB con le opzioni BlobFuse. A scopo illustrativo, l'esempio mostra AccountKey, SasKey e IdentityReference, ma in realtà è possibile specificare solo uno di questi metodi.
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 "
},
}
}
}
Per ottenere l'accesso predefinito alla directory montata BlobFuse, eseguire l'attività come amministratore. BlobFuse monta la directory nello spazio utente e alla creazione del pool monta la directory come root. In Linux tutte le attività amministrative sono eseguite dall'utente root. La pagina di riferimento FUSE descrive tutte le opzioni per il modulo FUSE.
Per altre informazioni e suggerimenti sull'uso di BlobFuse, vedere i riferimenti seguenti:
- Progetto Blobfuse2
- Domande frequenti sulla risoluzione dei problemi di Blobfuse
- Problemi di GitHub nel repository azure-storage-fuse
NFS
È possibile montare condivisioni NFS nei nodi del pool per consentire a Batch di accedere ai file system tradizionali. La configurazione può essere un singolo server NFS distribuito nel cloud o un server NFS locale a cui si accede tramite una rete virtuale. I montaggi NFS supportano Avere vFXT, una cache distribuita in memoria per attività HPC (High Performance Computing) a elevato utilizzo di dati. I montaggi NFS supportano anche altre interfacce conformi a NFS standard, ad esempio NFS per BLOB di Azure e NFS per File di Azure.
L'esempio seguente illustra una configurazione per un montaggio del file system NFS:
new PoolAddParameter
{
Id = poolId,
MountConfiguration = new[]
{
new MountConfiguration
{
NfsMountConfiguration = new NFSMountConfiguration
{
Source = "<source>",
RelativeMountPath = "<relative-mount-path>",
MountOptions = "options ver=3.0"
},
}
}
}
CIFS
Il montaggio di CIFS nei nodi del pool è un altro modo per fornire l'accesso ai file system tradizionali. CIFS è un protocollo di condivisione file che offre un meccanismo aperto e multipiattaforma per la richiesta di file e servizi del server di rete. CIFS si basa sulla versione avanzata del protocollo SMB per la condivisione di file Internet e Intranet.
Nell'esempio seguente viene illustrata una configurazione per un montaggio di file 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
Vuoi un esempio che utilizzi PowerShell invece di C#? È possibile trovare un altro ottimo esempio qui: Montare file di Azure nel pool di Azure Batch.