Поделиться через


Создайте пул Azure Batch с автоматическим обновлением операционной системы (ОС)

При создании пула Azure Batch можно настроить пул с узлами, для которых включено автоматическое обновление ОС. В этой статье объясняется, как настроить пул Batch с автоматическим обновлением ОС.

Зачем использовать автоматическое обновление ОС?

Автоматическое обновление ОС используется для реализации стратегии автоматического обновления операционной системы и управления в пулах Azure Batch. Ниже приведены некоторые причины использования автоматического обновления ОС:

  • Безопасность. Автоматическое обновление ОС обеспечивает своевременное исправление уязвимостей и проблем безопасности в образе операционной системы для повышения безопасности вычислительных ресурсов. Это помогает предотвратить потенциальные уязвимости безопасности от возникновения угрозы для приложений и данных.
  • Минимизация нарушений доступности. Автоматическое обновление ОС используется для минимизации сбоя доступности вычислительных узлов во время обновления ОС. Она достигается с помощью отсрочки обновлений с учетом планирования задач и поддержки поэтапного обновления, что обеспечивает минимальное нарушение рабочих нагрузок.
  • Гибкость. Автоматическое обновление ОС позволяет настроить стратегию автоматического обновления операционной системы, включая координацию обновлений на основе процентного распределения и поддержку возврата. Это означает, что вы можете настроить стратегию обновления в соответствии с конкретными требованиями к производительности и доступности.
  • Контроль. Автоматическое обновление ОС обеспечивает контроль над стратегией обновления операционной системы, чтобы обеспечить безопасные развертывания обновлений с поддержкой рабочих нагрузок. Вы можете настроить конфигурации политики в соответствии с конкретными потребностями вашей организации.

В итоге использование автоматического обновления ОС помогает повысить безопасность, свести к минимуму нарушения доступности и обеспечить больший контроль и гибкость для рабочих нагрузок.

Как работает автоматическое обновление ОС?

При обновлении образов виртуальные машины в пуле Azure Batch будут следовать примерно тому же рабочему процессу, что и в VirtualMachineScaleSets. Дополнительные сведения о подробных шагах, связанных с процессом автоматического обновления ОС для VirtualMachineScaleSets, см. на странице VirtualMachineScaleSet.

Однако если параметр automaticOSUpgradePolicy.osRollingUpgradeDeferral имеет значение true, а обновление становится доступным при активном выполнении задач пакетного узла, обновление будет отложено до завершения всех задач на узле.

Примечание.

Если в пуле включена osRollingUpgradeDeferral, его узлы будут отображаться в состоянии обновления ОС во время процесса обновления. Обратите внимание, что состояние обновления системы будет отображаться только при использовании версии API 2024-02-01 или более поздней. Если вы используете старую версию API для вызова GetTVM/ListTVM, узел будет находиться в состоянии перезагрузки при обновлении.

Поддерживаемые образы ОС

В настоящее время поддерживаются только некоторые образы платформы ОС для автоматического обновления. Подробный список изображений можно получить на странице VirtualMachineScaleSet.

Требования

  • Для свойства версии образа должно быть задано последнее значение.
  • Для API управления пакетной службой используйте API версии 2024-02-01 или более поздней. Для API пакетной службы используйте API версии 2024-02-01.19.0 или более поздней.
  • Убедитесь, что внешние ресурсы, указанные в пуле, доступны и обновлены. Примеры включают URI SAS для начальной загрузки полезной нагрузки в свойствах расширения виртуальной машины, полезная нагрузка в учетной записи хранения, ссылки на секреты в модели и многое другое.
  • Если вы используете свойство virtualMachineConfiguration.windowsConfiguration.enableAutomaticUpdates, это свойство должно иметь значение false в определении пула. Свойство enableAutomaticUpdates позволяет выполнять исправления в виртуальной машине, когда Центр обновления Windows применяет исправления операционной системы без замены диска ОС. При включённом автоматическом обновлении образа ОС дополнительный процесс исправления через Обновления Windows не требуется.

Дополнительные требования для кастомных изображений

  • После публикации и репликации нового образа в регион, где находится этот пул, виртуальные машины будут обновлены до последней версии изображения из галереи изображений Azure Compute. Если новый образ не реплицируется в регион, в котором развернут пул, экземпляры виртуальных машин не будут обновлены до последней версии. Репликация региональных образов позволяет управлять развертыванием нового образа для виртуальных машин.
  • Новая версия изображения не должна быть исключена из последней версии галерейного изображения. Версии изображений, исключенные из последней версии галереи изображений, не будут развернуты посредством автоматического обновления образа ОС.

Настройка автоматического обновления ОС

Если вы планируете реализовать автоматическое обновление ОС в пуле, необходимо настроить поле UpgradePolicy во время процесса создания пула. Чтобы настроить автоматическое обновление образа ОС, убедитесь, что свойство automaticOSUpgradePolicy.enableAutomaticOSUpgrade имеет значение true в определении пула.

Примечание.

Режим политики обновления и Политика автоматического обновления ОС — это отдельные параметры, управляющие различными аспектами подготовленного набора масштабирования, управляемого службой Azure Batch. Режим политики обновления определяет, что происходит с существующими экземплярами в масштабируемом наборе. Однако политика автоматического обновления ОС enableAutomaticOSUpgrade зависит от образа ОС и отслеживает изменения, внесенные издателем образа, и определяет, что происходит при обновлении образа.

REST API

В следующем примере описывается создание пула с автоматическим обновлением ОС с помощью REST API:

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

Тело запроса

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

В следующем фрагменте кода показан пример использования клиентской библиотеки Пакетной службы .NET для создания пула автоматического обновления ОС с помощью кодов C#. Дополнительные сведения о .NET для пакетной обработки см. в справочной документации.

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

Вопросы и ответы

  • Будут ли мои задачи нарушены, если включена автоматическая обновление ОС?

    Задачи не будут нарушены, если параметр automaticOSUpgradePolicy.osRollingUpgradeDeferral имеет значение true. В этом случае обновление будет отложено до тех пор, пока узел не станет бездействующим. В противном случае узел будет обновляться при получении новой версии ОС, независимо от того, выполняется ли в данный момент какая-либо задача. Поэтому мы настоятельно рекомендуем включить automaticOSUpgradePolicy.osRollingUpgradeDeferral.

Следующие шаги