创建 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,因此仅会更新请求中指定的池属性。
如果未将属性指定为请求的一部分,则现有值将保持不变。
仅当池中没有活动节点或池中计算节点总数为零时,才能更新某些属性。 不要求池大小为零才能使新值生效的属性为:
- 应用程序包
- 证书
- 元数据
- scaleSettings
- startTask
如果池使用这些属性进行更新时存在活动节点,则可能需要重新启动活动计算节点才能生效。 有关详细信息,请参阅每个单独池属性的文档。
所有其他可更新的池属性,只有在池大小为零个节点时,才会作为更新请求的一部分被接受。
例如,对 vmSize、deploymentConfiguration、diskEncryptionConfiguration 或 securityProfile 的更改要求池处于 稳定 分配状态,且专用节点数和 Spot 或低优先级节点数均为零。 更新后调整池大小时,Batch 会利用更新后的配置创建一个新的底层计算部署。
还可以使用池 - 创建 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 大小和目标节点通信模式
以下示例演示如何通过 REST API 更新池 VM 映像大小,并将目标节点通信模式设置为简化:
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"
}
}
}
示例:从 Azure 磁盘加密 迁移到 Encryption at Host
Azure 磁盘加密 for Batch pools 将于 2028 年 9 月 15 日退役。
如果一个池可以使用 Azure 磁盘加密 进行临时磁盘加密,请将池的节点数调整为零,等待其分配状态变为 Steady。 然后使用 API 版本 2024-07-01 或更高版本选择支持的虚拟机大小(如有需要),并将 securityProfile.encryptionAtHost 设置为 true。
更新后,将池大小调整为所需的目标节点数。 Batch 创建了一个新的底层计算部署,并启用了主机加密功能。 完整的迁移过程和请求示例,请参见“ 将现有池迁移到主机加密”。
数据平面:池 - 修补或更新属性
数据平面提供修补或更新选定的池属性的功能。 可用的 API 是 池 - 更新属性 API 作为 Batch 数据平面 API 或 SDK 的一部分。
更新属性 API 允许对文档中指定的池属性进行选择性更新。 此请求会完全替换现有属性,因此删除请求中未指定的任何属性。
必须重新启动计算节点,以下属性的更改才能生效:
- applicationPackageReferences
- 证书引用
- startTask
必须将池大小调整为零个活动节点,才能更新 targetNodeCommunicationMode 属性。
常见问题
- 当池具有活动节点时,是否需要在更新池属性后执行任何其他操作?
是的,对于可以使用正在运行的节点更新的池属性,有一些属性需要重新启动计算节点。 或者,池可以缩减到零个节点,以反映修改的属性。
- 当池具有活动节点时,是否可以修改池上的托管标识集合?
是的,但不应该这样做。 虽然 Batch 不会禁止对包含活动节点的集合进行更改,但我们建议避免这样做,因为如果池横向扩展,这会导致标识集合中出现不一致的情况。建议仅在池大小为零时更新此属性。 有关详细信息,请参阅“配置托管标识”一文。
后续步骤
- 详细了解可用的 Batch API 和工具。
- 了解如何检查池和节点是否存在错误。