Připojení virtuálního systému souborů do fondu Batch

Upozornění

Tento článek odkazuje na CentOS, linuxovou distribuci, která se blíží stavu Konec životnosti (EOL). Zvažte své použití a plánování odpovídajícím způsobem. Další informace najdete v doprovodných materiálech CentOS End Of Life.

Azure Batch podporuje připojení cloudového úložiště nebo externího systému souborů ve výpočetních uzlech s Windows nebo Linuxem ve fondech Batch. Když výpočetní uzel připojí fond, virtuální systém souborů se připojí a bude na daném uzlu fungovat jako místní jednotka. Tento článek ukazuje, jak připojit virtuální systém souborů do fondu výpočetních uzlů pomocí knihovny pro správu služby Batch pro .NET.

Připojení systému souborů k fondu usnadňuje a zefektivňuje přístup k datům, než vyžaduje, aby úkoly získaly vlastní data z velké sdílené datové sady. Představte si scénář, kdy více úloh potřebuje přístup k společné sadě dat, jako je vykreslování videa. Každý úkol vykreslí jeden nebo více snímků najednou ze souborů scény. Připojením jednotky, která obsahuje soubory scény, je pro každý výpočetní uzel snadnější přístup ke sdíleným datům.

Můžete také zvolit základní systém souborů, který bude splňovat požadavky na výkon, v rámci operací vstupně-výstupních operací za sekundu (IOPS). Systém souborů můžete nezávisle škálovat na základě počtu výpočetních uzlů, které současně přistupují k datům.

Můžete například použít mezipaměť distribuované v paměti Avere vFXT , která podporuje vykreslování velkých filmů s tisíci souběžných uzlů vykreslování, které přistupují k místním zdrojovým datům. Nebo pro data, která už jsou v cloudovém úložišti objektů blob, můžete pomocí BlobFuse připojit data jako místní systém souborů. Azure Files poskytuje podobný pracovní postup jako BlobFuse a je k dispozici v systémech Windows i Linux.

Podporované konfigurace

Můžete připojit následující typy systémů souborů:

  • Soubory Azure
  • Azure Blob Storage
  • Systém souborů NFS (Network File System), včetně mezipaměti Avere vFXT
  • Common Internet File System (CIFS)

Služba Batch podporuje následující typy virtuálních systémů souborů pro agenty uzlů vytvořené pro příslušného vydavatele a nabídku.

Typ operačního systému Sdílená složka Azure Files Kontejner objektů blob Azure Připojení systému souborů NFS Připojení CIFS
Linux ✔️ ✔️ ✔️ ✔️
Windows ✔️

Poznámka:

Připojení virtuálního systému souborů není podporováno ve fondech batch vytvořených před 8. srpnem 2019.

Požadavky na síť

Pokud ve virtuální síti používáte připojení virtuálních souborů s fondy služby Batch, mějte na paměti následující požadavky a ujistěte se, že není blokovaný žádný požadovaný provoz. Další informace najdete v tématu Fondy batch ve virtuální síti.

  • Sdílené složky Azure Files vyžadují, aby byl otevřený port TCP 445 pro provoz do a ze značky storage služby. Další informace najdete v tématu Použití sdílené složky Azure s Windows.

  • Kontejnery objektů blob Azure vyžadují, aby byl otevřený port TCP 443 pro provoz do a ze značky storage služby. Virtuální počítače musí mít přístup ke https://packages.microsoft.com stažení blobfuse a gpg balíčků. V závislosti na konfiguraci možná budete potřebovat přístup k jiným adresám URL.

  • Systém souborů NFS (Network File System) ve výchozím nastavení vyžaduje přístup k portu 2049. Vaše konfigurace může mít jiné požadavky. Virtuální počítače musí mít přístup k příslušnému správci balíčků, aby mohly stáhnout nfs-common balíčky (pro Debian nebo Ubuntu) nebo nfs-utils (pro CentOS). Adresa URL se může lišit v závislosti na vaší verzi operačního systému. V závislosti na konfiguraci možná budete potřebovat přístup i k jiným adresám URL.

    Připojení služby Azure Blob nebo Azure Files prostřednictvím systému souborů NFS může mít více požadavků na síť. Výpočetní uzly můžou například potřebovat použít stejnou podsíť virtuální sítě jako účet úložiště.

  • Common Internet File System (CIFS) vyžaduje přístup k portu TCP 445. Aby mohly stáhnout cifs-utils balíček, musí mít virtuální počítače přístup k příslušnému správci balíčků. Adresa URL se může lišit v závislosti na vaší verzi operačního systému.

Konfigurace a implementace připojení

Připojení virtuálního systému souborů ve fondu zpřístupňuje systém souborů každému výpočetnímu uzlu ve fondu. Konfigurace systému souborů se provede, když výpočetní uzel připojí fond, restartuje nebo se znovu zmage.

Chcete-li připojit systém souborů do fondu, vytvoříte objekt MountConfiguration, který odpovídá vašemu virtuálnímu systému souborů: AzureBlobFileSystemConfiguration, AzureFileShareConfiguration, nebo .CifsMountConfigurationNfsMountConfiguration

Všechny objekty konfigurace připojení potřebují následující základní parametry. Některé konfigurace připojení mají specifické parametry pro konkrétní systém souborů, které jsou uvedeny v příkladech kódu podrobněji.

  • Název účtu nebo zdroj účtu úložiště.

  • Relativní cesta k připojení nebo zdroj, umístění systému souborů pro připojení k výpočetnímu uzlu vzhledem ke standardnímu adresáři \fsmounts přístupného přes AZ_BATCH_NODE_MOUNTS_DIR.

    Přesné umístění adresáře \fsmounts se liší v závislosti na operačním systému uzlu. Například umístění na uzlu Ubuntu se mapuje na mnt\batch\tasks\fsmounts. Na uzlu CentOS se umístění mapuje na mnt\resources\batch\tasks\fsmounts.

  • Možnosti připojení nebo možnosti BlobFuse, které popisují konkrétní parametry pro připojení systému souborů.

Při vytváření fondu a objektu MountConfiguration přiřadíte objekt vlastnosti MountConfigurationList . Připojení k systému souborů se stane, když uzel připojí fond, restartuje nebo se znovu zmage.

Agent Batch implementuje připojení odlišně ve Windows a Linuxu.

  • V Linuxu služba Batch nainstaluje balíček cifs-utils. Batch pak vydá příkaz mount.

  • Služba Batch ve Windows používá cmdkey k přidání přihlašovacích údajů k účtu Batch. Pak služba Batch vydá příkaz pro připojení prostřednictvím net usepříkazu . Příklad:

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

Připojení systému souborů vytvoří proměnnou AZ_BATCH_NODE_MOUNTS_DIRprostředí, která odkazuje na umístění připojeného systému souborů a souborů protokolu. Soubory protokolu můžete použít k řešení potíží a ladění.

Připojení sdílené složky Azure Files pomocí PowerShellu

Pomocí Azure PowerShellu můžete připojit sdílenou složku Azure Files do fondu služby Windows nebo Linux Batch. Následující postup vás provede konfigurací a připojením systému souborů sdílené složky Azure ve fondu Batch.

Důležité

Maximální počet připojených systémů souborů ve fondu je 10. Podrobnosti a další omezení najdete v tématu Kvóty a limity služby Batch.

Požadavky

  1. Přihlaste se ke svému předplatnému Azure a nahraďte zástupný symbol SVÝM ID předplatného.

    Connect-AzAccount -Subscription "<subscription-ID>"
    
  2. Získejte kontext pro svůj účet Batch. <batch-account-name> Zástupný symbol nahraďte názvem účtu Batch.

    $context = Get-AzBatchAccount -AccountName <batch-account-name>
    
  3. Vytvořte fond Batch s následujícím nastavením. <storage-account-name> Nahraďte symboly a <file-share-name><storage-account-key>zástupné symboly hodnotami z účtu úložiště, který je propojený s vaším účtem Batch. <pool-name> Zástupný symbol nahraďte požadovaným názvem fondu.

    Následující skript vytvoří fond s jedním Windows Serverem 2016 Datacenter, Standard_D2_V2 uzel velikosti a pak připojí sdílenou složku Azure k jednotce S uzlu.

    $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. Připojení k uzlu a zkontrolujte správnost výstupního souboru.

Přístup k připojeným souborům

Úlohy Služby Azure Batch mají přístup k připojeným souborům pomocí přímé cesty jednotky, například:

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

Agent Azure Batch uděluje přístup pouze pro úlohy Služby Azure Batch. Pokud se k uzlu připojujete pomocí protokolu RDP (Remote Desktop Protocol), nemá váš uživatelský účet automatický přístup k připojové jednotce. Když se připojíte k uzlu přes protokol RDP, musíte přidat přihlašovací údaje pro účet úložiště, aby měl přímý přístup k jednotce S .

Slouží cmdkey k přidání přihlašovacích údajů. <storage-account-name> Nahraďte zástupné <storage-account-key> symboly vlastními informacemi.

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

Řešení potíží s připojením

Pokud konfigurace připojení selže, výpočetní uzel selže a stav uzlu je nastavený na Nepoužitelné. Pokud chcete diagnostikovat selhání konfigurace připojení, zkontrolujte vlastnost ComputeNodeError , kde najdete podrobnosti o chybě.

K získání souborů protokolu pro ladění můžete použít rozhraní API OutputFiles k nahrání souborů *.log . Soubory *.log obsahují informace o připojení systému souborů v AZ_BATCH_NODE_MOUNTS_DIR umístění. Soubory protokolu připojení mají formát: <type-mountDirOrDrive><>.log pro každé připojení. Například připojení CIFS v adresáři připojení s názvem test má soubor protokolu připojení s názvem: cifs-test.log.

Zkoumání chyb připojení

K uzlu můžete použít protokol RDP nebo SSH a zkontrolovat soubory protokolu týkající se připojení systému souborů. Následující příklad chybové zprávy je možné, když se pokusíte připojit sdílenou složku Azure k uzlu 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

Pokud se zobrazí tato chyba, připojte se k uzlu pomocí protokolu RDP nebo SSH a zkontrolujte související soubory protokolů. Agent Batch implementuje připojení v systémech Windows a Linux odlišně pro sdílené složky Azure. V Linuxu služba Batch nainstaluje balíček cifs-utils. Batch pak vydá příkaz mount. Služba Batch ve Windows používá cmdkey k přidání přihlašovacích údajů k účtu Batch. Pak služba Batch vydá příkaz pro připojení prostřednictvím net usepříkazu . Příklad:

net use S: \\<storage-account-name>.file.core.windows.net\<fileshare> /u:AZURE\<storage-account-name> <storage-account-key>
  1. Připojení k uzlu přes protokol RDP.

  2. Otevřete soubor protokolu fshare-S.log v umístění D:\batch\tasks\fsmounts.

  3. Projděte si chybové zprávy, například:

    CMDKEY: Credential added successfully.
    System error 86 has occurred.
    
    The specified network password is not correct.
    
  4. Při řešení potíží s problémem použijte poradce při potížích se sdílenými složkami Azure.

Pokud nemůžete pomocí protokolu RDP nebo SSH zkontrolovat soubory protokolů na uzlu, můžete protokoly nahrát do účtu úložiště Azure. Tuto metodu můžete použít pro protokoly Windows i Linux.

  1. Na webu Azure Portal vyhledejte a vyberte účet Batch, který má váš fond.

  2. Na stránce účtu Batch vyberte fondy v levém navigačním panelu.

  3. Na stránce Fondy vyberte název fondu.

  4. Na stránce fondu vyberte v levém navigačním panelu uzly .

  5. Na stránce Uzly vyberte název uzlu.

  6. Na stránce uzlu vyberte Nahrát dávkové protokoly.

  7. V podokně Nahrát dávkové protokoly vyberte Vybrat kontejner úložiště.

  8. Na stránce Účty úložiště vyberte účet úložiště.

  9. Na stránce Kontejnery vyberte nebo vytvořte kontejner pro nahrání souborů a vyberte Vybrat.

  10. Vyberte Spustit nahrávání.

  11. Po dokončení nahrávání stáhněte soubory a otevřete agent-debug.log.

  12. Projděte si chybové zprávy, například:

    ..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. Při řešení potíží s problémem použijte poradce při potížích se sdílenými složkami Azure.

Ruční připojení sdílené složky pomocí PowerShellu

Pokud nemůžete diagnostikovat nebo opravit chyby připojení, můžete místo toho připojit sdílenou složku ručně pomocí PowerShellu.

  1. Vytvořte fond bez konfigurace připojení. Příklad:

    $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. Počkejte, až bude uzel ve stavu nečinnosti.

  3. Na webu Azure Portal vyhledejte a vyberte účet úložiště, který má vaši sdílenou složku.

  4. V nabídce účtu úložiště vyberte v levém navigačním panelu sdílené složky .

  5. Na stránce Sdílené složky vyberte sdílenou složku, kterou chcete připojit.

  6. Na stránce sdílené složky vyberte Připojení.

  7. V podokně Připojení vyberte kartu Windows.

  8. Jako písmeno jednotky zadejte jednotku, kterou chcete použít. Výchozí hodnota je Z.

  9. Pro metodu ověřování vyberte, jak se chcete připojit ke sdílené složce.

  10. Vyberte Zobrazit skript a zkopírujte skript PowerShellu pro připojení sdílené složky.

  11. Připojení k uzlu přes protokol RDP.

  12. Spuštěním příkazu, který jste zkopírovali, připojte sdílenou složku.

  13. Všimněte si všech chybových zpráv ve výstupu. Tyto informace použijte k řešení potíží souvisejících se sítí.

Příklady konfigurací připojení

Následující ukázkové konfigurace kódu ukazují připojení různých systémů sdílených složek do fondu výpočetních uzlů.

Sdílená složka Azure Files

Azure Files je standardní nabídka cloudového systému souborů Azure. Následující konfigurace připojí sdílenou složku Azure Files pojmenovanou <file-share-name> k jednotce S . Informace o parametrech v tomto příkladu najdete v tématu Připojení sdílené složky SMB Azure ve Windows nebo vytvoření sdílené složky Azure NFS a jeho připojení k virtuálnímu počítači s Linuxem pomocí webu 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"
            },
        }
    }
}

Kontejner objektů blob Azure

Další možností je použít službu Azure Blob Storage prostřednictvím BlobFuse. Připojení systému souborů blob vyžaduje klíč účtu, klíč sdíleného přístupového podpisu (SAS) nebo spravovanou identitu s přístupem k vašemu účtu úložiště.

Informace o získání těchto klíčů nebo identity najdete v následujících článcích:

Následující konfigurace připojí systém souborů objektů blob s možnostmi BlobFuse. Pro ilustrační účely ukazuje příklad AccountKeySasKey a IdentityReference, ale ve skutečnosti můžete zadat pouze jednu z těchto metod.

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

Pokud chcete získat výchozí přístup k připojenému adresáři BlobFuse, spusťte úlohu jako správce. BlobFuse připojí adresář v uživatelském prostoru a při vytváření fondu připojí adresář jako kořen. V Linuxu jsou všechny úlohy správce kořenové. Referenční stránka FUSE popisuje všechny možnosti modulu FUSE.

Další informace a tipy k používání blobFuse najdete v následujících odkazech:

NFS

Sdílené složky NFS můžete připojit k uzlům fondu, abyste službě Batch umožnili přístup k tradičním systémům souborů. Nastavení může být jeden server NFS nasazený v cloudu nebo místní server NFS přístupný přes virtuální síť. Připojení NFS podporují Avere vFXT, distribuovanou mezipaměť v paměti pro úlohy vysokovýkonné výpočetní prostředí (HPC) náročné na data. Připojení NFS také podporují další standardní rozhraní kompatibilní se systémem souborů NFS, jako je nfs pro objekty blob Azure a systém souborů NFS pro Službu Azure Files.

Následující příklad ukazuje konfiguraci připojení systému souborů NFS:

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

CIFS

Připojení CIFS k uzlům fondu je dalším způsobem, jak poskytnout přístup k tradičním systémům souborů. CIFS je protokol pro sdílení souborů, který poskytuje otevřený a multiplatformní mechanismus pro vyžádání souborů a služeb síťového serveru. CIFS je založená na vylepšené verzi protokolu SMB pro sdílení souborů v internetu a intranetu.

Následující příklad ukazuje konfiguraci připojení souboru 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>"
            },
        }
    }
}

Poznámka:

Hledáte příklad použití PowerShellu místo jazyka C#? Další skvělý příklad najdete tady: Připojení služby Azure File k fondu Azure Batch.

Další kroky