Een virtueel bestandssysteem koppelen aan een Batch-groep

Let op

In dit artikel wordt verwezen naar CentOS, een Linux-distributie die de status End Of Life (EOL) nadert. Overweeg uw gebruik en planning dienovereenkomstig. Zie de Richtlijnen voor het einde van de levensduur van CentOS voor meer informatie.

Azure Batch ondersteunt het koppelen van cloudopslag of een extern bestandssysteem op Windows- of Linux-rekenknooppunten in Batch-pools. Wanneer een rekenknooppunt lid wordt van de pool, koppelt het virtuele bestandssysteem en fungeert het als een lokaal station op dat knooppunt. In dit artikel leest u hoe u een virtueel bestandssysteem koppelt aan een pool rekenknooppunten met behulp van de Batch-beheerbibliotheek voor .NET.

Het koppelen van het bestandssysteem aan de pool maakt het openen van gegevens eenvoudiger en efficiënter dan het vereisen van taken om hun eigen gegevens op te halen uit een grote gedeelde gegevensset. Overweeg een scenario waarin meerdere taken toegang nodig hebben tot een gemeenschappelijke set gegevens, zoals het weergeven van een film. Elke taak geeft een of meer frames tegelijk weer vanuit de scènebestanden. Door een station te koppelen dat de scènebestanden bevat, is het eenvoudiger voor elk rekenknooppunt om toegang te krijgen tot de gedeelde gegevens.

U kunt ook het onderliggende bestandssysteem kiezen om te voldoen aan de vereisten voor prestaties en invoer-/uitvoerbewerkingen per seconde (IOPS). U kunt het bestandssysteem onafhankelijk schalen op basis van het aantal rekenknooppunten dat gelijktijdig toegang heeft tot de gegevens.

U kunt bijvoorbeeld een gedistribueerde cache van Avere vFXT gebruiken ter ondersteuning van grootschalige renders op filmschaal met duizenden gelijktijdige renderknooppunten die toegang hebben tot on-premises brongegevens. Of voor gegevens die zich al in de cloud-blobopslag bevinden, kunt u BlobFuse gebruiken om de gegevens te koppelen als een lokaal bestandssysteem. Azure Files biedt een vergelijkbare werkstroom als blobFuse en is beschikbaar in zowel Windows als Linux.

Ondersteunde configuraties

U kunt de volgende typen bestandssystemen koppelen:

  • Azure Files
  • Azure Blob Storage
  • Network File System (NFS), inclusief een Avere vFXT-cache
  • Common Internet File System (CIFS)

Batch ondersteunt de volgende typen virtuele bestandssysteemen voor knooppuntagents die worden geproduceerd voor hun respectieve uitgever en aanbieding.

Type besturingssysteem Azure Files-share Azure Blob-container NFS-koppeling CIFS-koppeling
Linux ✔️ ✔️ ✔️ ✔️
Windows ✔️

Notitie

Het koppelen van een virtueel bestandssysteem wordt niet ondersteund in Batch-pools die vóór 8 augustus 2019 zijn gemaakt.

Netwerkvereisten

Wanneer u virtuele bestandskoppelingen gebruikt met Batch-pools in een virtueel netwerk, moet u rekening houden met de volgende vereisten en ervoor zorgen dat er geen vereist verkeer wordt geblokkeerd. Zie Batch-pools in een virtueel netwerk voor meer informatie.

  • Voor Azure Files-shares moet TCP-poort 445 zijn geopend voor verkeer van en naar de storage servicetag. Zie Een Azure-bestandsshare gebruiken met Windows voor meer informatie.

  • Voor Azure Blob-containers moet TCP-poort 443 zijn geopend voor verkeer van en naar de storage servicetag. Virtuele machines (VM's) moeten toegang hebben om de blobfuse en gpg pakketten te https://packages.microsoft.com kunnen downloaden. Afhankelijk van uw configuratie hebt u mogelijk toegang nodig tot andere URL's.

  • Network File System (NFS) vereist standaard toegang tot poort 2049. Uw configuratie heeft mogelijk andere vereisten. VM's moeten toegang hebben tot de juiste pakketbeheerder om de nfs-common pakketten (voor Debian of Ubuntu) of nfs-utils (voor CentOS) te downloaden. De URL kan variëren op basis van uw versie van het besturingssysteem. Afhankelijk van uw configuratie hebt u mogelijk ook toegang nodig tot andere URL's.

    Het koppelen van Azure Blob of Azure Files via NFS kan meer netwerkvereisten hebben. Uw rekenknooppunten moeten bijvoorbeeld hetzelfde subnet van het virtuele netwerk gebruiken als het opslagaccount.

  • Common Internet File System (CIFS) vereist toegang tot TCP-poort 445. VM's moeten toegang hebben tot het juiste pakketbeheer om het cifs-utils pakket te kunnen downloaden. De URL kan variëren op basis van uw versie van het besturingssysteem.

Configuratie en implementatie koppelen

Door een virtueel bestandssysteem in een pool te koppelen, is het bestandssysteem beschikbaar voor elk rekenknooppunt in de pool. Configuratie voor het bestandssysteem vindt plaats wanneer een rekenknooppunt lid wordt van een pool, opnieuw wordt opgestart of opnieuw wordt gemaakt.

Als u een bestandssysteem aan een pool wilt koppelen, maakt u een MountConfiguration-object dat overeenkomt met uw virtuele bestandssysteem: AzureBlobFileSystemConfiguration, AzureFileShareConfiguration, NfsMountConfigurationof CifsMountConfiguration.

Alle configuratieobjecten voor koppelen hebben de volgende basisparameters nodig. Sommige configuraties voor koppelen hebben specifieke parameters voor het specifieke bestandssysteem, die de codevoorbeelden in meer detail presenteren.

  • Accountnaam of bron van het opslagaccount.

  • Relatief koppelpad of bron, de locatie van het bestandssysteem die moet worden gekoppeld op het rekenknooppunt, ten opzichte van de standaardmap \fsmounts die toegankelijk is via AZ_BATCH_NODE_MOUNTS_DIR.

    De exacte locatie van de map \fsmounts varieert afhankelijk van het knooppunt-besturingssysteem. De locatie op een Ubuntu-knooppunt wordt bijvoorbeeld toegewezen aan mnt\batch\tasks\fsmounts. Op een CentOS-knooppunt wordt de locatie toegewezen aan mnt\resources\batch\tasks\fsmounts.

  • Koppelopties of BlobFuse-opties die specifieke parameters beschrijven voor het koppelen van een bestandssysteem.

Wanneer u de pool en het MountConfiguration object maakt, wijst u het object toe aan de MountConfigurationList eigenschap. Koppelen voor het bestandssysteem gebeurt wanneer een knooppunt lid wordt van de pool, opnieuw wordt opgestart of opnieuw wordt gemaakt.

De Batch-agent implementeert een andere koppeling in Windows en Linux.

  • In Linux installeert Batch het pakket cifs-utils. Vervolgens geeft Batch de koppelingsopdracht uit.

  • In Windows gebruikt cmdkey Batch om uw Batch-accountreferenties toe te voegen. Vervolgens voert Batch de koppelingsopdracht uit.net use Voorbeeld:

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

Het koppelen van het bestandssysteem maakt een omgevingsvariabele AZ_BATCH_NODE_MOUNTS_DIR, die verwijst naar de locatie van het gekoppelde bestandssysteem en logboekbestanden. U kunt de logboekbestanden gebruiken voor probleemoplossing en foutopsporing.

Een Azure Files-share koppelen met PowerShell

U kunt Azure PowerShell gebruiken om een Azure Files-share te koppelen aan een Windows- of Linux Batch-pool. De volgende procedure begeleidt u bij het configureren en koppelen van een Azure-bestandssysteem voor bestandsshares in een Batch-pool.

Belangrijk

Het maximum aantal gekoppelde bestandssystemen in een groep is 10. Zie Quota en limieten voor Batch-services voor meer informatie en andere limieten.

Vereisten

  • Een Azure-account met een actief abonnement.
  • Azure PowerShell geïnstalleerd of Azure Cloud Shell gebruiken en PowerShell selecteren voor de interface.
  • Een bestaand Batch-account met een gekoppeld Azure Storage-account met een bestandsshare.
  1. Meld u aan bij uw Azure-abonnement en vervang de tijdelijke aanduiding door uw abonnements-id.

    Connect-AzAccount -Subscription "<subscription-ID>"
    
  2. Haal de context voor uw Batch-account op. Vervang de tijdelijke aanduiding door de <batch-account-name> naam van uw Batch-account.

    $context = Get-AzBatchAccount -AccountName <batch-account-name>
    
  3. Maak een Batch-pool met de volgende instellingen. Vervang de <storage-account-name> tijdelijke <storage-account-key>aanduidingen en <file-share-name> tijdelijke aanduidingen door de waarden van het opslagaccount dat is gekoppeld aan uw Batch-account. Vervang de <pool-name> tijdelijke aanduiding door de gewenste naam voor de pool.

    Met het volgende script maakt u een pool met één Windows Server 2016 Datacenter, Standard_D2_V2 grootteknooppunt en koppelt u vervolgens de Azure-bestandsshare aan het S-station van het knooppunt.

    $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. Verbinding maken naar het knooppunt en controleer of het uitvoerbestand juist is.

Toegang tot de gekoppelde bestanden

Azure Batch-taken hebben toegang tot de gekoppelde bestanden met behulp van het directe pad van het station, bijvoorbeeld:

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

De Azure Batch-agent verleent alleen toegang voor Azure Batch-taken. Als u Remote Desktop Protocol (RDP) gebruikt om verbinding te maken met het knooppunt, heeft uw gebruikersaccount geen automatische toegang tot het koppelstation. Wanneer u via RDP verbinding maakt met het knooppunt, moet u referenties voor het opslagaccount toevoegen om rechtstreeks toegang te krijgen tot het S-station .

Gebruik cmdkey dit om de referenties toe te voegen. Vervang de <storage-account-name> tijdelijke aanduidingen door <storage-account-key> uw eigen gegevens.

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

Problemen met koppelen oplossen

Als een koppelingsconfiguratie mislukt, mislukt het rekenknooppunt en wordt de status van het knooppunt ingesteld op Onbruikbaar. Als u een fout in de koppelingsconfiguratie wilt vaststellen, inspecteert u de eigenschap ComputeNodeError voor meer informatie over de fout.

Als u logboekbestanden wilt ophalen voor foutopsporing, kunt u de OutputFiles-API gebruiken om de *.log-bestanden te uploaden. De *.log-bestanden bevatten informatie over de koppeling van het bestandssysteem op de AZ_BATCH_NODE_MOUNTS_DIR locatie. Logboekbestanden koppelen hebben de indeling: <type-mountDirOrDrive>><.log voor elke koppeling. Een CIFS-koppeling op een koppelmap met de naam test heeft bijvoorbeeld een koppelingslogboekbestand met de naam: cifs-test.log.

Koppelingsfouten onderzoeken

U kunt RDP of SSH naar het knooppunt om de logboekbestanden met betrekking tot bestandssysteemkoppelingen te controleren. Het volgende voorbeeldfoutbericht is mogelijk wanneer u een Azure-bestandsshare probeert te koppelen aan een Batch-knooppunt:

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

Als u deze fout krijgt, gebruikt u RDP of SSH voor het knooppunt om de gerelateerde logboekbestanden te controleren. De Batch-agent implementeert een andere koppeling in Windows en Linux voor Azure-bestandsshares. In Linux installeert Batch het pakket cifs-utils. Vervolgens geeft Batch de koppelingsopdracht uit. In Windows gebruikt cmdkey Batch om uw Batch-accountreferenties toe te voegen. Vervolgens voert Batch de koppelingsopdracht uit.net use Voorbeeld:

net use S: \\<storage-account-name>.file.core.windows.net\<fileshare> /u:AZURE\<storage-account-name> <storage-account-key>
  1. Verbinding maken naar het knooppunt via RDP.

  2. Open het logboekbestand fshare-S.log op D:\batch\tasks\fsmounts.

  3. Bekijk de foutberichten, bijvoorbeeld:

    CMDKEY: Credential added successfully.
    System error 86 has occurred.
    
    The specified network password is not correct.
    
  4. Los het probleem op met behulp van de probleemoplosser voor Azure-bestandsshares.

Als u RDP of SSH niet kunt gebruiken om de logboekbestanden op het knooppunt te controleren, kunt u de logboeken uploaden naar uw Azure-opslagaccount. U kunt deze methode gebruiken voor zowel Windows- als Linux-logboeken.

  1. Zoek en selecteer in Azure Portal het Batch-account met uw pool.

  2. Selecteer Pools in de linkernavigatiebalk op de pagina Batch-account.

  3. Selecteer op de pagina Pools de naam van de pool.

  4. Selecteer op de pagina van de pool Knooppunten in het linkernavigatievenster.

  5. Selecteer op de pagina Knooppunten de naam van het knooppunt.

  6. Selecteer Batchlogboeken uploaden op de pagina van het knooppunt.

  7. Selecteer Opslagcontainer kiezen in het deelvenster Batchlogboeken uploaden.

  8. Selecteer een opslagaccount op de pagina Opslagaccounts .

  9. Selecteer of maak op de pagina Containers een container om de bestanden naar te uploaden en selecteer Selecteren.

  10. Selecteer Uploaden starten.

  11. Wanneer het uploaden is voltooid, downloadt u de bestanden en opent u agent-debug.log.

  12. Bekijk de foutberichten, bijvoorbeeld:

    ..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. Los het probleem op met behulp van de probleemoplosser voor Azure-bestandsshares.

De Azure-bestandsshare koppelen met PowerShell

Als u geen koppelingsfouten kunt vaststellen of oplossen, kunt u PowerShell gebruiken om de bestandsshare handmatig te koppelen.

  1. Maak een pool zonder koppelingsconfiguratie. Voorbeeld:

    $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. Wacht tot het knooppunt de status Niet-actief heeft.

  3. Zoek en selecteer in Azure Portal het opslagaccount met uw bestandsshare.

  4. Selecteer in het menu van de opslagaccountpagina bestandsshares in het linkernavigatievenster.

  5. Selecteer op de pagina Bestandsshares de bestandsshare die u wilt koppelen.

  6. Selecteer Verbinding maken op de pagina van de bestandsshare.

  7. Selecteer in het deelvenster Verbinding maken het tabblad Windows.

  8. Voer voor de stationsletter het station in dat u wilt gebruiken. De standaardwaarde is Z.

  9. Selecteer voor de verificatiemethode hoe u verbinding wilt maken met de bestandsshare.

  10. Selecteer Script weergeven en kopieer het PowerShell-script om de bestandsshare te koppelen.

  11. Verbinding maken naar het knooppunt via RDP.

  12. Voer de opdracht uit die u hebt gekopieerd om de bestandsshare te koppelen.

  13. Noteer eventuele foutberichten in de uitvoer. Gebruik deze informatie om eventuele netwerkproblemen op te lossen.

Voorbeeldconfiguraties voor koppelen

In de volgende codevoorbeeldconfiguraties ziet u hoe u verschillende systemen voor bestandsshares kunt koppelen aan een groep rekenknooppunten.

Azure Files-share

Azure Files is het standaardaanbod van het Azure-cloudbestandssysteem. Met de volgende configuratie wordt een Azure Files-share met de naam gekoppeld <file-share-name> aan het S-station . Zie SMB Azure-bestandsshare koppelen in Windows of Een NFS Azure-bestandsshare maken en koppelen op een Virtuele Linux-machine met behulp van Azure Portal voor meer informatie over de parameters in het voorbeeld.

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

Azure Blob-container

Een andere optie is om Azure Blob Storage te gebruiken via BlobFuse. Voor het koppelen van een blobbestandssysteem is een sas-sleutel (Shared Access Signature) of een beheerde identiteit met toegang tot uw opslagaccount vereist.

Zie de volgende artikelen voor meer informatie over het ophalen van deze sleutels of identiteiten:

Met de volgende configuratie wordt een blobbestandssysteem gekoppeld met BlobFuse-opties. Ter illustratie toont AccountKeySasKey het voorbeeld enIdentityReference, maar u kunt slechts één van deze methoden opgeven.

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

Als u standaardtoegang wilt krijgen tot de gekoppelde blobFuse-map, voert u de taak uit als beheerder. BlobFuse koppelt de map aan de gebruikersruimte en bij het maken van een pool wordt de map als hoofdmap toegevoegd. In Linux zijn alle beheerderstaken hoofdtaken. De FUSE-referentiepagina beschrijft alle opties voor de FUSE-module.

Zie de volgende verwijzingen voor meer informatie en tips over het gebruik van BlobFuse:

NFS

U kunt NFS-shares koppelen aan poolknooppunten om Batch toegang te geven tot traditionele bestandssystemen. De installatie kan één NFS-server zijn die is geïmplementeerd in de cloud of een on-premises NFS-server die via een virtueel netwerk wordt geopend. NFS-koppelingen ondersteunen Avere vFXT, een gedistribueerde cache in het geheugen voor gegevensintensieve HPC-taken (High Performance Computing). NFS-koppelingen ondersteunen ook andere standaardinterfaces die compatibel zijn met NFS, zoals NFS voor Azure Blob en NFS voor Azure Files.

In het volgende voorbeeld ziet u een configuratie voor een NFS-bestandssysteemkoppeling:

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

CIFS

Het koppelen van CIFS aan poolknooppunten is een andere manier om toegang te bieden tot traditionele bestandssystemen. CIFS is een protocol voor het delen van bestanden dat een open en platformoverschrijdend mechanisme biedt voor het aanvragen van netwerkserverbestanden en -services. CIFS is gebaseerd op de verbeterde versie van het SMB-protocol voor het delen van internet- en intranetbestanden.

In het volgende voorbeeld ziet u een configuratie voor een CIFS-bestandskoppeling.

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

Notitie

Zoekt u een voorbeeld met PowerShell in plaats van C#? U kunt hier nog een goed voorbeeld vinden: Azure File koppelen aan Azure Batch-pool.

Volgende stappen