共用方式為


建立具有自動操作系統 (OS) 升級的 Azure Batch 集區

當您建立 Azure Batch 集區時,您可以使用已啟用自動 OS 升級的節點來佈建集區。 本文說明如何使用自動OS升級來設定 Batch 集區。

為什麼要使用自動OS升級?

自動OS升級可用來在 Azure Batch 集區內實作自動作業系統升級策略和控制。 以下是使用自動OS升級的一些原因:

  • 安全性。 自動OS升級可確保在作業系統映像內及時修補弱點和安全性問題,以增強計算資源的安全性。 它有助於防止潛在的安全性弱點對應用程式和數據構成威脅。
  • 將可用性中斷降到最低。 自動OS升級可用來將OS升級期間計算節點的可用性中斷降到最低。 其可透過工作排程感知升級延遲和支援滾動升級來達成,以確保工作負載會經歷最少的中斷。
  • 彈性。 自動OS升級可讓您設定自動作業系統升級策略,包括以百分比為基礎的升級協調和復原支援。 這表示您可以自定義升級策略,以符合您的特定效能和可用性需求。
  • 管控。 自動OS升級可讓您控制作業系統升級策略,以確保安全的工作負載感知升級部署。 您可以量身打造原則設定,以符合組織的特定需求。

總而言之,使用自動OS升級有助於改善安全性、將可用性中斷降到最低,併為工作負載提供更大的控制和彈性。

自動OS升級如何運作?

升級映射時,Azure Batch 集區中的 VM 會遵循與 VirtualMachineScaleSets 大致相同的工作流程。 若要深入瞭解 VirtualMachineScaleSets 自動 OS 升級程式所涉及的詳細步驟,請參閱 VirtualMachineScaleSet 頁面

不過,如果 automaticOSUpgradePolicy.osRollingUpgradeDeferral 設定為 'true',而且當批次節點正在執行工作時,升級將會延遲,直到節點上完成所有工作為止。

注意

如果集區已啟用 osRollingUpgradeDeferral,其節點將會在 升級程式期間顯示為 upgradeos 狀態。 請注意, 只有在您使用 2024-02-01 或更新版本的 API 版本時,才會顯示升級狀態 。 如果您使用舊的 API 版本來呼叫 GetTVM/ListTVM,升級時節點會處於 重新啟動 狀態。

支援的作業系統映像

目前僅支援特定OS平臺映像進行自動升級。 如需詳細的影像清單,您可以從 VirtualMachineScaleSet 頁面取得

需求

  • 映像版本屬性必須設為最新。
  • 針對 Batch 管理 API,請使用 API 版本 2024-02-01 或更高版本。 針對 Batch 服務 API,請使用 API 2024-02-01.19.0 版或更高版本。
  • 請確定集區中指定的外部資源可供使用並更新。 範例包括在 VM 擴充功能屬性中用於啟動承載的 SAS URI、儲存體帳戶中的承載,以及模型中祕密的參照等等。
  • 如果您使用 virtualMachineConfiguration.windowsConfiguration.enableAutomaticUpdates 屬性,此屬性必須在集區定義中設定為 'false'。 [enableAutomaticUpdates] 屬性啟用 VM 內修補,而「Windows 更新」套用至作業系統修補,無須取代 OS 磁碟。 啟用自動OS映像升級後,不需要透過Windows Update進行額外的修補程式。

自訂映像的其他需求

  • 發行並復寫至該集區的新版本映射時,VM 將會升級至最新版的 Azure 計算資源庫映射。 如果未將新映射複寫至部署集區的區域,VM 實例將不會升級至最新版本。 區域映像複寫可讓您控制 VM 的新映像推出。
  • 不應該從該資源庫映像的最新版本排除新的映像版本。 從資源庫映像中排除的映像版本將不會透過自動OS映射升級推出。

設定自動OS升級

如果您想要在集區內實作自動OS升級,請務必在集區建立程式期間設定 UpgradePolicy 字段。 若要設定自動OS映射升級,請確定 集區定義中的 automaticOSUpgradePolicy.enableAutomaticOSUpgrade 屬性設定為 'true'。

注意

升級原則模式自動OS升級原則 是個別的設定,並控制 Azure Batch 所布建擴展集的不同層面。 升級原則模式會決定擴展集中現有實例會發生什麼情況。 不過,自動OS升級原則 enableAutomaticOSUpgrade 專屬於OS映射,並追蹤映像發行者所做的變更,並判斷當映像有更新時會發生什麼事。

重要

如果您使用 使用者訂用帳戶,請務必注意訂用帳戶功能 Microsoft.Compute/RollingUpgradeDeferral 需要註冊您的訂用帳戶。 除非已註冊這項功能,否則您無法使用 osRollingUpgradeDeferral 。 若要啟用此功能,請在 您的訂用帳戶上手動註冊 此功能。

REST API

下列範例說明如何透過 REST API 建立具有自動 OS 升級的集區:

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

下列代碼段示範如何使用 Batch .NET 用戶端連結庫,透過 C# 程式代碼建立自動 OS 升級集區。 如需 Batch .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}");
}

常見問題集

  • 如果我啟用自動OS升級,我的工作是否會中斷?

    當 automaticOSUpgradePolicy.osRollingUpgradeDeferral 設定為 'true' 時,工作將不會中斷。 在此情況下,升級將會延後,直到節點閑置為止。 否則,不論節點目前是否正在執行工作,都會在收到新的OS版本時升級。 因此,我們強烈建議啟用 automaticOSUpgradePolicy.osRollingUpgradeDeferral

下一步

  • 瞭解如何使用 受控映像 來建立集區。
  • 瞭解如何使用 Azure 計算資源 來建立集區。