Azure Kubernetes 服务 (AKS) 中的自动区域部署会为节点池动态选择最佳的一组可用区。 无需为每个区域和 VM SKU 组合手动指定区域。 使用 --zones auto 创建或更新节点池时,AKS 会将虚拟机(VM)部署到目标区域中对所请求 SKU 有可用容量的可用性区域,并对每个区域应用 50% 的最大实例占比限制。
本文介绍如何创建或更新使用自动区域放置的 AKS 节点池。
自动区域放置的工作原理
指定 --zones auto(或者在代理池配置文件中指定 availabilityZones: ["auto"])时,AKS 会使用 Azure Compute 自动区域放置策略来选择区域并分布节点。 无需指定区域编号或为每个区域和 VM SKU 维护不同的区域配置。
自动区域放置的工作原理如下:
- AKS 评估目标区域中哪些可用性区域可以支持请求的 VM SKU。
- AKS 最初根据自动区域放置策略选择最多三个可用区域并放置节点。 默认情况下,任何单个区域中的节点数都不能超过节点池的 50%。
- 在以后的横向扩展操作期间,AKS 会重新评估区域可用性。 如果Azure将区域添加到该区域或使 VM SKU 在另一个区域中可用,则 AKS 可能会在放置策略和可用容量允许该区域中放置新节点。 无需更新节点池配置。
Important
50 个% 限制是每个区域的最大浓度,不保证节点始终均匀分布。 实际分发取决于节点计数、支持所选 VM SKU 的区域,以及预配节点时可用的容量。 如果Azure在遵守每个区域限制的同时无法分配请求的节点,则创建或缩放操作仍会失败。
此方法解决了手动指定区域的常见难题:
- 区域不可知的部署:跨区域使用一致的配置,而不必担心区域可用性差异。
- 改进了复原能力:自动实现多区域冗余,以获得更好的应用程序可用性。
- 自动区域扩展:在区域扩展时无缝利用新的可用性区域(例如,从 3 个区域扩展到 4 个区域)。
- 减少部署失败:根据区域均衡的工作负荷容忍度减少特定区域中容量约束导致的创建和缩放分配失败。
限制和注意事项
- 自动区域放置支持创建和更新基于虚拟机规模集和基于虚拟机的节点池。
- 每个区域的默认上限为节点数的 50%。
- 自动区域放置适用于 跨区域的工作负载。 对于 区域对齐 的工作负载(其中每个节点池都固定在单个区域中),请继续通过使用
--zones 1、--zones 2等来显式指定区域。
先决条件
Important
AKS 预览功能可在自助服务和自愿选择的基础上启用。 预览版按“现状”和“视供应情况”提供,它们不包括在服务级别协议和有限保证范围内。 AKS 预览功能是由客户支持尽最大努力部分覆盖。 因此,这些功能并不适合用于生产。 有关详细信息,请参阅以下支持文章:
AKS API 版本
2026-01-02-preview或更高版本。aks-preview Azure CLI 扩展的最新版本。
支持可用性区域的区域。 有关详细信息,请参阅 Azure 区域列表。
在您的订阅中注册的
VmssAutomaticZonePlacement功能标志。 使用az feature register命令注册功能标志:az feature register \ --namespace Microsoft.Compute \ --name VmssAutomaticZonePlacement使用
az feature show以下命令检查注册状态:az feature show \ --namespace Microsoft.Compute \ --name VmssAutomaticZonePlacement \ --query properties.state \ --output tsv等到命令返回
Registered,然后继续。
创建具有自动区域放置的 AKS 群集(预览版)
使用 命令并结合 az aks create,创建一个新的 AKS 群集,该群集使用基于 虚拟机规模集 或 --zones auto 的系统节点池,并启用自动可用区放置:
az aks create \
--resource-group example-rg \
--name example-cluster \
--node-vm-size Standard_D8s_v5 \
--node-count 10 \
--zones auto
AKS 会在目标区域中选择有可用于 Standard_D8s_v5 的容量的可用区,并将这 10 个节点分散到这些可用区中,且任何单个可用区中的节点数都不超过 50%。
添加具有自动区域放置的节点池(预览版)
使用 命令并配合 az aks nodepool add,将新的基于虚拟机规模集的节点池或 --zones auto 节点池添加到现有群集中:
az aks nodepool add \
--resource-group example-rg \
--cluster-name example-cluster \
--name userpoolauto \
--node-vm-size Standard_D8s_v5 \
--node-count 6 \
--zones auto
更新现有节点池以使用自动区域放置(预览版)
使用 命令并结合 az aks nodepool update,更新现有的基于虚拟机规模集或 --zones auto 的节点池,使其使用自动区域放置:
az aks nodepool update \
--resource-group example-rg \
--cluster-name example-cluster \
--name nodepool1 \
--zones auto
AKS 通过滚动操作更新现有节点池:
- AKS 添加使用自动区域放置的激增节点。
- AKS 封锁并清空现有节点。
- AKS 在工作负荷移动到激增节点后删除现有节点。
此操作会遵循您在节点池上配置的以下升级设置:
-
最大激增(
--max-surge):控制更新期间 AKS 添加的额外节点数。 较高的值可以更快地完成更新,但需要更多的计算配额和子网 IP 容量。 -
节点排空超时(
--drain-timeout):控制在节点排空操作失败前,AKS 等待驱逐节点上 Pod 的时长。 -
节点浸泡持续时间(
--node-soak-duration):控制 AKS 在新节点准备就绪后等待多长时间,然后再继续下一批。
在开始更新之前,请确保有足够的计算配额和子网 IP 容量来容纳激增节点,并且 Pod 中断预算允许节点耗尽。
验证区域位置
创建或更新群集或节点池后,使用 az aks show 命令验证 AKS 选择的区域。
az aks show \
--name example-cluster \
--resource-group example-rg \
--query agentPoolProfiles[].availabilityZones \
--output tsv
还可以用于 kubectl 确认跨区域的节点分布。
kubectl get nodes -o custom-columns='NAME:metadata.name, REGION:metadata.labels.topology\.kubernetes\.io/region, ZONE:metadata.labels.topology\.kubernetes\.io/zone'
示例输出:
NAME REGION ZONE
aks-nodepool1-12345678-vmss000000 chinanorth3 chinanorth3-1
aks-nodepool1-12345678-vmss000001 chinanorth3 chinanorth3-2
aks-nodepool1-12345678-vmss000002 chinanorth3 chinanorth3-3
...