Batch 풀에서 가상 파일 시스템 탑재

주의

이 문서에서는 EOL(수명 종료) 상태에 가까워진 Linux 배포판인 CentOS를 참조하세요. 이에 따라 사용 및 계획을 고려하세요. 자세한 내용은 CentOS 수명 종료 지침을 참조 하세요.

Azure Batch에서는 Windows 또는 Linux 컴퓨팅 노드의 Batch 풀에서 클라우드 스토리지 또는 외부 파일 시스템 탑재를 지원합니다. 컴퓨팅 노드가 풀에 참여하면 가상 파일 시스템이 탑재되어 해당 노드에서 로컬 드라이브 역할을 합니다. 이 문서에서는 .NET용 Batch 관리 라이브러리를 사용하여 컴퓨팅 노드 풀에 가상 파일 시스템을 탑재하는 방법을 보여 줍니다.

파일 시스템을 풀에 탑재하면 대규모 공유 데이터 세트에서 자체 데이터를 가져오는 태스크를 요구하는 것보다 데이터에 더 쉽고 효율적으로 액세스할 수 있습니다. 동영상 렌더링과 같이 여러 태스크가 공통 데이터 집합에 액세스해야 하는 시나리오를 생각해 보세요. 각 태스크는 장면 파일에서 한 번에 하나 이상의 프레임을 렌더링합니다. 장면 파일이 포함된 드라이브를 탑재하면 각 컴퓨팅 노드가 공유 데이터에 더 쉽게 액세스할 수 있습니다.

또한 성능, 전체 및 IOPS(초당 입출력 작업) 요구 사항을 충족하는 기본 파일 시스템을 선택할 수 있습니다. 데이터에 동시에 액세스하는 컴퓨팅 노드 수에 따라 파일 시스템의 크기를 독립적으로 조정할 수 있습니다.

예를 들어, Avere vFXT 분산 인메모리 캐시를 사용하면 온-프레미스 원본 데이터에 액세스하는 수천 개의 동시 렌더링 노드가 있는 대규모 영화급 렌더링을 지원할 수 있습니다. 또는 이미 클라우드 기반 Blob Storage에 있는 데이터의 경우 BlobFuse를 사용하여 데이터를 로컬 파일 시스템으로 탑재할 수 있습니다. Azure Files는 BlobFuse와 유사한 워크플로를 제공하며 Windows와 Linux 모두에서 사용할 수 있습니다.

지원되는 구성

다음 형식의 파일 시스템을 탑재할 수 있습니다.

  • Azure 파일
  • Azure Blob 스토리지
  • Avere vFXT 캐시를 포함하는 NFS(네트워크 파일 시스템)
  • CIFS(Common Internet File System)

Batch는 해당 게시자 및 제품에 대해 생성된 노드 에이전트에 대해 다음과 같은 가상 파일 시스템 형식을 지원합니다.

OS 유형 Azure Files 공유 Azure Blob 컨테이너 NFS 탑재 CIFS 탑재
Linux ✔️ ✔️ ✔️ ✔️
Windows ✔️

참고 항목

2019년 8월 8일 이전에 만들어진 Batch 풀에서는 가상 파일 시스템 탑재가 지원되지 않습니다.

네트워킹 요구 사항

가상 네트워크에서 Batch 풀과 함께 가상 파일 탑재를 사용하는 경우 다음 요구 사항을 염두에 두고 필요한 트래픽이 차단되지 않는지 확인합니다. 자세한 내용은 가상 네트워크의 Batch 풀을 참조하세요.

  • Azure Files 공유에서는 storage 서비스 태그 간 트래픽을 위해 TCP 포트 445가 열려 있어야 합니다. 자세한 내용은 Windows에서 Azure 파일 공유 사용을 참조하세요.

  • Azure Blob 컨테이너에서는 storage 서비스 태그 간 트래픽을 위해 TCP 포트 443이 열려 있어야 합니다. blobfusegpg 패키지를 다운로드하려면 VM(가상 머신)이 https://packages.microsoft.com에 액세스할 수 있어야 합니다. 구성에 따라 다른 URL에 액세스해야 할 수도 있습니다.

  • NFS(네트워크 파일 시스템)에는 기본적으로 포트 2049에 대한 액세스가 필요합니다. 구성에 다른 요구 사항이 있을 수 있습니다. nfs-common(Debian 또는 Ubuntu) 또는 nfs-utils(CentOS) 패키지를 다운로드하려면 VM에 적절한 패키지 관리자에 대한 액세스 권한이 있어야 합니다. 이 URL은 OS 버전에 따라 달라질 수 있습니다. 구성에 따라 다른 URL에 액세스해야 할 수도 있습니다.

    NFS를 통해 Azure Blob 또는 Azure Files를 탑재하려면 더 많은 네트워킹 요구 사항이 있을 수 있습니다. 예를 들어, 컴퓨팅 노드는 스토리지 계정과 동일한 가상 네트워크 서브넷을 사용해야 할 수 있습니다.

  • CIFS(공통 인터넷 파일 시스템)에는 TCP 포트 445에 대한 액세스가 필요합니다. cifs-utils 패키지를 다운로드하려면 VM에 적절한 패키지 관리자에 대한 액세스 권한이 있어야 합니다. 이 URL은 OS 버전에 따라 달라질 수 있습니다.

탑재 구성 및 구현

풀에 가상 파일 시스템을 탑재하면 해당 풀의 모든 컴퓨팅 노드에서 파일 시스템을 사용할 수 있습니다. 파일 시스템에 대한 구성은 컴퓨팅 노드가 풀에 조인되거나, 다시 시작되거나, 이미지로 다시 설치될 때 이루어집니다.

풀에 파일 시스템을 탑재하려면 가상 파일 시스템(AzureBlobFileSystemConfiguration, AzureFileShareConfiguration, NfsMountConfiguration 또는 CifsMountConfiguration)과 일치하는 MountConfiguration 개체를 만듭니다.

모든 탑재 구성 개체에는 다음과 같은 기본 매개 변수가 필요합니다. 일부 탑재 구성에는 특정 파일 시스템에 대한 특정 매개 변수가 있으며, 이에 대한 자세한 내용은 코드 예에 나와 있습니다.

  • 스토리지 계정의 계정 이름 또는 원본입니다.

  • 상대 탑재 경로 또는 원본AZ_BATCH_NODE_MOUNTS_DIR을 통해 액세스할 수 있는 표준 \fsmounts 디렉터리를 기준으로 컴퓨팅 노드에 탑재할 파일 시스템의 위치입니다.

    정확한 \fsmounts 디렉터리 위치는 노드 OS에 따라 다릅니다. 예를 들어, Ubuntu 노드의 위치는 mnt\batch\tasks\fsmounts에 매핑됩니다. CentOS 노드에서 위치는 mnt\resources\batch\tasks\fsmounts에 매핑됩니다.

  • 파일 시스템 탑재를 위한 특정 매개 변수를 설명하는 탑재 옵션 또는 BlobFuse 옵션입니다.

풀과 MountConfiguration 개체를 만들 때 개체를 MountConfigurationList 속성에 할당합니다. 파일 시스템에 대한 탑재는 노드가 풀에 조인되거나, 다시 시작되거나, 이미지로 다시 설치될 때 이루어집니다.

Batch 에이전트는 Windows와 Linux에서 서로 다른 방식으로 탑재를 구현합니다.

  • Linux에서는 Batch가 cifs-utils 패키지를 설치합니다. 그런 다음 Batch가 탑재 명령을 실행합니다.

  • Windows에서는 Batch가 cmdkey를 사용하여 Batch 계정 자격 증명을 추가합니다. 그런 다음 Batch가 net use를 통해 탑재 명령을 실행합니다. 예시:

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

파일 시스템을 탑재하면 탑재된 파일 시스템 및 로그 파일의 위치를 가리키는 환경 변수 AZ_BATCH_NODE_MOUNTS_DIR이 만들어집니다. 문제 해결 및 디버깅을 위해 로그 파일을 사용할 수 있습니다.

PowerShell을 사용하여 Azure Files 공유 탑재

Azure PowerShell을 사용하여 Windows 또는 Linux Batch 풀에 Azure Files 공유를 탑재할 수 있습니다. 다음 절차에서는 Batch 풀에서 Azure 파일 공유 파일 시스템을 구성하고 탑재하는 과정을 안내합니다.

Important

풀에 탑재되는 파일 시스템의 최대 수는 10입니다. 자세한 내용 및 기타 한도는 Batch 서비스 할당량 및 한도를 참조하세요.

필수 조건

  • 활성 구독이 있는 Azure 계정.
  • Azure PowerShell이 설치되어 있거나 Azure Cloud Shell을 사용하고 인터페이스로 PowerShell을 선택합니다.
  • 파일 공유가 있는 연결된 Azure Storage 계정이 있는 기존 배치 계정입니다.
  1. Azure 구독에 로그인하고 자리 표시자를 구독 ID로 바꿉니다.

    Connect-AzAccount -Subscription "<subscription-ID>"
    
  2. Batch 계정의 컨텍스트를 가져옵니다. <batch-account-name> 자리 표시자를 배치 계정 이름으로 바꿉니다.

    $context = Get-AzBatchAccount -AccountName <batch-account-name>
    
  3. 다음 설정을 사용하여 Batch 풀을 만듭니다. <storage-account-name> , <storage-account-key><file-share-name> 자리 표시자를 배치 계정에 연결된 스토리지 계정의 값으로 바꿉니다. <pool-name> 자리 표시자를 풀에 대해 원하는 이름으로 바꿉니다.

    다음 스크립트는 하나의 Windows Server 2016 Datacenter, Standard_D2_V2 크기 노드로 풀을 만든 다음 Azure 파일 공유를 노드의 S 드라이브에 탑재합니다.

    $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. 노드에 연결하고 출력 파일이 올바른지 확인합니다.

탑재된 파일에 액세스

Azure Batch 작업은 드라이브의 직접 경로를 사용하여 탑재된 파일에 액세스할 수 있습니다. 예를 들면 다음과 같습니다.

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

Azure Batch 에이전트는 Azure Batch 태스크에 대해서만 액세스 권한을 부여합니다. RDP(원격 데스크톱 프로토콜)를 사용하여 노드에 연결하는 경우 사용자 계정은 탑재 드라이브에 자동으로 액세스할 수 없습니다. RDP를 통해 노드에 연결할 때 S 드라이브에 직접 액세스하려면 스토리지 계정에 대한 자격 증명을 추가해야 합니다.

자격 증명을 추가하려면 cmdkey를 사용합니다. <storage-account-name><storage-account-key> 자리 표시자를 고유의 정보로 바꿉니다.

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

탑재 문제 해결

탑재 구성이 실패하면 컴퓨팅 노드가 실패하고 노드 상태가 사용할 수 없음으로 설정됩니다. 탑재 구성 실패를 진단하려면 ComputeNodeError 속성을 검사하여 오류에 대한 세부 정보를 확인합니다.

디버깅을 위한 로그 파일을 가져오려면 OutputFiles API를 사용하여 *.log 파일을 업로드할 수 있습니다. *.log 파일에는 AZ_BATCH_NODE_MOUNTS_DIR 위치의 파일 시스템 탑재에 대한 정보가 포함되어 있습니다. 탑재 로그 파일의 형식은 각 탑재에 대해 <type>-<mountDirOrDrive>.log입니다. 예를 들어, test라는 탑재 디렉터리에 있는 CIFS 탑재에는 cifs-test.log라는 탑재 로그 파일이 있습니다.

탑재 오류 조사

노드에 대한 RDP 또는 SSH를 통해 파일 시스템 탑재와 관련된 로그 파일을 확인할 수 있습니다. Azure 파일 공유를 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

이 오류가 발생할 경우 RDP 또는 SSH를 통해 노드에 접속하여 관련 로그 파일을 확인합니다. Batch 에이전트는 Azure 파일 공유에 대해 Windows 및 Linux에서 다르게 탑재를 구현합니다. Linux에서는 Batch가 cifs-utils 패키지를 설치합니다. 그런 다음 Batch가 탑재 명령을 실행합니다. Windows에서는 Batch가 cmdkey를 사용하여 Batch 계정 자격 증명을 추가합니다. 그런 다음 Batch가 net use를 통해 탑재 명령을 실행합니다. 예시:

net use S: \\<storage-account-name>.file.core.windows.net\<fileshare> /u:AZURE\<storage-account-name> <storage-account-key>
  1. RDP를 통해 노드에 연결합니다.

  2. D:\batch\tasks\fsmounts에서 로그 파일 fshare-S.log를 엽니다.

  3. 다음과 같은 오류 메시지를 검토합니다.

    CMDKEY: Credential added successfully.
    System error 86 has occurred.
    
    The specified network password is not correct.
    
  4. Azure 파일 공유 문제 해결사를 사용하여 문제를 해결합니다.

RDP 또는 SSH를 사용하여 노드의 로그 파일을 확인할 수 없는 경우 로그를 Azure Storage 계정에 업로드할 수 있습니다. Windows 및 Linux 로그 모두에 이 방법을 사용할 수 있습니다.

  1. Azure Portal에서 풀이 있는 배치 계정을 검색하고 선택합니다.

  2. 배치 계정 페이지의 왼쪽 탐색 메뉴에서 을 선택합니다.

  3. 페이지에서 풀 이름을 선택합니다.

  4. 풀 페이지의 왼쪽 탐색 메뉴에서 노드를 선택합니다.

  5. 노드 페이지에서 노드 이름을 선택합니다.

  6. 노드 페이지에서 일괄 처리 로그 업로드를 선택합니다.

  7. 일괄 처리 로그 업로드 창에서 스토리지 컨테이너 선택을 선택합니다.

  8. 스토리지 계정 페이지에서 스토리지 계정을 선택합니다.

  9. 컨테이너 페이지에서 파일을 업로드할 컨테이너를 선택하거나 만들고 선택을 선택합니다.

  10. 업로드 시작을 선택합니다.

  11. 업로드가 완료되면 파일을 다운로드하고 agent-debug.log를 엽니다.

  12. 다음과 같은 오류 메시지를 검토합니다.

    ..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. Azure 파일 공유 문제 해결사를 사용하여 문제를 해결합니다.

PowerShell을 사용하여 파일 공유를 수동으로 탑재

탑재 오류를 진단하거나 수정할 수 없는 경우 대신 PowerShell을 사용하여 파일 공유를 수동으로 탑재할 수 있습니다.

  1. 탑재 구성 없이 풀을 만듭니다. 예시:

    $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. 노드가 유휴 상태가 될 때까지 기다립니다.

  3. Azure Portal에서 파일 공유가 있는 스토리지 계정을 검색하고 선택합니다.

  4. 스토리지 계정 페이지 메뉴의 왼쪽 탐색 메뉴에서 파일 공유를 선택합니다.

  5. 파일 공유 페이지에서 탑재하려는 파일 공유를 선택합니다.

  6. 파일 공유 페이지에서 연결을 선택합니다.

  7. 연결 창에서 Windows 탭을 선택합니다.

  8. 드라이브 문자로 사용하려는 드라이브를 입력합니다. 기본값은 Z입니다.

  9. 인증 방법으로 파일 공유에 연결하려는 방법을 선택합니다.

  10. 스크립트 표시를 선택하고 파일 공유를 탑재하기 위한 PowerShell 스크립트를 복사합니다.

  11. RDP를 통해 노드에 연결합니다.

  12. 복사한 명령을 실행하여 파일 공유를 탑재합니다.

  13. 출력에 오류 메시지가 있는지 확인합니다. 이 정보를 참고하여 네트워킹 관련 문제의 문제 해결을 진행합니다.

탑재 구성 예

다음 코드 구성 예는 다양한 파일 공유 시스템을 컴퓨팅 노드 풀에 탑재하는 방법을 보여 줍니다.

Azure Files 공유

Azure Files는 표준 Azure 클라우드 파일 시스템 제품입니다. 다음 구성은 <file-share-name>이라는 Azure Files 공유를 S 드라이브에 탑재합니다. 이 예에서의 매개 변수에 대한 자세한 내용은 Windows에 SMB Azure 파일 공유 탑재 또는 NFS Azure 파일 공유를 만들고 Azure Portal을 사용하여 Linux VM에 탑재를 참조하세요.

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 컨테이너

또 다른 옵션은 BlobFuse를 통해 Azure Blob 스토리지를 사용하는 것입니다. Blob 파일 시스템을 탑재하려면 계정 키, SAS(공유 액세스 서명) 키 또는 스토리지 계정에 액세스할 수 있는 관리 ID가 필요합니다.

이러한 키 또는 ID를 가져오는 방법에 대한 자세한 내용은 다음 문서를 참조하세요.

다음 구성은 BlobFuse 옵션을 사용하여 Blob 파일 시스템을 탑재합니다. 설명을 위해, 이 예에서는 AccountKey, SasKeyIdentityReference를 표시하지만 실제로는 이러한 메서드 중 하나만 지정할 수 있습니다.

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

BlobFuse에 탑재된 디렉터리에 대한 기본 액세스 권한을 얻으려면 작업을 관리자로 실행합니다. BlobFuse는 사용자 공간에 디렉터리를 탑재하고 풀 만들 때 디렉터리를 루트로 탑재합니다. Linux에서 모든 관리자 태스크는 루트입니다. FUSE 참조 페이지에서는 FUSE 모듈의 모든 옵션을 설명합니다.

BlobFuse 사용에 대한 자세한 내용과 팁은 다음 참조 사항을 참조하세요.

NFS

Batch가 기존 파일 시스템에 액세스할 수 있도록 NFS 공유를 풀 노드에 탑재할 수 있습니다. 이 설정은 클라우드에 배포된 단일 NFS 서버이거나 가상 네트워크를 통해 액세스되는 온-프레미스 NFS 서버일 수 있습니다. NFS 탑재는 데이터 집약적인 HPC(고성능 컴퓨팅) 태스크를 위한 분산형 인메모리 캐시인 Avere vFXT를 지원합니다. NFS 탑재는 Azure Blob용 NFSAzure Files용 NFS와 같은 다른 표준 NFS 호환 인터페이스도 지원합니다.

다음 예에서는 NFS 파일 시스템 탑재에 대한 구성을 보여 줍니다.

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

CIFS

풀 노드에 CIFS를 탑재하는 것은 기존 파일 시스템에 대한 액세스를 제공하는 또 다른 방법입니다. CIFS는 네트워크 서버 파일 및 서비스를 요청하기 위해 개방형의 플랫폼 범용 메커니즘을 제공하는 파일 공유 프로토콜입니다. CIFS는 인터넷 및 인트라넷 파일 공유를 위한 향상된 버전의 SMB 프로토콜을 기반으로 합니다.

다음 예에서는 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>"
            },
        }
    }
}

참고 항목

C# 대신 PowerShell을 사용하는 예를 찾고 계십니까? Azure Batch Pool에 Azure 파일 탑재에서 또 다른 좋은 예를 찾을 수 있습니다.

다음 단계