Freigeben über


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