Создание пула пакетная служба Azure с автоматическим обновлением операционной системы (ОС)
При создании пула пакетная служба Azure можно подготовить пул с узлами с включенным автоматическим обновлением ОС. В этой статье объясняется, как настроить пул пакетной службы с помощью автоматического обновления ОС.
Зачем использовать автоматическое обновление ОС?
Автоматическое обновление ОС используется для реализации стратегии автоматического обновления операционной системы и управления в пакетная служба Azure пулах. Ниже приведены некоторые причины использования автоматического обновления ОС:
- Безопасность. Автоматическое обновление ОС обеспечивает своевременное исправление уязвимостей и проблем безопасности в образе операционной системы для повышения безопасности вычислительных ресурсов. Это помогает предотвратить потенциальные уязвимости безопасности от возникновения угрозы для приложений и данных.
- Свести к минимуму нарушение доступности. Автоматическое обновление ОС используется для минимизации сбоя доступности вычислительных узлов во время обновления ОС. Она достигается с помощью отсрочки обновления с поддержкой планирования задач и поддержки последовательного обновления, обеспечивая минимальное нарушение рабочих нагрузок.
- Гибкость. Автоматическое обновление ОС позволяет настроить стратегию автоматического обновления операционной системы, включая координацию обновления на основе процента и поддержку отката. Это означает, что вы можете настроить стратегию обновления в соответствии с конкретными требованиями к производительности и доступности.
- Контроль. Автоматическое обновление ОС обеспечивает контроль над стратегией обновления операционной системы, чтобы обеспечить безопасные развертывания обновлений с поддержкой рабочих нагрузок. Вы можете настроить конфигурации политики в соответствии с конкретными потребностями вашей организации.
В итоге использование автоматического обновления ОС помогает повысить безопасность, свести к минимуму нарушения доступности и обеспечить больший контроль и гибкость для рабочих нагрузок.
Как работает автоматическое обновление ОС?
При обновлении образов виртуальные машины в пуле пакетная служба Azure будут следовать примерно тому же рабочему потоку, что и 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. Если новый образ не реплицируется в регион, в котором развернут пул, экземпляры виртуальных машин не будут обновлены до последней версии. Репликация региональных образов позволяет управлять развертыванием нового образа для виртуальных машин.
- Новая версия образа не должна быть исключена из последней версии для этого образа коллекции. Версии образа, исключенные из последней версии образа коллекции, не будут развернуты с помощью автоматического обновления образа ОС.
Настройка автоматического обновления ОС
Если вы планируете реализовать автоматическое обновление ОС в пуле, необходимо настроить поле UpgradePolicy во время процесса создания пула. Чтобы настроить автоматическое обновление образа ОС, убедитесь, что свойство automaticOSUpgradePolicy.enableAutomaticOSUpgrade имеет значение true в определении пула.
Примечание.
Режим политики обновления и политика автоматического обновления ОС — это отдельные параметры и управление различными аспектами подготовленного масштабируемого набора пакетная служба Azure. Режим политики обновления определяет, что происходит с существующими экземплярами в масштабируемом наборе. Однако политика автоматического обновления ОС 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.
Следующие шаги
- Узнайте, как использовать управляемый образ для создания пула.
- Узнайте, как использовать коллекцию вычислений Azure для создания пула.