Batch havuzuna sanal dosya sistemi bağlama

Azure Batch, Batch havuzlarında Windows veya Linux işlem düğümlerine bulut depolama veya dış dosya sistemi bağlamayı destekler. Bir işlem düğümü havuza katıldığında, sanal dosya sistemi bu düğüme yerel bir sürücü olarak bağlanır ve çalışır. Bu makalede, Batch için Azure Resource Manager istemci kitaplığını (Azure.ResourceManager.Batch) kullanarak sanal dosya sistemini bir işlem düğümü havuzuna nasıl bağlayacağınız gösterilmektedir.

Dosya sistemini havuza bağlamak, verilere erişimi büyük bir paylaşılan veri kümesinden kendi verilerini almak için görevler gerektirmekten daha kolay ve daha verimli hale getirir. Birden çok görev için film işleme gibi ortak bir veri kümesine erişmesi gereken bir senaryo düşünün. Her görev, sahne dosyalarından bir veya daha fazla kareyi aynı anda işler. Sahne dosyalarını içeren bir sürücü takarak, her bir işlem düğümünün paylaşılan verilere erişimi daha kolay olur.

Ayrıca performans, saniye başına giriş/çıkış işlemleri (IOPS) gereksinimlerini karşılamak için temel dosya sistemini seçebilirsiniz. Dosya sistemini, verilere eşzamanlı olarak erişen işlem düğümlerinin sayısına göre bağımsız olarak ölçeklendikleyebilirsiniz.

Örneğin, şirket içi kaynak verilerine erişen binlerce eşzamanlı işleme düğümüyle büyük film ölçekli işlemeleri desteklemek için Avere vFXT dağıtılmış bellek içi önbelleği kullanabilirsiniz. Veya bulut tabanlı blob depolamada bulunan veriler için BlobFuse kullanarak verileri yerel dosya sistemi olarak bağlayabilirsiniz. Azure Dosyalar, BlobFuse ile benzer bir iş akışı sağlar ve hem Windows hem de Linux'ta kullanılabilir.

Desteklenen yapılandırmalar

Aşağıdaki dosya sistemi türlerini bağlayabilirsiniz:

  • Azure Dosyaları
  • Azure Blob Depolama
  • Ağ Dosya Sistemi (NFS), Avere vFXT önbelleği dahil olmak üzere
  • Ortak İnternet Dosya Sistemi (CIFS)

Batch, her bir yayımcı ve teklif için oluşturulan node ajanları için aşağıdaki sanal dosya sistemi türlerini destekler.

İşletim Sistemi Türü Azure Dosyalar paylaşımı Azure Blob kapsayıcısı NFS bağlama CIFS bağlama
Linux ✔️ ✔️ ✔️ ✔️
Windows ✔️

Not

8 Ağustos 2019'dan önce oluşturulan Batch havuzlarında sanal dosya sistemi bağlama desteklenmez.

Ağ gereksinimleri

Sanal ağda Batch havuzlarıyla sanal dosya bağlamaları kullandığınızda aşağıdaki gereksinimleri göz önünde bulundurun ve gerekli trafiğin engellenmediğinden emin olun. Daha fazla bilgi için Sanal ağdaki Batch havuzlarına bakın.

  • Azure Dosyalar paylaşımları, hizmet etiketi ile ilgili giden ve gelen trafik için storage servisi için 445 numaralı TCP bağlantı noktasının açık olmasını gerektirir. Daha fazla bilgi için bkz . Windows ile Azure dosya paylaşımı kullanma.

  • Azure Blob kapsayıcıları, hizmet etiketine yapılan ve bu etiket üzerinden gelen trafik için 443 numaralı TCP bağlantı noktasının storage açık olmasını gerektirir. Sanal makineler (VM), https://packages.microsoft.com ve blobfuse paketlerini indirmek için gpg erişimine sahip olmalıdır. Yapılandırmanıza bağlı olarak, diğer URL'lere erişmeniz gerekebilir.

  • Ağ Dosya Sistemi (NFS), varsayılan olarak 2049 numaralı bağlantı noktasına erişim gerektirir. Yapılandırmanızın başka gereksinimleri olabilir. VM'lerin, nfs-common (Debian veya Ubuntu için) paketlerini indirmek için uygun paket yöneticisine erişimi olmalıdır. URL, işletim sistemi sürümünüz temelinde farklılık gösterebilir. Yapılandırmanıza bağlı olarak, diğer URL'lere de erişmeniz gerekebilir.

    NFS üzerinden Azure Blob veya Azure Dosyaları bağlamanın ağ gereksinimleri daha fazla olabilir. Örneğin, işlem düğümlerinizin depolama hesabıyla aynı sanal ağ alt ağını kullanması gerekebilir.

  • Ortak İnternet Dosya Sistemi (CIFS), 445 numaralı TCP bağlantı noktasına erişim gerektirir. VM'lerin paketi indirmek cifs-utils için uygun paket yöneticisine erişimi olmalıdır. URL, işletim sistemi sürümünüz temelinde farklılık gösterebilir.

Montaj yapılandırması ve uygulaması.

Sanal dosya sistemini bir havuza bağlamak, dosya sisteminin havuzdaki tüm işlem düğümlerinin kullanımına sunulmasını sağlar. Dosya sistemi yapılandırması, bir işlem düğümü bir havuza katıldığında, yeniden başlatıldığında veya yeniden yapılandırıldığında gerçekleşir.

Bir dosya sistemini havuza bağlamak için, sanal dosya sisteminizle eşleşen bir BatchMountConfiguration nesnesi oluşturursunuz: BatchBlobFileSystemConfiguration, BatchFileShareConfiguration, BatchNfsMountConfigurationveya BatchCifsMountConfiguration.

Tüm bağlama yapılandırma nesneleri aşağıdaki temel parametrelere ihtiyaç duyar. Bazı bağlama yapılandırmaları, kod örneklerinin daha ayrıntılı olarak sunduğu belirli dosya sistemi için belirli parametrelere sahiptir.

  • Depolama hesabının hesap adı veya kaynağı .

  • İşlem düğümüne bağlanacak dosya sisteminin konumu, aracılığıyla erişilebilen AZ_BATCH_NODE_MOUNTS_DIR dizinine göre göreli bir bağlama yolu veya kaynağı.

    Tam \fsmounts dizin konumu düğüm işletim sistemine bağlı olarak değişir. Örneğin, bir Ubuntu düğümündeki konum mnt\batch\tasks\fsmounts ile eşleşir.

  • Dosya sistemini monte etmek için belirli parametreleri belirten monte etme seçenekleri veya BlobFuse seçenekleri.

Havuzu oluşturduğunuzda, her bir BatchMountConfiguration öğesini BatchAccountPoolData üzerindeki MountConfiguration koleksiyonuna eklersiniz. Bir düğüm havuza katıldığında, yeniden başlatıldığında veya yeniden oluşturulduğunda dosya sistemi için bağlama gerçekleşir.

Batch aracısı, Windows ve Linux'ta bağlamayı farklı şekilde uygular.

  • Linux'ta Batch paketini cifs-utilsyükler. Ardından Batch bağlama komutunu gönderir.

  • Windows'da Batch, cmdkey kullanarak Batch hesabı kimlik bilgilerinizi ekler. Ardından Batch, net use aracılığıyla bağlama komutunu gönderir. Örneğin:

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

Dosya sistemini bağlamak, bağlı dosya sisteminin ve günlük dosyalarının konumunu gösteren bir ortam değişkeni AZ_BATCH_NODE_MOUNTS_DIRoluşturur. Günlük dosyalarını sorun giderme ve hata ayıklama için kullanabilirsiniz.

PowerShell ile Azure Dosyalar paylaşım alanını bağlama

Windows veya Linux Batch havuzuna bir Azure Dosyalar paylaşımı bağlamak için Azure PowerShell'i kullanabilirsiniz. Aşağıdaki yordam, bir Azure dosya paylaşımı dosya sistemini Batch havuzuna yapılandırma ve bağlama işleminde size yol gösterir.

Önemli

Bir havuzdaki bağlı dosya sistemi sayısı üst sınırı 10'dur. Ayrıntılar ve diğer sınırlar için Batch hizmeti kotaları ve sınırları'na bakın.

Önkoşullar

  • Etkin aboneliği olan bir Azure hesabı.
  • Azure PowerShell yüklendi veya Azure Cloud Shell'i kullanarak arabirim için PowerShell'i seçin.
  • Dosya paylaşımı olan bağlantılı Azure Depolama hesabına sahip mevcut bir Batch hesabı.
  1. Yer tutucuyu abonelik kimliğiniz ile değiştirerek Azure aboneliğinizde oturum açın.

    Connect-AzAccount -Subscription "<subscription-ID>"
    
  2. Batch hesabınızın bağlamını alın. <batch-account-name> yer tutucusunu Batch hesap adınız ile değiştirin.

    $context = Get-AzBatchAccount -AccountName <batch-account-name>
    
  3. Aşağıdaki ayarlarla bir Batch havuzu oluşturun. <storage-account-name> , <storage-account-key>ve <file-share-name> yer tutucularını Batch hesabınıza bağlı depolama hesabında bulunan değerlerle değiştirin. Yer tutucuyu <pool-name> havuz için istediğiniz adla değiştirin.

    Aşağıdaki betik, Windows Server 2016 Datacenter, Standard_D2_V2 boyutunda bir düğüm ile bir havuz oluşturur ve ardından Azure dosya paylaşımını düğümün S sürücüsüne bağlar.

    $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. Düğüme bağlanın ve çıkış dosyasının doğru olup olmadığını denetleyin.

Bağlı dosyalara erişme

Azure Batch görevleri, sürücünün doğrudan yolunu kullanarak bağlı dosyalara erişebilir, örneğin:

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

Azure Batch aracısı yalnızca Azure Batch görevleri için erişim verir. Düğüme bağlanmak için Uzak Masaüstü Protokolü (RDP) kullanıyorsanız, kullanıcı hesabınızın takılı sürücüye otomatik erişimi yoktur. RDP üzerinden düğüme bağlandığınızda, S sürücüsüne doğrudan erişmek için depolama hesabının kimlik bilgilerini eklemeniz gerekir.

Kimlik bilgilerini eklemek için kullanın cmdkey . <storage-account-name> ve <storage-account-key> yer tutucularını kendi bilgilerinizle değiştirin.

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

Bağlama sorunlarını giderme

Bağlama yapılandırması başarısız olursa işlem düğümü başarısız olur ve düğüm durumu Kullanılamaz olarak ayarlanır. Bağlama yapılandırma hatasını tanılamak için, hatayla ilgili ayrıntılar için ComputeNodeError özelliğini inceleyin.

Hata ayıklama amacıyla günlük dosyalarını almak için OutputFiles API'sini kullanarak *.log dosyalarını karşıya yükleyebilirsiniz. *.log dosyaları, dosya sisteminin AZ_BATCH_NODE_MOUNTS_DIR konumundaki bağlanması hakkında bilgi içerir. Bağlama günlük dosyaları, her bağlama için type-mountDirOrDrive.log biçimindedir Örneğin, test adlı bir bağlama dizinindeki CIFS bağlaması şu adlı bir bağlama günlük dosyasına sahiptir: cifs-test.log.

Bağlama hatalarını araştırma

Dosya sistemi bağlamalarıyla ilgili günlük dosyalarını incelemek için düğüme RDP veya SSH ile bağlanabilirsiniz. Bir Azure dosya paylaşımını Batch düğümüne bağlamaya çalıştığınızda aşağıdaki örnek hata iletisi mümkündür:

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

Bu hatayı alırsanız, ilgili günlük dosyalarını kontrol etmek için düğüme RDP veya SSH ile bağlanın. Batch aracısı, Azure dosya paylaşımları için Windows ve Linux'ta bağlamayı farklı şekilde uygular. Linux'ta Batch paketini cifs-utilsyükler. Ardından Batch bağlama komutunu gönderir. Windows'da Batch, cmdkey kullanarak Batch hesabı kimlik bilgilerinizi ekler. Ardından Batch, net use aracılığıyla bağlama komutunu gönderir. Örneğin:

net use S: \\<storage-account-name>.file.core.windows.net\<fileshare> /u:AZURE\<storage-account-name> <storage-account-key>
  1. RDP üzerinden düğüme bağlanın.

  2. fshare-S.log günlük dosyasını D:\batch\tasks\fsmounts konumunda açın.

  3. Hata iletilerini gözden geçirin, örneğin:

    CMDKEY: Credential added successfully.
    System error 86 has occurred.
    
    The specified network password is not correct.
    
  4. Azure dosya paylaşımları sorun gidericisini kullanarak sorunu giderin.

Düğüm üzerindeki günlük dosyalarını kontrol etmek için RDP veya SSH kullanamıyorsanız, günlükleri Azure depolama hesabınıza yükleyebilirsiniz. Bu yöntemi hem Windows hem de Linux günlükleri için kullanabilirsiniz.

  1. Azure portalında, havuzunuzun yer aldığı Batch hesabını arayın ve seçin.

  2. Batch hesabı sayfasında, sol gezinti bölmesinden Havuzlar'ı seçin.

  3. Havuzlar sayfasında havuzun adını seçin.

  4. Havuzun sayfasında sol gezinti bölmesinden Düğümler'i seçin.

  5. Düğümler sayfasında düğümün adını seçin.

  6. Düğümün sayfasında, Toplu iş günlüklerini karşıya yükle'yi seçin.

  7. Toplu iş günlüklerini karşıya yükle bölmesinde Depolama kapsayıcısı seç'i tıklayın.

  8. Depolama hesapları sayfasında bir depolama hesabı seçin.

  9. Kapsayıcılar sayfasında, dosyaları karşıya yüklemek için bir kapsayıcı seçin veya oluşturun ve Seç'i seçin.

  10. Karşıya yüklemeyi Başlat'ı seçin.

  11. Karşıya yükleme tamamlandığında dosyaları indirin ve agent-debug.log dosyasını açın.

  12. Hata iletilerini gözden geçirin, örneğin:

    ..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 dosya paylaşımları sorun gidericisini kullanarak sorunu giderin.

Dosya paylaşımını PowerShell ile el ile bağlama

Bağlama hatalarını tanılayamaz veya düzeltemiyorsanız, powershell kullanarak dosya paylaşımını el ile bağlayabilirsiniz.

  1. Bağlama yapılandırması gerektirmeyen bir havuz oluşturun. Örneğin:

    $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. Düğümün Boşta durumunda olmasını bekleyin.

  3. Azure portalında dosya paylaşımınızın olduğu depolama hesabını arayın ve seçin.

  4. Depolama hesabı sayfasının menüsünde, sol gezinti bölmesinden Dosya paylaşımları'nı seçin.

  5. Dosya paylaşımları sayfasında, bağlamak istediğiniz dosya paylaşımını seçin.

  6. Dosya paylaşımının sayfasında Bağlan'ı seçin.

  7. Bağlan bölmesinde Windows sekmesini seçin.

  8. Sürücü harfi için, kullanmak istediğiniz sürücüyü girin. Varsayılan değer Z'dir.

  9. Kimlik doğrulama yöntemi için dosya paylaşımına nasıl bağlanmak istediğinizi seçin.

  10. Betiği Göster 'i seçin ve dosya paylaşımını bağlamak için PowerShell betiğini kopyalayın.

  11. RDP üzerinden düğüme bağlanın.

  12. Dosya paylaşımını bağlamak için kopyaladığınız komutu çalıştırın.

  13. Çıktıdaki hata iletilerini not edin. Ağ ile ilgili sorunları gidermek için bu bilgileri kullanın.

Örnek bağlama yapılandırmaları

Aşağıdaki kod örneği yapılandırmaları, çeşitli dosya paylaşım sistemlerini bir işlem düğümleri havuzuna bağlamayı gösterir.

Azure Dosyalar paylaşımı

Azure Dosyalar, standart Azure bulut dosya sistemi teklifidir. Aşağıdaki yapılandırma, adlı bir Azure Dosyalar paylaşımını S sürücüsüne bağlar. Örnekteki parametreler hakkında bilgi için Windows'da SMB Azure dosya paylaşımını bağlama veya Azure portalını kullanarak NFS Azure dosya paylaşımı oluşturma ve Linux VM'ye bağlama bölümüne bakın.

using System;
using System.Threading.Tasks;
using Azure;
using Azure.Identity;
using Azure.ResourceManager;
using Azure.ResourceManager.Batch;
using Azure.ResourceManager.Batch.Models;

internal static class Program
{
    private static async Task Main()
    {
        await CreatePoolWithAzureFilesMountAsync(
            subscriptionId: "<subscription-id>",
            resourceGroupName: "<resource-group>",
            batchAccountName: "<batch-account-name>",
            poolId: "<pool-name>");
    }

    private static async Task CreatePoolWithAzureFilesMountAsync(
        string subscriptionId,
        string resourceGroupName,
        string batchAccountName,
        string poolId)
    {
        BatchAccountPoolData pool = new BatchAccountPoolData()
        {
            VmSize = "standard_d1_v2",
            DeploymentConfiguration = new BatchDeploymentConfiguration()
            {
                VmConfiguration = new BatchVmConfiguration(
                    imageReference: new BatchImageReference()
                    {
                        Publisher = "MicrosoftWindowsServer",
                        Offer = "WindowsServer",
                        Sku = "2019-datacenter-core",
                        Version = "latest",
                    },
                    nodeAgentSkuId: "batch.node.windows amd64"),
            },
        };

        pool.MountConfiguration.Add(new BatchMountConfiguration
        {
            FileShareConfiguration = new BatchFileShareConfiguration(
                accountName: "<storage-account-name>",
                fileUri: new Uri("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",
            },
        });

        var armClient = new ArmClient(new DefaultAzureCredential());
        BatchAccountResource batchAccount = armClient.GetBatchAccountResource(
            BatchAccountResource.CreateResourceIdentifier(subscriptionId, resourceGroupName, batchAccountName));

        await batchAccount.GetBatchAccountPools()
            .CreateOrUpdateAsync(WaitUntil.Completed, poolId, pool);

        Console.WriteLine($"Created pool '{poolId}' with an Azure Files mount.");
    }
}

Azure Blob kapsayıcısı

Bir diğer seçenek de BlobFuse aracılığıyla Azure Blob depolamayı kullanmaktır. Blob dosya sistemini bağlamak için hesap anahtarı, paylaşılan erişim imzası (SAS) anahtarı veya depolama hesabınıza erişimi olan yönetilen kimlik gerekir.

Bu anahtarları veya kimliği alma hakkında bilgi için aşağıdaki makalelere bakın:

Aşağıdaki yapılandırma, BlobFuse seçenekleriyle bir blob dosya sistemi bağlar. Çizim amacıyla, örnekte , AccountKeyve SasKeygösterilirIdentityResourceId, ancak aslında bu yöntemlerden yalnızca birini belirtebilirsiniz.

using System;
using System.Threading.Tasks;
using Azure;
using Azure.Core;
using Azure.Identity;
using Azure.ResourceManager;
using Azure.ResourceManager.Batch;
using Azure.ResourceManager.Batch.Models;

internal static class Program
{
    private static async Task Main()
    {
        await CreatePoolWithAzureBlobMountAsync(
            subscriptionId: "<subscription-id>",
            resourceGroupName: "<resource-group>",
            batchAccountName: "<batch-account-name>",
            poolId: "<pool-name>");
    }

    private static async Task CreatePoolWithAzureBlobMountAsync(
        string subscriptionId,
        string resourceGroupName,
        string batchAccountName,
        string poolId)
    {
        BatchAccountPoolData pool = new BatchAccountPoolData()
        {
            VmSize = "standard_d1_v2",
            DeploymentConfiguration = new BatchDeploymentConfiguration()
            {
                VmConfiguration = new BatchVmConfiguration(
                    imageReference: new BatchImageReference()
                    {
                        Publisher = "canonical",
                        Offer = "0001-com-ubuntu-server-focal",
                        Sku = "20_04-lts",
                        Version = "latest",
                    },
                    nodeAgentSkuId: "batch.node.ubuntu 20.04"),
            },
        };

        pool.MountConfiguration.Add(new BatchMountConfiguration
        {
            BlobFileSystemConfiguration = new BatchBlobFileSystemConfiguration(
                accountName: "<storage-account-name>",
                containerName: "<container-name>",
                relativeMountPath: "<relative-mount-path>")
            {
                // Use only one of the following three lines:
                AccountKey = "<storage-account-key>",
                SasKey = "<sas-key>",
                IdentityResourceId = new ResourceIdentifier(
                    "/subscriptions/<subscription>/resourceGroups/<resource-group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<identity-name>"),
                BlobfuseOptions = "-o attr_timeout=240 -o entry_timeout=240 -o negative_timeout=120",
            },
        });

        var armClient = new ArmClient(new DefaultAzureCredential());
        BatchAccountResource batchAccount = armClient.GetBatchAccountResource(
            BatchAccountResource.CreateResourceIdentifier(subscriptionId, resourceGroupName, batchAccountName));

        await batchAccount.GetBatchAccountPools()
            .CreateOrUpdateAsync(WaitUntil.Completed, poolId, pool);

        Console.WriteLine($"Created pool '{poolId}' with an Azure Blob (BlobFuse) mount.");
    }
}

BlobFuse'a bağlı dizine varsayılan erişim elde etmek için, görevi yönetici olarak çalıştırın. BlobFuse, dizini kullanıcı alanına bağlar ve havuz oluşturma sırasında dizini kök olarak bağlar. Linux'ta tüm yönetici görevleri kök görevdir. FUSE başvuru sayfasında FUSE modülü için tüm seçenekler açıklanmaktadır.

BlobFuse kullanma hakkında daha fazla bilgi ve ipucu için aşağıdaki başvurulara bakın:

Ağ Dosya Sistemi (NFS)

Batch'in geleneksel dosya sistemlerine erişmesine izin vermek için NFS paylaşımlarını havuz düğümlerine bağlayabilirsiniz. Kurulum, bulutta dağıtılan tek bir NFS sunucusu veya sanal ağ üzerinden erişilen bir şirket içi NFS sunucusu olabilir. NFS bağlamaları, veri yoğunluklu yüksek performanslı bilgi işlem (HPC) görevleri için dağıtılmış bir bellek içi önbellek olan Avere vFXT'yi destekler. NFS bağlamaları, Azure Blob için NFS ve Azure Dosyalar için NFS gibi diğer standart NFS uyumlu arabirimleri de destekler.

Aşağıdaki örnekte NFS dosya sistemi bağlama yapılandırması gösterilmektedir:

using System;
using System.Threading.Tasks;
using Azure;
using Azure.Identity;
using Azure.ResourceManager;
using Azure.ResourceManager.Batch;
using Azure.ResourceManager.Batch.Models;

internal static class Program
{
    private static async Task Main()
    {
        await CreatePoolWithNfsMountAsync(
            subscriptionId: "<subscription-id>",
            resourceGroupName: "<resource-group>",
            batchAccountName: "<batch-account-name>",
            poolId: "<pool-name>");
    }

    private static async Task CreatePoolWithNfsMountAsync(
        string subscriptionId,
        string resourceGroupName,
        string batchAccountName,
        string poolId)
    {
        BatchAccountPoolData pool = new BatchAccountPoolData()
        {
            VmSize = "standard_d1_v2",
            DeploymentConfiguration = new BatchDeploymentConfiguration()
            {
                VmConfiguration = new BatchVmConfiguration(
                    imageReference: new BatchImageReference()
                    {
                        Publisher = "canonical",
                        Offer = "0001-com-ubuntu-server-focal",
                        Sku = "20_04-lts",
                        Version = "latest",
                    },
                    nodeAgentSkuId: "batch.node.ubuntu 20.04"),
            },
        };

        pool.MountConfiguration.Add(new BatchMountConfiguration
        {
            NfsMountConfiguration = new BatchNfsMountConfiguration(
                source: "<source>",
                relativeMountPath: "<relative-mount-path>")
            {
                MountOptions = "options ver=3.0",
            },
        });

        var armClient = new ArmClient(new DefaultAzureCredential());
        BatchAccountResource batchAccount = armClient.GetBatchAccountResource(
            BatchAccountResource.CreateResourceIdentifier(subscriptionId, resourceGroupName, batchAccountName));

        await batchAccount.GetBatchAccountPools()
            .CreateOrUpdateAsync(WaitUntil.Completed, poolId, pool);

        Console.WriteLine($"Created pool '{poolId}' with an NFS mount.");
    }
}

CIFS

CIFS'yi havuz düğümlerine bağlamak, geleneksel dosya sistemlerine erişim sağlamanın başka bir yoludur. CIFS, ağ sunucusu dosyalarını ve hizmetlerini istemek için açık ve platformlar arası bir mekanizma sağlayan bir dosya paylaşım protokolüdür. CIFS, İnternet ve intranet dosya paylaşımı için SMB protokolünün gelişmiş sürümünü temel alır.

Aşağıdaki örnekte CIFS dosya bağlama yapılandırması gösterilmektedir.

using System;
using System.Threading.Tasks;
using Azure;
using Azure.Identity;
using Azure.ResourceManager;
using Azure.ResourceManager.Batch;
using Azure.ResourceManager.Batch.Models;

internal static class Program
{
    private static async Task Main()
    {
        await CreatePoolWithCifsMountAsync(
            subscriptionId: "<subscription-id>",
            resourceGroupName: "<resource-group>",
            batchAccountName: "<batch-account-name>",
            poolId: "<pool-name>");
    }

    private static async Task CreatePoolWithCifsMountAsync(
        string subscriptionId,
        string resourceGroupName,
        string batchAccountName,
        string poolId)
    {
        BatchAccountPoolData pool = new BatchAccountPoolData()
        {
            VmSize = "standard_d1_v2",
            DeploymentConfiguration = new BatchDeploymentConfiguration()
            {
                VmConfiguration = new BatchVmConfiguration(
                    imageReference: new BatchImageReference()
                    {
                        Publisher = "canonical",
                        Offer = "0001-com-ubuntu-server-focal",
                        Sku = "20_04-lts",
                        Version = "latest",
                    },
                    nodeAgentSkuId: "batch.node.ubuntu 20.04"),
            },
        };

        pool.MountConfiguration.Add(new BatchMountConfiguration
        {
            CifsMountConfiguration = new BatchCifsMountConfiguration(
                username: "<storage-account-name>",
                source: "<source>",
                password: "<storage-account-key>",
                relativeMountPath: "<relative-mount-path>")
            {
                MountOptions = "-o vers=3.0,dir_mode=0777,file_mode=0777,serverino,domain=<domain-name>",
            },
        });

        var armClient = new ArmClient(new DefaultAzureCredential());
        BatchAccountResource batchAccount = armClient.GetBatchAccountResource(
            BatchAccountResource.CreateResourceIdentifier(subscriptionId, resourceGroupName, batchAccountName));

        await batchAccount.GetBatchAccountPools()
            .CreateOrUpdateAsync(WaitUntil.Completed, poolId, pool);

        Console.WriteLine($"Created pool '{poolId}' with a CIFS mount.");
    }
}

Not

C# yerine PowerShell kullanan bir örnek mi arıyorsunuz? Burada başka bir harika örnek bulabilirsiniz: Azure Dosyasını Azure Batch Havuzu'na bağlama.

Sonraki adımlar