更新 Batch 池属性

创建 Azure Batch 池时,会指定定义池配置的某些属性。 示例包括指定 VM 大小、要使用的 VM 映像、虚拟网络配置和加密设置。 但是,可能需要更新池属性,因为工作负荷会随着时间推移而发展,或者 VM 映像达到生命周期结束。

可以修补或更新这些池属性的一些(但并非全部)以适应这些情况。 本文提供有关可更新的池属性、池属性更新的预期行为以及示例的信息。

提示

某些池属性只能使用 Entra 身份验证使用 Batch 管理平面 API 或 SDK 进行更新。 需要安装或使用适当的 API 或 SDK 才能使用这些操作。

可更新的池属性

Batch 提供了多个方法来更新池中的属性。 选择要使用的 API 以确定可更新的池属性集以及更新行为。

备注

如果要更新不属于以下更新或修补程序 API 的池属性,则必须重新创建池以反映所需状态。

管理平面:池 - 更新

更新池属性的建议路径是使用池 - 更新 API 作为 Batch 管理平面 API 或 SDK 的一部分。 此 API 提供更新池属性的最全面且最灵活的方法。 使用此 API 仅允许选择管理平面更新池属性,并且能够更新其他通过数据平面 API 不可变的属性。

重要

必须使用 API 版本 2024-07-01 或更高版本的 Batch 管理平面 API 来更新池属性,如本节中所述。

由于此操作是一个 PATCH,因此仅会更新请求中指定的池属性。 如果未将属性指定为请求的一部分,则现有值将保持不变。

仅当池中没有活动节点或池中计算节点总数为零时,才能更新某些属性。 不要求池大小为零才能使新值生效的属性为:

  • applicationPackages
  • certificates
  • metadata
  • scaleSettings
  • startTask

如果池使用这些属性进行更新时存在活动节点,则可能需要重新启动活动计算节点才能生效。 有关详细信息,请参阅每个单独池属性的文档。

所有其他可更新的池属性要求池的大小为零节点,会作为更新请求的一部分接受。

还可以使用池 - 创建 API 更新这些选择属性,但由于操作是 PUT,因此请求将完全替换所有现有属性。 因此,请求中未指定的任何属性都将被删除或设置为关联的默认值。

示例:更新 VM 映像规范

以下示例演示如何通过管理平面 C# SDK 更新池 VM 映像配置:

public async Task UpdatePoolVmImage()
{
     // 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 = "<resourcegroup>";
     string accountName = "<batchaccount>";
     ResourceIdentifier batchAccountResourceId = BatchAccountResource.CreateResourceIdentifier(subscriptionId, resourceGroupName, accountName);
     BatchAccountResource batchAccount = client.GetBatchAccountResource(batchAccountResourceId);

     // get the collection of this BatchAccountPoolResource
     BatchAccountPoolCollection collection = batchAccount.GetBatchAccountPools();

     // Update the pool
     string poolName = "mypool";
     BatchAccountPoolData data = new BatchAccountPoolData()
     {
         DeploymentConfiguration = new BatchDeploymentConfiguration()
         {
             VmConfiguration = new BatchVmConfiguration(new BatchImageReference()
             {
                 Publisher = "MicrosoftWindowsServer",
                 Offer = "WindowsServer",
                 Sku = "2022-datacenter-azure-edition-smalldisk",
                 Version = "latest",
             },
             nodeAgentSkuId: "batch.node.windows amd64"),
         },
     };

     ArmOperation<BatchAccountPoolResource> lro = await collection.CreateOrUpdateAsync(WaitUntil.Completed, poolName, data);
     BatchAccountPoolResource result = lro.Value;

     BatchAccountPoolData resourceData = result.Data;
     Console.WriteLine($"Succeeded on id: {resourceData.Id}");
}

示例:更新 VM 大小和目标节点通信模式

以下示例演示如何更新池 VM 映像大小和目标节点通信模式,以便通过 REST API 进行简化:

PATCH https://management.chinacloudapi.cn/subscriptions/<subscriptionid>/resourceGroups/<resourcegroupName>/providers/Microsoft.Batch/batchAccounts/<batchaccountname>/pools/<poolname>?api-version=2024-07-01

请求正文

{
    "type": "Microsoft.Batch/batchAccounts/pools",
    "parameters": {
        "properties": {
            "vmSize": "standard_d32ads_v5",
            "targetNodeCommunicationMode": "simplified"
        }
    }
}

数据平面:池 - 修补或更新属性

数据平面提供修补或更新选择池属性的功能。 可用的 API 是池 - 修补 API池 - 更新属性 API 作为 Batch 处理数据平面 API 或 SDK 的一部分。

修补程序 API 允许修补文档中指定的选择池属性,例如 startTask。 由于此操作是一个 PATCH,因此仅会更新请求中指定的池属性。 如果未将属性指定为请求的一部分,则现有值将保持不变。

更新属性 API 允许选择文档中指定的池属性更新。 此请求会完全替换现有属性,因此删除请求中未指定的任何属性。

必须重新启动计算节点,才能对以下属性进行更改才能生效:

  • applicationPackageReferences
  • certificateReferences
  • startTask

必须将池大小调整为零个活动节点,才能更新属性 targetNodeCommunicationMode

常见问题

  • 当池具有活动节点时,是否需要在更新池属性后执行任何其他操作?

是的,对于可以使用活动节点更新的池属性,有一些需要重新启动计算节点的属性。 或者,池可以缩减到零个节点,以反映修改的属性。

  • 当池具有活动节点时,是否可以修改池上的托管标识集合?

是的,但不应该这样做。 虽然 Batch 不会禁止将集合与活动节点发生突变,但我们建议避免这样做,因为这样会导致标识集合中出现不一致的情况(如果池横向扩展)。建议仅在池大小为零时更新此属性。 有关详细信息,请参阅“配置托管标识”一文。

后续步骤