Azure Kubernetes 服务 (AKS) 中的可用性区域概述
本文概述了在 Azure Kubernetes 服务 (AKS) 中使用可用性区域来提高应用程序的可用性。
AKS 群集跨底层 Azure 基础结构的逻辑部分分配节点和存储等资源。 使用可用性区域以物理方式将节点与部署到不同可用性区域的其他节点分开。 使用在群集中配置的多个可用性区域部署的 AKS 群集可提供更高级别的可用性,以防止出现硬件失败或计划内维护事件。
什么是可用性区域?
当数据中心发生故障时,可用性区域可以帮助你保护应用程序和数据。 这些区域是 Azure 地区中独特的物理位置。 每个区域包含一个或多个配备了独立电源、冷却设备和网络的数据中心。 为了确保复原能力,所有已启用区域的大区域中应始终有多个区域。 数据中心发生故障时,区域中的可用性区域的物理隔离可保护应用程序和数据。
使用可用性区域部署的 AKS 群集可以在单个地区内的多个区域之间分发节点。 例如,“中国北部 3”区域中的群集可以在“中国北部 3”的所有三个可用性区域中创建节点。 这种 AKS 群集资源的分布可提高群集的可用性,因为它们可以在特定区域发生故障时进行恢复。
如果单个区域不可用,你的应用程序将继续在配置为分布在多个区域的群集上运行。
有关详细信息,请参阅使用 Azure 可用性区域。
注意
使用群集自动缩放程序实现可用性区域时,建议为每个区域使用一个节点池。 可以将 --balance-similar-node-groups
参数设置为 true
,在纵向扩展操作期间为工作负载保持区域间的节点均衡分布。 如果不这样做,纵向缩减操作可能会破坏区域间的节点平衡。 此配置不保证类似的节点组将具有相同数量的节点:
- 目前,均衡仅在纵向扩展操作期间发生。 无论节点组的相对大小如何,群集自动缩放程序都会纵向缩减未充分利用的节点。
- 群集自动缩放程序仅添加运行所有现有 pod 所需数量的节点。 如果某些组安排了更多的 Pod,则这些组的节点数可能比其他组要多。
- 群集自动缩放程序仅在可支持同一组待定 Pod 的节点组之间进行平衡。
你还可以使用 Azure 区域冗余存储 (ZRS) 在所选区域中的三个可用性区域之间复制你的存储。 ZRS 磁盘可让你在发生可用性区域故障后进行恢复,且不会丢失数据。 有关详细信息,请参阅托管磁盘的 ZRS。
限制
使用可用性区域创建 AKS 群集时,以下限制适用:
- 只能在创建群集或节点池期间定义可用性区域。
- 创建群集后,无法将现有非可用性区域群集更新为使用可用性区域。
- 选定的“所选节点大小 (VM SKU)”必须在所选的所有可用性区域中可用。
- 启用了可用性区域的群集要求使用 Azure 标准负载均衡器进行跨区域分发。 只能在群集创建时定义此负载均衡器类型。 有关标准负载均衡器的详细信息和限制,请参阅 Azure 负载均衡器标准 SKU 限制。
Azure 磁盘可用性区域支持
使用 Azure 托管 LRS 磁盘的卷不是区域冗余资源,并且不支持跨区域附加。 需要在托管目标 Pod 的指定节点所在的同一区域中共定位卷。 使用 Azure 托管 ZRS 磁盘的卷是区域冗余资源。 可以在所有区域和非区域代理节点上计划这些卷。 以下示例演示了如何使用 StandardSSD_ZRS 磁盘创建存储类:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: managed-csi-zrs
provisioner: disk.csi.azure.com
parameters:
skuName: StandardSSD_ZRS # or Premium_ZRS
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
Kubernetes 版本 1.12 及更高版本可以识别 Azure 可用性区域。 可以在多区域 AKS 群集中部署引用 Azure 托管磁盘的 PersistentVolumeClaim 对象,Kubernetes 会负责计划在正确的可用性区域中声明此 PVC 的所有 Pod。
从 Kubernetes 版本 1.29 开始,跨多个可用性区域部署 Azure Kubernetes 服务 (AKS) 群集时,AKS 现在利用区域冗余存储 (ZRS) 在内置存储类中创建托管磁盘。 ZRS 确保在所选区域中的多个 Azure 可用性区域之间同步复制 Azure 托管磁盘。 此冗余策略可增强应用程序的复原能力,并保护数据免受数据中心故障的影响。
但是,请务必注意,与本地冗余存储 (LRS) 相比,区域冗余存储 (ZRS) 的成本更高。 如果优先考虑成本优化,则可以将 skuname
参数设置为 LRS,创建新的存储类。 然后,可以在永久性卷声明 (PVC) 中使用这个新存储类。