Instalowanie wirtualnego systemu plików w puli usługi Batch

Uwaga

W tym artykule odwołuje się do systemu CentOS — dystrybucji systemu Linux, która zbliża się do stanu zakończenia życia (EOL). Rozważ odpowiednie użycie i planowanie. Aby uzyskać więcej informacji, zobacz wskazówki dotyczące zakończenia życia systemu CentOS.

Usługa Azure Batch obsługuje instalowanie magazynu w chmurze lub zewnętrznego systemu plików w węzłach obliczeniowych systemu Windows lub Linux w pulach usługi Batch. Gdy węzeł obliczeniowy dołącza do puli, wirtualny system plików instaluje i działa jako dysk lokalny w tym węźle. W tym artykule pokazano, jak zainstalować wirtualny system plików w puli węzłów obliczeniowych przy użyciu biblioteki zarządzania usługi Batch dla platformy .NET.

Instalowanie systemu plików w puli sprawia, że uzyskiwanie dostępu do danych jest łatwiejsze i bardziej wydajne niż wymaganie od zadań pobierania własnych danych z dużego udostępnionego zestawu danych. Rozważmy scenariusz, w którym wiele zadań wymaga dostępu do wspólnego zestawu danych, takiego jak renderowanie filmu. Każde zadanie renderuje jedną lub więcej ramek jednocześnie z plików sceny. Zainstalowanie dysku zawierającego pliki sceny ułatwia każdemu węzłowi obliczeniowemu dostęp do udostępnionych danych.

Ponadto możesz wybrać bazowy system plików, aby spełnić wymagania dotyczące wydajności, operacji wejściowych/wyjściowych na sekundę (IOPS). Można niezależnie skalować system plików na podstawie liczby węzłów obliczeniowych, które jednocześnie uzyskują dostęp do danych.

Na przykład można użyć rozproszonej pamięci podręcznej Avere vFXT w pamięci, aby obsługiwać renderowanie na dużą skalę filmów z tysiącami współbieżnych węzłów renderowania, które uzyskują dostęp do lokalnych danych źródłowych. W przypadku danych, które są już w magazynie obiektów blob opartych na chmurze, możesz użyć narzędzia BlobFuse , aby zainstalować dane jako lokalny system plików. Usługa Azure Files udostępnia podobny przepływ pracy do obiektu BlobFuse i jest dostępny zarówno w systemach Windows, jak i Linux.

Obsługiwane konfiguracje

Można zainstalować następujące typy systemów plików:

  • Azure Files
  • Azure Blob Storage
  • System plików sieciowych (NFS), w tym pamięć podręczna Avere vFXT
  • Wspólny internetowy system plików (CIFS)

Usługa Batch obsługuje następujące typy wirtualnych systemów plików dla agentów węzłów utworzonych dla odpowiedniego wydawcy i oferty.

Typ systemu operacyjnego Udział usługi Azure Files Kontener obiektów blob platformy Azure Instalowanie systemu plików NFS Instalacja CIFS
Linux ✔️ ✔️ ✔️ ✔️
Windows ✔️

Uwaga

Instalowanie wirtualnego systemu plików nie jest obsługiwane w pulach usługi Batch utworzonych przed 8 sierpnia 2019 r.

Wymagania dotyczące sieci

W przypadku korzystania z instalacji plików wirtualnych z pulami usługi Batch w sieci wirtualnej należy pamiętać o następujących wymaganiach i upewnić się, że żaden wymagany ruch nie jest blokowany. Aby uzyskać więcej informacji, zobacz Batch pools in a virtual network (Pule usługi Batch w sieci wirtualnej).

  • Udziały usługi Azure Files wymagają otwarcia portu TCP 445 dla ruchu do i z tagu storage usługi. Aby uzyskać więcej informacji, zobacz Używanie udziału plików platformy Azure z systemem Windows.

  • Kontenery obiektów blob platformy Azure wymagają otwarcia portu TCP 443 dla ruchu do i z tagu storage usługi. Maszyny wirtualne muszą mieć dostęp do https://packages.microsoft.com pobierania blobfuse pakietów i gpg . W zależności od konfiguracji może być potrzebny dostęp do innych adresów URL.

  • System plików sieciowych (NFS) domyślnie wymaga dostępu do portu 2049. Konfiguracja może mieć inne wymagania. Maszyny wirtualne muszą mieć dostęp do odpowiedniego menedżera pakietów, aby pobrać nfs-common pakiety (dla systemu Debian lub Ubuntu) lub nfs-utils (dla systemu CentOS). Adres URL może się różnić w zależności od wersji systemu operacyjnego. W zależności od konfiguracji może być również potrzebny dostęp do innych adresów URL.

    Instalowanie usługi Azure Blob lub Azure Files za pośrednictwem systemu plików NFS może mieć więcej wymagań dotyczących sieci. Na przykład węzły obliczeniowe mogą wymagać użycia tej samej podsieci sieci wirtualnej co konto magazynu.

  • Wspólny internetowy system plików (CIFS) wymaga dostępu do portu TCP 445. Aby pobrać pakiet, maszyny wirtualne muszą mieć dostęp do odpowiedniego cifs-utils menedżera pakietów. Adres URL może się różnić w zależności od wersji systemu operacyjnego.

Instalowanie konfiguracji i implementacji

Instalowanie wirtualnego systemu plików w puli sprawia, że system plików jest dostępny dla każdego węzła obliczeniowego w puli. Konfiguracja systemu plików ma miejsce, gdy węzeł obliczeniowy dołącza do puli, uruchamia ponownie lub jest odtwarzany ponownie.

Aby zainstalować system plików w puli, należy utworzyć obiekt MountConfiguration zgodny z wirtualnym systemem plików: AzureBlobFileSystemConfiguration, , AzureFileShareConfigurationNfsMountConfigurationlub CifsMountConfiguration.

Wszystkie obiekty konfiguracji instalacji wymagają następujących podstawowych parametrów. Niektóre konfiguracje instalacji mają określone parametry dla określonego systemu plików, które przedstawiono bardziej szczegółowo w przykładach kodu.

  • Nazwa konta lub źródło konta magazynu.

  • Względna ścieżka instalacji lub źródło, lokalizacja systemu plików do zainstalowania w węźle obliczeniowym względem standardowego katalogu \fsmounts dostępnego za pośrednictwem programu AZ_BATCH_NODE_MOUNTS_DIR.

    Dokładna lokalizacja katalogu \fsmounts różni się w zależności od systemu operacyjnego węzła. Na przykład lokalizacja w węźle Ubuntu mapuje się na mnt\batch\tasks\fsmounts. W węźle CentOS lokalizacja jest mapowania na mnt\resources\batch\tasks\fsmounts.

  • Opcje instalacji lub opcje blobFuse, które opisują określone parametry instalowania systemu plików.

Podczas tworzenia puli i MountConfiguration obiektu należy przypisać obiekt do MountConfigurationList właściwości . Instalowanie systemu plików odbywa się, gdy węzeł dołącza do puli, uruchamia się ponownie lub jest odtwarzany ponownie.

Agent usługi Batch implementuje instalowanie inaczej w systemach Windows i Linux.

  • W systemie Linux usługa Batch instaluje pakiet cifs-utils. Następnie usługa Batch wystawia polecenie instalacji.

  • W systemie Windows usługa Batch używa cmdkey polecenia do dodawania poświadczeń konta usługi Batch. Następnie usługa Batch wystawia polecenie instalacji za pomocą polecenia net use. Na przykład:

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

Instalowanie systemu plików tworzy zmienną środowiskową AZ_BATCH_NODE_MOUNTS_DIR, która wskazuje lokalizację zainstalowanego systemu plików i plików dziennika. Pliki dziennika można używać do rozwiązywania problemów i debugowania.

Instalowanie udziału usługi Azure Files za pomocą programu PowerShell

Za pomocą programu Azure PowerShell można zainstalować udział usługi Azure Files w puli usługi Batch systemu Windows lub Linux. Poniższa procedura przeprowadzi Cię przez proces konfigurowania i instalowania systemu plików udziału plików platformy Azure w puli usługi Batch.

Ważne

Maksymalna liczba zainstalowanych systemów plików w puli wynosi 10. Aby uzyskać szczegółowe informacje i inne limity, zobacz Limity przydziału i limity usługi Batch.

Wymagania wstępne

  1. Zaloguj się do subskrypcji platformy Azure, zastępując symbol zastępczy identyfikatorem subskrypcji.

    Connect-AzAccount -Subscription "<subscription-ID>"
    
  2. Pobierz kontekst konta usługi Batch. Zastąp <batch-account-name> symbol zastępczy nazwą konta usługi Batch.

    $context = Get-AzBatchAccount -AccountName <batch-account-name>
    
  3. Utwórz pulę usługi Batch z następującymi ustawieniami. <storage-account-name> Zastąp symbole zastępcze , <storage-account-key>i <file-share-name> wartościami z konta magazynu połączonego z kontem usługi Batch. Zastąp <pool-name> symbol zastępczy nazwą, która ma być używana dla puli.

    Poniższy skrypt tworzy pulę z jednym centrum danych systemu Windows Server 2016, Standard_D2_V2 węzłem rozmiaru, a następnie instaluje udział plików platformy Azure na dysku S węzła.

    $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. Połączenie do węzła i sprawdź, czy plik wyjściowy jest poprawny.

Uzyskiwanie dostępu do zainstalowanych plików

Zadania usługi Azure Batch mogą uzyskiwać dostęp do zainstalowanych plików przy użyciu ścieżki bezpośredniej dysku, na przykład:

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

Agent usługi Azure Batch udziela dostępu tylko dla zadań usługi Azure Batch. Jeśli używasz protokołu RDP (Remote Desktop Protocol) do nawiązywania połączenia z węzłem, konto użytkownika nie ma automatycznego dostępu do dysku instalowania. Po nawiązaniu połączenia z węzłem za pośrednictwem protokołu RDP należy dodać poświadczenia dla konta magazynu, aby uzyskać bezpośredni dostęp do dysku S .

Użyj cmdkey polecenia , aby dodać poświadczenia. <storage-account-name> Zastąp symbole zastępcze i <storage-account-key> własnymi informacjami.

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

Rozwiązywanie problemów z instalacją

Jeśli konfiguracja instalacji nie powiedzie się, węzeł obliczeniowy ulegnie awarii, a stan węzła zostanie ustawiony na Wartość Niezdatne do użycia. Aby zdiagnozować błąd konfiguracji instalacji, sprawdź właściwość ComputeNodeError , aby uzyskać szczegółowe informacje na temat błędu.

Aby pobrać pliki dziennika na potrzeby debugowania, możesz użyć interfejsu API OutputFiles , aby przekazać pliki *.log . Pliki *.log zawierają informacje o instalacji systemu plików w AZ_BATCH_NODE_MOUNTS_DIR lokalizacji. Pliki dziennika instalacji mają format: <type-mountDirOrDrive><>.log dla każdej instalacji. Na przykład instalacja CIFS w katalogu instalacji o nazwie test zawiera plik dziennika instalacji o nazwie: cifs-test.log.

Badanie błędów instalowania

Możesz połączyć się z węzłem za pomocą protokołu RDP lub SSH, aby sprawdzić pliki dziennika dotyczące instalacji systemu plików. Poniższy przykładowy komunikat o błędzie jest możliwy podczas próby zainstalowania udziału plików platformy Azure w węźle usługi 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

Jeśli wystąpi ten błąd, połączenie RDP lub SSH z węzłem w celu sprawdzenia powiązanych plików dziennika. Agent usługi Batch implementuje instalowanie inaczej w systemach Windows i Linux dla udziałów plików platformy Azure. W systemie Linux usługa Batch instaluje pakiet cifs-utils. Następnie usługa Batch wystawia polecenie instalacji. W systemie Windows usługa Batch używa cmdkey polecenia do dodawania poświadczeń konta usługi Batch. Następnie usługa Batch wystawia polecenie instalacji za pomocą polecenia net use. Na przykład:

net use S: \\<storage-account-name>.file.core.windows.net\<fileshare> /u:AZURE\<storage-account-name> <storage-account-key>
  1. Połączenie do węzła za pośrednictwem protokołu RDP.

  2. Otwórz plik dziennika fshare-S.log w folderze D:\batch\tasks\fsmounts.

  3. Przejrzyj komunikaty o błędach, na przykład:

    CMDKEY: Credential added successfully.
    System error 86 has occurred.
    
    The specified network password is not correct.
    
  4. Rozwiąż problem przy użyciu narzędzia do rozwiązywania problemów z udziałami plików platformy Azure.

Jeśli nie możesz użyć protokołu RDP lub SSH do sprawdzenia plików dziennika w węźle, możesz przekazać dzienniki na konto usługi Azure Storage. Tej metody można użyć zarówno dla dzienników systemu Windows, jak i Linux.

  1. W witrynie Azure Portal wyszukaj i wybierz konto usługi Batch, które ma pulę.

  2. Na stronie Konto usługi Batch wybierz pozycję Pule w obszarze nawigacji po lewej stronie.

  3. Na stronie Pule wybierz nazwę puli.

  4. Na stronie puli wybierz pozycję Węzły w obszarze nawigacji po lewej stronie.

  5. Na stronie Węzły wybierz nazwę węzła.

  6. Na stronie węzła wybierz pozycję Przekaż dzienniki wsadowe.

  7. W okienku Przekazywanie dzienników wsadowych wybierz pozycję Wybierz kontener magazynu.

  8. Na stronie Konta magazynu wybierz konto magazynu.

  9. Na stronie Kontenery wybierz lub utwórz kontener do przekazania plików, a następnie wybierz pozycję Wybierz.

  10. Wybierz pozycję Rozpocznij przekazywanie.

  11. Po zakończeniu przekazywania pobierz pliki i otwórz agent-debug.log.

  12. Przejrzyj komunikaty o błędach, na przykład:

    ..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. Rozwiąż problem przy użyciu narzędzia do rozwiązywania problemów z udziałami plików platformy Azure.

Ręczne Instalowanie udziału plików za pomocą programu PowerShell

Jeśli nie możesz zdiagnozować lub naprawić błędów instalowania, możesz użyć programu PowerShell, aby zainstalować udział plików ręcznie.

  1. Utwórz pulę bez konfiguracji instalowania. Na przykład:

    $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. Poczekaj, aż węzeł będzie w stanie bezczynności .

  3. W witrynie Azure Portal wyszukaj i wybierz konto magazynu, które ma udział plików.

  4. W menu strony konta magazynu wybierz pozycję Udziały plików w obszarze nawigacji po lewej stronie.

  5. Na stronie Udziały plików wybierz udział plików, który chcesz zainstalować.

  6. Na stronie udziału plików wybierz pozycję Połączenie.

  7. W okienku Połączenie wybierz kartę Windows.

  8. W polu Litera dysku wprowadź dysk, którego chcesz użyć. Wartość domyślna to Z.

  9. W polu Metoda uwierzytelniania wybierz sposób nawiązywania połączenia z udziałem plików.

  10. Wybierz pozycję Pokaż skrypt i skopiuj skrypt programu PowerShell do instalowania udziału plików.

  11. Połączenie do węzła za pośrednictwem protokołu RDP.

  12. Uruchom skopiowane polecenie, aby zainstalować udział plików.

  13. Zanotuj wszystkie komunikaty o błędach w danych wyjściowych. Skorzystaj z tych informacji, aby rozwiązać problemy związane z siecią.

Przykładowe konfiguracje instalacji

Poniższe przykładowe konfiguracje kodu pokazują instalowanie różnych systemów udziałów plików w puli węzłów obliczeniowych.

Udział usługi Azure Files

Azure Files to standardowa oferta systemu plików w chmurze platformy Azure. Poniższa konfiguracja instaluje udział usługi Azure Files o nazwie <file-share-name> na dysku S . Aby uzyskać informacje o parametrach w przykładzie, zobacz Instalowanie udziału plików platformy Azure SMB w systemie Windows lub Tworzenie udziału plików platformy Azure NFS platformy Azure i instalowanie go na maszynie wirtualnej z systemem Linux przy użyciu witryny 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"
            },
        }
    }
}

Kontener obiektów blob platformy Azure

Inną opcją jest użycie usługi Azure Blob Storage za pośrednictwem narzędzia BlobFuse. Instalowanie systemu plików obiektów blob wymaga klucza konta, klucza sygnatury dostępu współdzielonego (SAS) lub tożsamości zarządzanej z dostępem do konta magazynu.

Aby uzyskać informacje na temat pobierania tych kluczy lub tożsamości, zobacz następujące artykuły:

Poniższa konfiguracja instaluje system plików obiektów blob z opcjami BlobFuse. W celach ilustracyjnych w przykładzie pokazano AccountKeywartości , SasKey i IdentityReference, ale w rzeczywistości można określić tylko jedną z tych 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 "
            },
        }
    }
}

Aby uzyskać domyślny dostęp do zainstalowanego katalogu blobFuse, uruchom zadanie jako administrator. Program BlobFuse instaluje katalog w przestrzeni użytkownika i podczas tworzenia puli instaluje katalog jako katalog główny. W systemie Linux wszystkie zadania administratora są główne. Na stronie referencyjnej FUSE opisano wszystkie opcje modułu FUSE.

Aby uzyskać więcej informacji i wskazówek dotyczących korzystania z narzędzia BlobFuse, zobacz następujące informacje:

NFS

Udziały NFS można zainstalować w węzłach puli, aby umożliwić usłudze Batch dostęp do tradycyjnych systemów plików. Konfiguracja może być pojedynczym serwerem NFS wdrożonym w chmurze lub lokalnym serwerem NFS dostępnym za pośrednictwem sieci wirtualnej. Instalacja systemu plików NFS obsługuje system Avere vFXT, rozproszoną pamięć podręczną w pamięci na potrzeby zadań obliczeń o wysokiej wydajności (HPC) intensywnie korzystających z danych. Instalacja systemu plików NFS obsługuje również inne standardowe interfejsy zgodne z systemem plików NFS, takie jak NFS dla usługi Azure Blob i NFS dla usługi Azure Files.

W poniższym przykładzie przedstawiono konfigurację instalacji systemu plików NFS:

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

CIFS

Instalowanie systemu PLIKÓW CIFS w węzłach puli jest innym sposobem zapewnienia dostępu do tradycyjnych systemów plików. CIFS to protokół udostępniania plików, który zapewnia otwarty i międzyplatformowy mechanizm żądania plików i usług serwera sieciowego. System CIFS jest oparty na rozszerzonej wersji protokołu SMB do udostępniania plików internetowych i intranetowych.

W poniższym przykładzie przedstawiono konfigurację instalacji pliku 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>"
            },
        }
    }
}

Uwaga

Szukasz przykładu przy użyciu programu PowerShell, a nie języka C#? Inny doskonały przykład można znaleźć tutaj: Instalowanie pliku platformy Azure w puli usługi Azure Batch.

Następne kroki