Condividi tramite


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. Consente di evitare potenziali vulnerabilità di sicurezza di mettere in pericolo applicazioni e dati.
  • Interruzione della disponibilità ridotta. 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. Viene ottenuto tramite il differimento dell'aggiornamento in grado di pianificare le attività e il supporto per gli aggiornamenti in sequenza, assicurando che i carichi di lavoro subiscano un'interruzione minima.
  • 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 upgradeos verrà visualizzato solo quando si usa la versione API 2024-02-01 o 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, è possibile ottenere 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 di immagini a livello di area consente di controllare l'implementazione della nuova immagine per le macchine virtuali.
  • La nuova versione dell'immagine non deve essere esclusa dalla versione più recente per l'immagine della raccolta. Le versioni delle immagini escluse dalla versione più recente dell'immagine della raccolta non verranno implementate 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

La modalità criteri di aggiornamento e i criteri di aggiornamento automatico del sistema operativo sono impostazioni separate e controllano diversi aspetti del set di scalabilità di cui è stato effettuato il provisioning da Azure Batch. La modalità Criteri di aggiornamento determinerà cosa accade alle istanze esistenti nel set di scalabilità. Tuttavia, il criterio di aggiornamento automatico del sistema operativo enableAutomaticOSUpgrade è specifico per l'immagine del sistema operativo e tiene traccia delle modifiche apportate all'autore dell'immagine e determina cosa accade quando è presente un aggiornamento dell'immagine.

Importante

Se si usa la sottoscrizione utente, è essenziale notare che per la registrazione della sottoscrizione è necessaria una funzionalità di sottoscrizione Microsoft.Compute/RollingUpgradeDeferral . Non è possibile usare osRollingUpgradeDeferral a meno che questa funzionalità non sia registrata. Per abilitare questa funzionalità, registrarla manualmente nella sottoscrizione.

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 la libreria client Batch .NET per creare un pool di aggiornamenti automatici del sistema operativo tramite codici C#. Per altri dettagli su Batch .NET, vedere la documentazione di riferimento.

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}");
}

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 fino a quando il nodo non diventa inattiva. 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.