Partager via


Créer un pool Azure Batch avec mise à niveau automatique du système d’exploitation

Lorsque vous créez un pool Azure Batch, vous pouvez l’approvisionner avec des nœuds sur lesquels la mise à niveau automatique du système d’exploitation est activée. Cet article explique comment configurer un pool Batch avec mise à niveau automatique du système d’exploitation.

Pourquoi utiliser la mise à niveau automatique du système d’exploitation ?

La mise à niveau automatique du système d’exploitation est utilisée pour implémenter une stratégie de mise à niveau automatique du système d’exploitation et un contrôle dans les pools Azure Batch. Voici quelques raisons susceptibles de motiver l’utilisation de la mise à niveau automatique du système d’exploitation :

  • Sécurité. La mise à niveau automatique du système d’exploitation garantit une mise à jour corrective rapide des vulnérabilités et des problèmes de sécurité au sein de l’image du système d’exploitation, afin d’améliorer la sécurité des ressources de calcul. Elle permet d’empêcher les vulnérabilités de sécurité potentielles de présenter une menace pour les applications et les données.
  • Interruption de disponibilité réduite. La mise à niveau automatique du système d’exploitation est utilisée pour réduire l’interruption de disponibilité des nœuds de calcul pendant les mises à niveau du système d’exploitation. Elle est obtenue par le biais d’un report de mise à niveau prenant en charge la planification des tâches et de la prise en charge des mises à niveau propagées, ce qui garantit que les charges de travail subissent une interruption minimale.
  • Flexibilité. La mise à niveau automatique du système d’exploitation vous permet de configurer votre stratégie de mise à niveau automatique du système d’exploitation, notamment la coordination de la mise à niveau basée sur des pourcentages et la prise en charge de la restauration. Cela signifie que vous pouvez personnaliser votre stratégie de mise à niveau afin de répondre à vos besoins spécifiques en matière de performances et de disponibilité.
  • Contrôle. La mise à niveau automatique du système d’exploitation vous permet de contrôler votre stratégie de mise à niveau du système d’exploitation pour garantir des déploiements de mise à niveau sécurisés et prenant en charge les charges de travail. Vous pouvez personnaliser vos configurations de stratégie pour répondre aux besoins spécifiques de votre organisation.

En résumé, l’utilisation de la mise à niveau automatique du système d’exploitation permet d’améliorer la sécurité, de réduire les interruptions de disponibilité et de fournir un meilleur contrôle et une plus grande flexibilité pour vos charges de travail.

Comment fonctionne la mise à niveau automatique du système d’exploitation ?

Lors de la mise à niveau d’images, les machines virtuelles du pool Azure Batch suivent à peu près le même flux de travail que Virtual Machine Scale Sets. Pour en savoir plus sur les étapes détaillées impliquées dans le processus de mise à niveau automatique du système d’exploitation pour Virtual Machine Scale Sets, vous pouvez consulter la page sur Virtual Machine Scale Sets.

Toutefois, si automaticOSUpgradePolicy.osRollingUpgradeDeferral a la valeur « true » et qu’une mise à niveau devient disponible lorsqu’un nœud Batch exécute activement des tâches, la mise à niveau est retardée jusqu’à ce que toutes les tâches soient terminées sur le nœud.

Remarque

Si un pool a activé osRollingUpgradeDeferral, ses nœuds indiquent l’état upgradingos pendant le processus de mise à niveau. Notez que l’état upgradingos s’affiche uniquement lorsque vous utilisez l’API version 2024-02-01 ou ultérieure. Si vous utilisez une ancienne version d’API pour appeler GetTVM/ListTVM, le nœud sera à l’état rebooting lors de la mise à niveau.

Images de système d’exploitation prises en charge

Seules certaines images de plateforme de système d’exploitation sont actuellement prises en charge pour la mise à niveau automatique. Pour obtenir une liste détaillée des images, consultez la page sur Virtual Machine Scale Sets.

Spécifications

  • La propriété de version de l’image doit être définie sur latest.
  • Pour l’API Gestion de Batch, utilisez l’API version 2024-02-01 ou ultérieure. Pour l’API Service Batch, utilisez l’API version 2024-02-01.19.0 ou ultérieure.
  • Vérifiez que les ressources externes spécifiées dans le pool sont disponibles et à jour. Les ressources concernées sont l’URI SAS pour l’amorçage de la charge utile dans les propriétés d’extension de machine virtuelle et dans le compte de stockage, les références à des secrets dans le modèle, etc.
  • Si vous utilisez la propriété virtualMachineConfiguration.windowsConfiguration.enableAutomaticUpdates, elle doit avoir la valeur « false » dans la définition du pool. La propriété enableAutomaticUpdates active les mises à jour correctives dans les machines virtuelles où « Windows Update » applique les correctifs du système d’exploitation sans remplacer le disque du système d’exploitation. Lorsque les mises à niveau automatiques de l’image du système d’exploitation sont activées, un processus de mise à jour corrective supplémentaire effectuée par le biais de Windows Update n’est pas nécessaire.

Exigences supplémentaires pour les images personnalisées

  • Lorsqu’une nouvelle version de l’image est publiée et répliquée dans la région de ce pool, les machines virtuelles sont mises à niveau vers la dernière version de l’image Azure Compute Gallery. Si la nouvelle image n’est pas répliquée vers la région où le pool est déployé, les instances de machine virtuelle ne seront pas mises à niveau vers la dernière version. La réplication régionale d’image vous permet de contrôler le déploiement de la nouvelle image pour vos machines virtuelles.
  • La nouvelle version de l’image ne doit pas être exclue de la version la plus récente pour cette image de la galerie. Les versions d’image exclues de la dernière version de l’image de la galerie ne seront pas déployées par le biais de la mise à niveau automatique de l’image du système d’exploitation.

Configurer la mise à niveau automatique du système d’exploitation

Si vous envisagez d’implémenter des mises à niveau automatiques du système d’exploitation au sein d’un pool, il est essentiel de configurer le champ UpgradePolicy pendant le processus de création du pool. Pour configurer la mise à niveau automatique d’image de système d’exploitation, vérifiez que la propriété automaticOSUpgradePolicy.enableAutomaticOSUpgrade a la valeur « true » dans la définition du pool.

Remarque

Le mode de stratégie de mise à niveau et la stratégie de mise à niveau automatique du système d’exploitation sont des paramètres distincts, et ils contrôlent différents aspects du groupe identique approvisionné par Azure Batch. Le mode de stratégie de mise à niveau détermine ce qui se produit au niveau des instances existantes dans le groupe identique. La stratégie de mise à niveau automatique du système d’exploitation enableAutomaticOSUpgrade, en revanche, est propre à l’image du système d’exploitation. Elle effectue le suivi des modifications apportées par l’éditeur d’images et détermine ce qui se passe lorsqu’il existe une mise à jour de l’image.

Important

Si vous utilisez un abonnement utilisateur, il est essentiel de noter qu’une fonctionnalité d’abonnement Microsoft.Compute/RollingUpgradeDeferral est requise pour que votre abonnement soit inscrit. Vous ne pouvez utiliser osRollingUpgradeDeferral que si cette fonctionnalité est inscrite. Pour activer cette fonctionnalité, inscrivez-la manuellement sur votre abonnement.

API REST

L’exemple suivant décrit comment créer un pool avec mise à niveau automatique du système d’exploitation via l’API REST :

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

Corps de la demande

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

Kit SDK (C#)

L’extrait de code suivant offre un exemple d’utilisation de la bibliothèque de client Batch .NET pour créer un pool de mise à niveau automatique du système d’exploitation à l’aide de code C#. Pour plus d’informations sur Batch .NET, consultez la documentation de référence.

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

FAQ

  • Mes tâches seront-elles interrompues si j’ai activé la mise à niveau automatique du système d’exploitation ?

    Les tâches ne sont pas interrompues lorsque automaticOSUpgradePolicy.osRollingUpgradeDeferral a la valeur « true ». Dans ce cas, la mise à niveau est reportée jusqu’à ce que le nœud devienne inactif. Autrement, le nœud est mis à niveau lorsqu’il reçoit une nouvelle version du système d’exploitation, qu’il exécute actuellement une tâche ou non. Nous vous conseillons donc vivement d’activer automaticOSUpgradePolicy.osRollingUpgradeDeferral.

Étapes suivantes