Creare un pool di Azure Batch con l'aggiornamento automatico del sistema operativo

Quando si crea un pool di Azure Batch, è possibile effettuare il provisioning del pool con nodi con l'aggiornamento automatico del sistema operativo abilitato. Questo articolo illustra come configurare un pool di Batch con l'aggiornamento automatico del sistema operativo.

Perché usare l'aggiornamento automatico del sistema operativo?

L'aggiornamento automatico del sistema operativo viene usato per implementare una strategia di aggiornamento automatico del sistema operativo e il controllo all'interno dei pool di Azure Batch. Ecco alcuni motivi per usare l'aggiornamento automatico del sistema operativo:

  • Protezione. L'aggiornamento automatico del sistema operativo garantisce l'applicazione tempestiva di patch alle vulnerabilità e ai problemi di sicurezza all'interno dell'immagine del sistema operativo, per migliorare la sicurezza delle risorse di calcolo. Aiuta a prevenire che potenziali vulnerabilità di sicurezza rappresentino una minaccia per applicazioni e dati.
  • Ridotta interruzione della disponibilità L'aggiornamento automatico del sistema operativo viene usato per ridurre al minimo l'interruzione della disponibilità dei nodi di calcolo durante gli aggiornamenti del sistema operativo. Ciò si ottiene tramite il rinvio degli aggiornamenti che tiene conto della pianificazione delle attività e il supporto per gli aggiornamenti progressivi, garantendo un'interruzione minima dei carichi di lavoro.
  • Flessibilità. L'aggiornamento automatico del sistema operativo consente di configurare la strategia di aggiornamento automatico del sistema operativo, tra cui il coordinamento degli aggiornamenti in base alla percentuale e il supporto del rollback. Ciò significa che è possibile personalizzare la strategia di aggiornamento per soddisfare i requisiti specifici di prestazioni e disponibilità.
  • Controllo. L'aggiornamento automatico del sistema operativo offre il controllo sulla strategia di aggiornamento del sistema operativo per garantire distribuzioni di aggiornamenti sicure e con riconoscimento del carico di lavoro. È possibile personalizzare le configurazioni dei criteri per soddisfare le esigenze specifiche dell'organizzazione.

In sintesi, l'uso dell'aggiornamento automatico del sistema operativo consente di migliorare la sicurezza, ridurre al minimo le interruzioni della disponibilità e offrire maggiore controllo e flessibilità per i carichi di lavoro.

Come funziona l'aggiornamento automatico del sistema operativo?

Quando si aggiornano le immagini, le macchine virtuali nel pool di Azure Batch seguiranno approssimativamente lo stesso flusso di lavoro di VirtualMachineScaleSets. Per altre informazioni sui passaggi dettagliati coinvolti nel processo di aggiornamento automatico del sistema operativo per VirtualMachineScaleSets, è possibile fare riferimento alla pagina VirtualMachineScaleSet.

Tuttavia, se automaticOSUpgradePolicy.osRollingUpgradeDeferral è impostato su "true" e un aggiornamento diventa disponibile quando un nodo batch esegue attivamente le attività, l'aggiornamento verrà ritardato fino al completamento di tutte le attività nel nodo.

Nota

Se un pool ha abilitato osRollingUpgradeDeferral, i relativi nodi verranno visualizzati come stato di aggiornamento durante il processo di aggiornamento. Si noti che lo stato upgradingos verrà visualizzato solo quando si utilizza la versione dell'API 2024-02-01 o una versione successiva. Se si usa una versione precedente dell'API per chiamare GetTVM/ListTVM, il nodo si troverà in uno stato di riavvio durante l'aggiornamento.

Immagini del sistema operativo supportate

Solo alcune immagini della piattaforma del sistema operativo sono attualmente supportate per l'aggiornamento automatico. Per un elenco dettagliato delle immagini, puoi ottenerlo dalla pagina VirtualMachineScaleSet.

Requisiti

  • La proprietà version dell'immagine deve essere impostata su latest.
  • Per l'API di gestione batch, usare l'API versione 2024-02-01 o successiva. Per l'API del servizio Batch, usare l'API versione 2024-02-01.19.0 o successiva.
  • Assicurarsi che le risorse esterne specificate nel pool siano disponibili e aggiornate. Ad esempio, URI della firma di accesso condiviso per il payload di bootstrap nelle proprietà di estensione della macchina virtuale, payload nell'account di archiviazione, riferimento ai segreti nel modello e altro.
  • Se si usa la proprietà virtualMachineConfiguration.windowsConfiguration.enableAutomaticUpdates, questa proprietà deve essere impostata su 'false' nella definizione del pool. La proprietà enableAutomaticUpdates abilita l'applicazione di patch in-VM in cui "Windows Update" applica le patch del sistema operativo senza sostituire il disco del sistema operativo. Con gli aggiornamenti automatici delle immagini del sistema operativo abilitati, non è necessario un processo di applicazione di patch aggiuntivo tramite Windows Update.

Requisiti aggiuntivi per le immagini personalizzate

  • Quando viene pubblicata e replicata una nuova versione dell'immagine nell'area del pool, le macchine virtuali verranno aggiornate all'ultima versione dell'immagine della raccolta di calcolo di Azure. Se la nuova immagine non viene replicata nell'area in cui viene distribuito il pool, le istanze della macchina virtuale non verranno aggiornate alla versione più recente. La replica regionale delle immagini consente di controllare la distribuzione della nuova immagine alle macchine virtuali.
  • La versione della nuova immagine non deve essere esclusa dalla versione più recente per l'immagine della raccolta. Le versioni dell'immagine escluse dalla versione più recente dell'immagine della galleria non verranno distribuite tramite l'aggiornamento automatico dell'immagine del sistema operativo.

Configurare l'aggiornamento automatico del sistema operativo

Se si prevede di implementare gli aggiornamenti automatici del sistema operativo all'interno di un pool, è essenziale configurare il campo UpgradePolicy durante il processo di creazione del pool. Per configurare gli aggiornamenti automatici dell'immagine del sistema operativo, assicurarsi che la proprietà automaticOSUpgradePolicy.enableAutomaticOSUpgrade sia impostata su "true" nella definizione del pool.

Nota

Modalità dei criteri di aggiornamento e Criteri di aggiornamento automatico del sistema operativo sono impostazioni separate e controllano aspetti diversi del set di scalabilità sottoposto a provisioning da Azure Batch. La modalità del criterio di aggiornamento determina cosa succede alle istanze esistenti nel set di scalabilità. Tuttavia, il criterio di aggiornamento automatico del sistema operativo enableAutomaticOSUpgrade è specifico dell'immagine del sistema operativo, tiene traccia delle modifiche apportate dal provider dell'immagine e determina cosa accade quando è disponibile un aggiornamento dell'immagine.

REST API

L'esempio seguente descrive come creare un pool con l'aggiornamento automatico del sistema operativo tramite l'API REST:

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

Corpo della richiesta

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

SDK (C#)

Il frammento di codice seguente illustra un esempio di come usare il Azure. ResourceManager.Batch libreria client per creare un pool di aggiornamenti automatici del sistema operativo tramite codici C#. Per ulteriori dettagli su Azure.ResourceManager.Batch, vedere la documentazione di riferimento.

public async Task CreateUpgradePolicyPool()
{
     // Authenticate
     var subscriptionId = Environment.GetEnvironmentVariable("SUBSCRIPTION_ID");
     DefaultAzureCredential credential = new DefaultAzureCredential();
     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}");
}

Domande frequenti

  • Le attività verranno interrotte se è stato abilitato l'aggiornamento automatico del sistema operativo?

    Le attività non verranno interrotte quando automaticOSUpgradePolicy.osRollingUpgradeDeferral è impostato su "true". In tal caso, l'aggiornamento verrà posticipato finché il nodo non diventa inattivo. In caso contrario, il nodo verrà aggiornato quando riceve una nuova versione del sistema operativo, indipendentemente dal fatto che sia attualmente in esecuzione o meno un'attività. È quindi consigliabile abilitare automaticOSUpgradePolicy.osRollingUpgradeDeferral.

Passaggi successivi

  • Informazioni su come usare un'immagine gestita per creare un pool.
  • Informazioni su come usare la raccolta di calcolo di Azure per creare un pool.