更新 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
,因此请求将完全替换所有现有属性。 因此,请求中未指定的任何属性都将被删除或设置为关联的默认值。
以下示例演示如何通过管理平面 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 映像大小和目标节点通信模式,以便通过 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 不会禁止将集合与活动节点发生突变,但我们建议避免这样做,因为这样会导致标识集合中出现不一致的情况(如果池横向扩展)。建议仅在池大小为零时更新此属性。 有关详细信息,请参阅“配置托管标识”一文。
- 详细了解可用的 Batch API 和工具。
- 了解如何检查池和节点是否存在错误。