Udostępnij przez


Tworzenie puli usługi Azure Batch z automatycznym uaktualnieniem systemu operacyjnego

Podczas tworzenia puli usługi Azure Batch można aprowizować pulę z węzłami z włączonym automatycznym uaktualnianiem systemu operacyjnego. W tym artykule wyjaśniono, jak skonfigurować pulę usługi Batch przy użyciu automatycznego uaktualniania systemu operacyjnego.

Dlaczego warto używać automatycznego uaktualniania systemu operacyjnego?

Automatyczne uaktualnianie systemu operacyjnego służy do implementowania strategii automatycznego uaktualniania systemu operacyjnego i kontroli w pulach usługi Azure Batch. Oto kilka powodów używania automatycznego uaktualniania systemu operacyjnego:

  • Zabezpieczenia. Automatyczne uaktualnianie systemu operacyjnego zapewnia terminowe stosowanie poprawek luk w zabezpieczeniach i problemów z zabezpieczeniami w obrazie systemu operacyjnego w celu zwiększenia bezpieczeństwa zasobów obliczeniowych. Pomaga zapobiegać potencjalnym lukom w zabezpieczeniach stwarzającym zagrożenie dla aplikacji i danych.
  • Zminimalizowane zakłócenia dostępności. Automatyczne uaktualnianie systemu operacyjnego służy do zminimalizowania zakłóceń dostępności węzłów obliczeniowych podczas uaktualniania systemu operacyjnego. Jest to osiągane dzięki odraczaniu uaktualnień uwzględniających harmonogramowanie zadań oraz wsparciu dla stopniowych uaktualnień, zapewniając minimalne zakłócenia dla obciążeń.
  • Elastyczność Funkcja Automatyczna Aktualizacja Systemu Operacyjnego umożliwia skonfigurowanie strategii automatycznej aktualizacji systemu operacyjnego, w tym koordynacji aktualizacji opartej na procentach i wsparcia wycofywania. Oznacza to, że możesz dostosować strategię uaktualniania, aby spełnić określone wymagania dotyczące wydajności i dostępności.
  • Kontrola. Automatyczne uaktualnianie systemu operacyjnego zapewnia kontrolę nad strategią uaktualniania systemu operacyjnego w celu zapewnienia bezpiecznych wdrożeń uaktualnień obsługujących obciążenia. Konfiguracje zasad można dostosować tak, aby spełniały określone potrzeby organizacji.

Podsumowując, użycie automatycznego uaktualniania systemu operacyjnego pomaga zwiększyć bezpieczeństwo, zminimalizować zakłócenia dostępności i zapewnić większą kontrolę i elastyczność obciążeń.

Jak działa automatyczne uaktualnianie systemu operacyjnego?

Podczas uaktualniania obrazów, maszyny wirtualne w puli usługi Azure Batch będą stosować mniej więcej ten sam przepływ pracy co VirtualMachineScaleSets. Aby dowiedzieć się więcej na temat szczegółowych kroków związanych z procesem automatycznego uaktualniania systemu operacyjnego dla zestawów VirtualMachineScaleSet, możesz zapoznać się ze stroną VirtualMachineScaleSet.

Jednak jeśli automaticOSUpgradePolicy.osRollingUpgradeDeferral ma wartość "true", a uaktualnienie stanie się dostępne w czasie, gdy węzeł wsadowy aktywnie uruchamia zadania, uaktualnienie zostanie opóźnione aż wszystkie zadania na węźle zostaną ukończone.

Uwaga

Jeśli pula włączyła funkcję osRollingUpgradeDeferral, jej węzły będą wyświetlane w stanie upgradingos podczas procesu uaktualniania. Należy pamiętać, że stan uaktualniania będzie wyświetlany tylko wtedy, gdy używasz interfejsu API w wersji 2024-02-01 lub nowszej. Jeśli używasz starej wersji interfejsu API do wywołania funkcji GetTVM/ListTVM, węzeł będzie w stanie ponownego uruchomienia podczas uaktualniania.

Obsługiwane obrazy systemu operacyjnego

W przypadku automatycznego uaktualniania obecnie obsługiwane są tylko niektóre obrazy platformy systemu operacyjnego. Aby uzyskać szczegółową listę obrazów, możesz ją otrzymać ze strony VirtualMachineScaleSet.

Wymagania

  • Właściwość version obrazu musi być ustawiona na najnowszą.
  • W przypadku interfejsu API Batch Management użyj wersji 2024-02-01 lub nowszej. W przypadku usługi Batch użyj wersji interfejsu API 2024-02-01.19.0 lub nowszej.
  • Upewnij się, że zasoby zewnętrzne określone w puli są dostępne i zaktualizowane. Przykłady obejmują identyfikator URI sygnatury dostępu współdzielonego dla rozruchowego ładunku we właściwościach rozszerzenia maszyny wirtualnej, ładunku na koncie magazynu, odwołania do sekretów w modelu i nie tylko.
  • Jeśli używasz właściwości virtualMachineConfiguration.windowsConfiguration.enableAutomaticUpdates, ta właściwość musi mieć wartość "false" w definicji puli. Właściwość enableAutomaticUpdates umożliwia stosowanie poprawek na maszynie wirtualnej, gdzie "Windows Update" stosuje poprawki systemu operacyjnego bez zastępowania dysku systemu operacyjnego. W przypadku włączenia automatycznych uaktualnień obrazów systemu operacyjnego dodatkowy proces stosowania poprawek za pośrednictwem usługi Windows Update nie jest wymagany.

Dodatkowe wymagania dotyczące obrazów niestandardowych

  • Gdy nowa wersja obrazu zostanie opublikowana i zreplikowana w regionie tej puli, maszyny wirtualne zostaną uaktualnione do najnowszej wersji obrazu galerii obliczeń platformy Azure. Jeśli nowy obraz nie zostanie zreplikowany do regionu, w którym wdrożono pulę, instancje maszyn wirtualnych nie zostaną uaktualnione do najnowszej wersji. Replikacja obrazów regionalnych umożliwia kontrolowanie wdrożenia nowego obrazu dla maszyn wirtualnych.
  • Nowa wersja obrazu nie powinna być pominięta w najnowszej wersji obrazu w galerii. Wersje obrazów wykluczone z najnowszej wersji obrazu w galerii nie będą wdrażane za pośrednictwem automatycznej aktualizacji obrazu systemu operacyjnego.

Konfigurowanie automatycznego uaktualniania systemu operacyjnego

Jeśli zamierzasz zaimplementować automatyczne uaktualnienia systemu operacyjnego w puli, konieczne jest skonfigurowanie pola UpgradePolicy podczas procesu tworzenia puli. Aby skonfigurować automatyczne uaktualnienia obrazów systemu operacyjnego, upewnij się, że właściwość automaticOSUpgradePolicy.enableAutomaticOSUpgrade jest ustawiona na wartość "true" w definicji puli.

Uwaga

Tryb polityki uaktualniania i Polityka automatycznego uaktualniania systemu operacyjnego są oddzielnymi ustawieniami i kontrolują różne aspekty aprowizowania zestawu skalowania przez usługę Azure Batch. Tryb polityki aktualizacji określi, co się stanie z istniejącymi wystąpieniami w zestawie skalowalnym. Jednak polityka automatycznego uaktualniania systemu operacyjnego EnableAutomaticOSUpgrade jest specyficzna dla obrazu systemu operacyjnego i śledzi zmiany wprowadzone przez wydawcę obrazu oraz określa, co się stanie, gdy następuje aktualizacja obrazu.

Interfejs programistyczny REST API

W poniższym przykładzie opisano sposób tworzenia puli przy użyciu automatycznego uaktualniania systemu operacyjnego za pośrednictwem interfejsu API REST:

PUT https://management.azure.com/subscriptions/<subscriptionid>/resourceGroups/<resourcegroupName>/providers/Microsoft.Batch/batchAccounts/<batchaccountname>/pools/<poolname>?api-version=2024-02-01

Treść żądania

{
    "name": "test1",
    "type": "Microsoft.Batch/batchAccounts/pools",
    "parameters": {
        "properties": {
            "vmSize": "Standard_d4s_v3",
            "deploymentConfiguration": {
                "virtualMachineConfiguration": {
                    "imageReference": {
                        "publisher": "MicrosoftWindowsServer",
                        "offer": "WindowsServer",
                        "sku": "2019-datacenter-smalldisk",
                        "version": "latest"
                    },
                    "nodePlacementConfiguration": {
                        "policy": "Zonal"
                    },
                    "nodeAgentSKUId": "batch.node.windows amd64",
                    "windowsConfiguration": {
                        "enableAutomaticUpdates": false
                    }
                }
            },
            "scaleSettings": {
                "fixedScale": {
                    "targetDedicatedNodes": 2,
                    "targetLowPriorityNodes": 0
                }
            },
            "upgradePolicy": {
                "mode": "Automatic",
                "automaticOSUpgradePolicy": {
                    "disableAutomaticRollback": true,
                    "enableAutomaticOSUpgrade": true,
                    "useRollingUpgradePolicy": true,
                    "osRollingUpgradeDeferral": true
                },
                "rollingUpgradePolicy": {
                    "enableCrossZoneUpgrade": true,
                    "maxBatchInstancePercent": 20,
                    "maxUnhealthyInstancePercent": 20,
                    "maxUnhealthyUpgradedInstancePercent": 20,
                    "pauseTimeBetweenBatches": "PT0S",
                    "prioritizeUnhealthyInstances": false,
                    "rollbackFailedInstancesOnPolicyBreach": false
                }
            }
        }
    }
}

Zestaw SDK (C#)

Poniższy fragment kodu przedstawia przykład użycia biblioteki klienta platformy .NET usługi Batch do utworzenia puli automatycznego uaktualniania systemu operacyjnego za pomocą kodów języka C#. Aby uzyskać więcej informacji na temat Batch .NET, zapoznaj się z dokumentacją referencyjną.

public async Task CreateUpgradePolicyPool()
{
     // Authenticate
     var clientId = Environment.GetEnvironmentVariable("CLIENT_ID");
     var clientSecret = Environment.GetEnvironmentVariable("CLIENT_SECRET");
     var tenantId = Environment.GetEnvironmentVariable("TENANT_ID");
     var subscriptionId = Environment.GetEnvironmentVariable("SUBSCRIPTION_ID");
     ClientSecretCredential credential = new ClientSecretCredential(tenantId, clientId, clientSecret);
     ArmClient client = new ArmClient(credential, subscriptionId);
 
     // Get an existing Batch account
     string resourceGroupName = "testrg";
     string accountName = "testaccount";
     ResourceIdentifier batchAccountResourceId = BatchAccountResource.CreateResourceIdentifier(subscriptionId, resourceGroupName, accountName);
     BatchAccountResource batchAccount = client.GetBatchAccountResource(batchAccountResourceId);
 
     // get the collection of this BatchAccountPoolResource
     BatchAccountPoolCollection collection = batchAccount.GetBatchAccountPools();
 
     // Define the pool
     string poolName = "testpool";
     BatchAccountPoolData data = new BatchAccountPoolData()
     {
         VmSize = "Standard_d4s_v3",
         DeploymentConfiguration = new BatchDeploymentConfiguration()
         {
             VmConfiguration = new BatchVmConfiguration(new BatchImageReference()
             {
                 Publisher = "MicrosoftWindowsServer",
                 Offer = "WindowsServer",
                 Sku = "2019-datacenter-smalldisk",
                 Version = "latest",
             },
             nodeAgentSkuId: "batch.node.windows amd64")
             {
                 NodePlacementPolicy = BatchNodePlacementPolicyType.Zonal,
                 IsAutomaticUpdateEnabled = false
             },
         },
         ScaleSettings = new BatchAccountPoolScaleSettings()
         {
             FixedScale = new BatchAccountFixedScaleSettings()
             {
                 TargetDedicatedNodes = 2,
                 TargetLowPriorityNodes = 0,
             },
         },
         UpgradePolicy = new UpgradePolicy()
         {
             Mode = UpgradeMode.Automatic,
             AutomaticOSUpgradePolicy = new AutomaticOSUpgradePolicy()
             {
                 DisableAutomaticRollback = true,
                 EnableAutomaticOSUpgrade = true,
                 UseRollingUpgradePolicy = true,
                 OSRollingUpgradeDeferral = true
             },
             RollingUpgradePolicy = new RollingUpgradePolicy()
             {
                 EnableCrossZoneUpgrade = true,
                 MaxBatchInstancePercent = 20,
                 MaxUnhealthyInstancePercent = 20,
                 MaxUnhealthyUpgradedInstancePercent = 20,
                 PauseTimeBetweenBatches = "PT0S",
                 PrioritizeUnhealthyInstances = false,
                 RollbackFailedInstancesOnPolicyBreach = false,
             }
         }
     };
 
     ArmOperation<BatchAccountPoolResource> lro = await collection.CreateOrUpdateAsync(WaitUntil.Completed, poolName, data);
     BatchAccountPoolResource result = lro.Value;
 
     // the variable result is a resource, you could call other operations on this instance as well
     // but just for demo, we get its data from this resource instance
     BatchAccountPoolData resourceData = result.Data;
     // for demo we just print out the id
     Console.WriteLine($"Succeeded on id: {resourceData.Id}");
}

Często zadawane pytania

  • Czy moje zadania będą zakłócane, jeśli włączono automatyczne uaktualnianie systemu operacyjnego?

    Zadania nie będą zakłócane, gdy parametr automaticOSUpgradePolicy.osRollingUpgradeDeferral jest ustawiony na wartość "true". W takim przypadku uaktualnienie zostanie odłożone do momentu, aż węzeł stanie się bezczynny. W przeciwnym razie węzeł zostanie uaktualniony, gdy otrzyma nową wersję systemu operacyjnego, niezależnie od tego, czy aktualnie uruchomiono jakieś zadanie, czy nie. Dlatego zdecydowanie zalecamy włączenie funkcji automaticOSUpgradePolicy.osRollingUpgradeDeferral.

Następne kroki

  • Dowiedz się, jak przy użyciu zarządzanego obrazu utworzyć pulę.
  • Dowiedz się, jak utworzyć pulę przy użyciu galerii obliczeń platformy Azure.