Erstellen eines Azure-Batchpools mit Automatischem Betriebssystemupgrade
Wenn Sie einen Azure Batchpool erstellen, können Sie den Pool mit Knoten bereitstellen, für die das automatische Betriebssystemupgrade aktiviert ist. In diesem Artikel wird erläutert, wie Sie einen Batchpool mit automatischem Betriebssystemupgrade einrichten.
Gründe für die Verwendung des Automatischen Betriebssystemupgrades
Das automatische Betriebssystemupgrade wird verwendet, um eine automatische Upgradestrategie des Betriebssystems und die Steuerung in Azure Batchpools zu implementieren. Hier sind einige Gründe für die Verwendung des automatischen Betriebssystemupgrades:
- Sicherheit: Das automatische Betriebssystemupgrade stellt ein zeitnahes Patchen von Sicherheitsrisiken und Sicherheitsproblemen innerhalb des Betriebssystemimages sicher, um die Sicherheit von Computeressourcen zu verbessern. Es hilft zu verhindern, dass potenzielle Sicherheitsrisiken eine Bedrohung für Anwendungen und Daten darstellen.
- Minimierte Verfügbarkeitsunterbrechung. Das automatische Betriebssystemupgrade wird verwendet, um die Verfügbarkeitsunterbrechung von Computeknoten während Betriebssystemupgrades zu minimieren. Sie wird durch Verzögerungen und Unterstützung für parallele Upgrades erreicht, wodurch sichergestellt wird, dass Arbeitsauslastungen (Workloads) minimale Unterbrechungen aufweisen.
- Flexibilität. Mit dem automatischen Betriebssystemupgrade können Sie Ihre Strategie für automatisches Betriebssystemupgrade konfigurieren, einschließlich prozentualer Upgradekoordination und Rollbackunterstützung. Dies bedeutet, dass Sie Ihre Upgradestrategie anpassen können, um Ihre spezifischen Leistungs- und Verfügbarkeitsanforderungen zu erfüllen.
- Kontrolle. Das automatische Betriebssystemupgrade bietet Ihnen die Kontrolle über Ihre Upgradestrategie des Betriebssystems, um sichere, workloadfähige Upgradebereitstellungen sicherzustellen. Sie können Ihre Richtlinienkonfigurationen so anpassen, dass sie den spezifischen Anforderungen Ihrer Organisation entsprechen.
Zusammenfassend hilft die Verwendung des Automatischen Betriebssystemupgrades dabei, die Sicherheit zu verbessern, Verfügbarkeitsunterbrechungen zu minimieren und sowohl mehr Kontrolle als auch Flexibilität für Ihre Workloads bereitzustellen.
Wie funktioniert das automatische Betriebssystemupgrade?
Beim Aktualisieren von Images folgen VMs im Azure Batchpool ungefähr dem gleichen Arbeitsablauf wie VirtualMachineScaleSets. Weitere Informationen zu den detaillierten Schritten für den Auto OS-Upgradeprozess für VirtualMachineScaleSets finden Sie auf der Seite VirtualMachineScaleSet.
Wenn automaticOSUpgradePolicy.osRollingUpgradeDeferral jedoch auf „wahr“ festgelegt ist und ein Upgrade verfügbar wird, während ein Batchknoten aktiv Aufgaben ausführt, wird das Upgrade verzögert, bis alle Aufgaben auf dem Knoten abgeschlossen wurden.
Hinweis
Wenn ein Pool osRollingUpgradeDeferral aktiviert hat, werden seine Knoten während des Upgradevorgangs als Upgradingos-Status angezeigt. Bitte beachten Sie, dass der Upgradingos-Status nur angezeigt wird, wenn Sie die API-Version von 2024-02-01 oder höher verwenden. Wenn Sie eine alte API-Version verwenden, um GetTVM/ListTVM aufzurufen, befindet sich der Knoten beim Upgrade in einem Neustartstatus.
Unterstützte Betriebssystemimages
Für das automatische Upgrade werden derzeit nur bestimmte Betriebssystemplattformimages unterstützt. Eine detaillierte Liste der Bilder finden Sie auf der Seite VirtualMachineScaleSet.
Anforderungen
- Die Versionseigenschaft des Bilds muss auf neueste festgelegt werden.
- Verwenden Sie für die Batchverwaltungs-API die API-Version 2024-02-01 oder höher. Verwenden Sie für die Batchdienst-API die API-Version 2024-02-01.19.0 oder höher.
- Stellen Sie sicher, dass die im Pool angegebenen externen Ressourcen verfügbar und aktualisiert sind. Zu den Beispielen zählen SAS-URI für die Bootstrap-Nutzlast in VM-Erweiterungseigenschaften, Nutzlast im Speicherkonto, Verweis auf Geheimnisse im Modell und Sonstiges.
- Wenn Sie die Eigenschaft virtualMachineConfiguration.windowsConfiguration.enableAutomaticUpdates verwenden, muss diese Eigenschaft in der Pooldefinition auf „falsch“ festgelegt werden. Die Eigenschaft enableAutomaticUpdates ermöglicht Patching auf einem virtuellen Computer, bei denen „Windows Update“ Betriebssystempatches anwendet, ohne den Betriebssystemdatenträger zu ersetzen. Bei aktivierten automatischen Betriebssystem-Image-Upgrades ist ein zusätzlicher Patchingprozess über Windows Update nicht erforderlich.
Weitere Anforderungen für benutzerdefinierte Images
- Wenn eine neue Version des Images veröffentlicht und in die Region dieses Pools repliziert wird, werden die virtuellen Computer auf die neueste Version des Azure Compute Gallery-Images aktualisiert. Wenn das neue Image nicht in die Region repliziert wird, in der der Pool eingesetzt wird, werden die VM-Instanzen nicht auf die neueste Version aktualisiert. Die regionale Image-Replikation ermöglicht es Ihnen, das Rollout des neuen Images für Ihre VMs zu kontrollieren.
- Die neue Imageversion sollte nicht von der neuesten Version für dieses Katalogbild ausgeschlossen werden. Imageversionen, die von der neuesten Version des Katalogbilds ausgeschlossen sind, werden nicht über das automatische Betriebssysem-Imageupgrade ausgerollt.
Konfigurieren des Automatischen Betriebssystemupgrades
Wenn Sie Automatische Betriebssystemupgrades in einem Pool implementieren möchten, ist es wichtig, das Feld UpgradePolicy während des Poolerstellungsprozesses zu konfigurieren. Um automatische Betriebssystem-Upgrades zu konfigurieren, stellen Sie sicher, dass die Eigenschaft automaticOSUpgradePolicy.enableAutomaticOSUpgrade in der Pooldefinition auf „wahr“ gesetzt ist.
Hinweis
Der Modus der Upgrade-Richtlinie und die Richtlinie für Automatische Betriebssystemupgrades sind separate Einstellungen und steuern unterschiedliche Aspekte der von Azure Batch bereitgestellten Skalierungsgruppe. Der Upgraderichtlinienmodus bestimmt, was mit vorhandenen Instanzen in der Skalierungsgruppe geschieht. Die Richtlinie für automatische Betriebssystemupgrades enableAutomaticOSUpgrade ist jedoch spezifisch für das Betriebssystemimage und verfolgt die Änderungen, die der Herausgeber des Images vorgenommen hat und bestimmt, was bei einer Aktualisierung des Images geschieht.
REST-API
Im folgenden Beispiel wird das Erstellen eines Pools mit automatischem Betriebssystemupgrade über die REST-API beschrieben:
PUT https://management.azure.com/subscriptions/<subscriptionid>/resourceGroups/<resourcegroupName>/providers/Microsoft.Batch/batchAccounts/<batchaccountname>/pools/<poolname>?api-version=2024-02-01
Anforderungstext
{
"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#)
Das folgende Codeschnipsel zeigt ein Beispiel für die Verwendung der Batch .NET-Clientbibliothek zur Erstellung eines Pools von Automatischen Betriebssystemupgrades über C#-Codes. Weitere Informationen zu Batch .NET finden Sie in der Referenzdokumentation.
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}");
}
Häufig gestellte Fragen
Werden meine Aufgaben unterbrochen, wenn ich das Automatische Betriebssystemupgrade aktiviert habe?
Aufgaben werden nicht unterbrochen, wenn automaticOSUpgradePolicy.osRollingUpgradeDeferral auf „wahr“ festgelegt ist. In diesem Fall wird das Upgrade verschoben, bis der Knoten inaktiv wird. Andernfalls wird ein Upgrade des Knotens ausgeführt, wenn er eine neue Betriebssystemversion empfängt, unabhängig davon, ob er derzeit eine Aufgabe ausführt oder nicht. Daher empfehlen wir dringend, automaticOSUpgradePolicy.osRollingUpgradeDeferral zu aktivieren.
Nächste Schritte
- Erfahren Sie, wie Sie ein verwaltetes Image zum Erstellen eines Pools verwenden.
- Erfahren Sie, wie Sie Azure Compute Gallery zum Erstellen eines Pools verwenden.