Compartir a través de


Creación de un grupo de Azure Batch con actualización automática del sistema operativo (SO)

Al crear un grupo de Azure Batch, puede aprovisionar el grupo con nodos que tengan habilitada la actualización automática del sistema operativo. En este artículo se explica cómo configurar un grupo de Batch con actualización automática del sistema operativo.

Por qué usar la actualización automática del sistema operativo

La actualización automática del sistema operativo se usa para implementar una estrategia de actualización automática del sistema operativo y un control dentro de grupos de Azure Batch. Estos son algunos de los motivos por los que se usa la actualización automática del sistema operativo:

  • Seguridad. La actualización automática del sistema operativo garantiza la aplicación de revisiones oportunas de vulnerabilidades y problemas de seguridad dentro de la imagen del sistema operativo, para mejorar la seguridad de los recursos de proceso. Ayuda a evitar que posibles vulnerabilidades de seguridad puedan suponer una amenaza para las aplicaciones y los datos.
  • Interrupción de disponibilidad minimizada. La actualización automática del sistema operativo se usa para minimizar la interrupción de la disponibilidad de los nodos de proceso durante las actualizaciones del sistema operativo. Se logra mediante el aplazamiento de actualizaciones compatibles con la programación de tareas y la compatibilidad con actualizaciones graduales, lo que garantiza que las cargas de trabajo experimenten una interrupción mínima.
  • Flexibilidad. La actualización automática del sistema operativo permite configurar la estrategia de actualización automática del sistema operativo, incluida la coordinación de actualizaciones basada en porcentajes y la compatibilidad con la reversión. Esto significa que puede personalizar la estrategia de actualización para satisfacer requisitos específicos de rendimiento y disponibilidad.
  • Control. La actualización automática del sistema operativo proporciona control sobre la estrategia de actualización del sistema operativo para garantizar implementaciones de actualización seguras y compatibles con la carga de trabajo. Puede ajustar la configuraciones de directivas para satisfacer las necesidades específicas de la organización.

En resumen, el uso de la actualización automática del sistema operativo ayuda a mejorar la seguridad, minimizar las interrupciones de disponibilidad y proporcionar un mayor control y flexibilidad para las cargas de trabajo.

¿Cómo funciona la actualización automática del sistema operativo?

Al actualizar imágenes, las máquinas virtuales del grupo de Azure Batch seguirán aproximadamente el mismo flujo de trabajo que VirtualMachineScaleSets. Para más información sobre los pasos detallados implicados en el proceso de actualización automática del sistema operativo para VirtualMachineScaleSets, puede consultar la página VirtualMachineScaleSet.

Pero si automaticOSUpgradePolicy.osRollingUpgradeDeferral se establece en "true" y hay una actualización disponible cuando un nodo por lotes ejecuta activamente tareas, la actualización se retrasará hasta que se hayan completado todas las tareas en el nodo.

Nota:

Si un grupo ha habilitado osRollingUpgradeDeferral, sus nodos se mostrarán con el estado upgradingos durante el proceso de actualización. Tenga en cuenta que el estado upgradingos solo se mostrará cuando use la versión  2024-02-01 o posterior de la API. Si usa una versión anterior de la API para llamar a GetTVM/ListTVM, el nodo estará en un estado rebooting al actualizar.

Imágenes de sistema operativo compatibles

Actualmente solo se admiten determinadas imágenes de plataforma del sistema operativo para la actualización automática. Puede obtener una lista detallada de imágenes en la página VirtualMachineScaleSet.

Requisitos

  • La propiedad de versión de la imagen se debe establecer en latest.
  • Para Batch Management API, use la versión 2024-02-01 o posterior de la API. Para Batch Service API, use la versión 2024-02-01.19.0 o posterior de la API.
  • Asegúrese de que los recursos externos especificados en el grupo están disponibles y actualizados. Por ejemplo, el URI de SAS para arrancar la carga en las propiedades de extensión de máquina virtual, la carga de la cuenta de almacenamiento, la referencia a los secretos del modelo, etc.
  • Si va a usar la propiedad virtualMachineConfiguration.windowsConfiguration.enableAutomaticUpdates, se debe establecer en "false" en la definición del grupo. La propiedad enableAutomaticUpdates habilita la aplicación de revisiones en la máquina virtual, donde Windows Update aplica revisiones del sistema operativo sin reemplazar el disco de este. Con las actualizaciones automáticas de la imagen del sistema operativo habilitadas, no es necesario un proceso adicional de aplicación de revisiones mediante Windows Update.

Requisitos adicionales de las imágenes personalizadas

  • Cuando se publica una versión nueva de la imagen y se replica en la región de ese grupo, las máquinas virtuales se actualizarán a la versión más reciente de la imagen de Azure Compute Gallery. Si la nueva imagen no se replica en la región donde se implementa el grupo, las instancias de máquina virtual no se actualizarán a la versión más reciente. La replicación de imagen regional el permite controlar la implementación de la nueva imagen para las máquinas virtuales.
  • La versión de la nueva imagen no se debe excluir de la versión más reciente de esa imagen de la galería. Las versiones de imagen excluidas de la versión más reciente de la imagen de la galería no se implementarán mediante la actualización automática de la imagen del sistema operativo.

Configuración de la actualización automática del sistema operativo

Si tiene previsto implementar actualizaciones automáticas del sistema operativo dentro de un grupo, es esencial configurar el campo UpgradePolicy durante el proceso de creación del grupo. Para configurar la actualización automática de imágenes del sistema operativo, asegúrese de que la propiedad automaticOSUpgradePolicy.enableAutomaticOSUpgrade está establecida en "true" en la definición del grupo.

Nota:

El modo de directiva de actualización y la directiva de actualización automática del sistema operativo son valores independientes y controlan distintos aspectos del conjunto de escalado aprovisionado por Azure Batch. El modo de directiva de actualización determinará lo que sucede con las instancias existentes en el conjunto de escalado. Pero el valor enableAutomaticOSUpgrade de la directiva de actualización automática del sistema operativo es específico de la imagen del sistema operativo y supervisa los cambios realizados por el editor de la imagen y determina lo que ocurre cuando hay una actualización de la imagen.

Importante

Si va a usar suscripción de usuario, es esencial tener en cuenta que se necesita una característica de suscripción Microsoft.Compute/RollingUpgradeDeferral para que la suscripción se registre. No puede usar osRollingUpgradeDeferral a menos que esta característica esté registrada. Para habilitar esta característica, debe registrarla manualmente en la suscripción.

REST API

En el ejemplo siguiente se describe cómo crear un grupo con actualización automática del sistema operativo mediante la API REST:

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

Cuerpo de la solicitud

{
    "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#)

En el fragmento de código siguiente se muestra un ejemplo de cómo usar la biblioteca cliente .NET de Batch para crear un grupo de actualización automática del sistema operativo mediante códigos de C#. Para más información sobre .NET de Batch, consulte la documentación de referencia.

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

Preguntas más frecuentes

  • ¿Se interrumpirán las tareas si he habilitado la actualización automática del sistema operativo?

    Las tareas no se interrumpirán cuando automaticOSUpgradePolicy.osRollingUpgradeDeferral se establece en "true". En ese caso, la actualización se pospondrá hasta que el nodo se vuelva inactivo. De lo contrario, el nodo se actualizará cuando reciba una nueva versión del sistema operativo, con independencia de si actualmente ejecuta una tarea o no. Por tanto, se recomienda encarecidamente habilitar automaticOSUpgradePolicy.osRollingUpgradeDeferral.

Pasos siguientes