Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
可用性区域 有助于保护应用程序和数据免受数据中心故障的影响。 区域是 Azure 区域中的唯一物理位置。 每个区域包括一个或多个配备独立电源、冷却和网络的数据中心。
使用 Azure Kubernetes 服务(AKS)与可用区,将资源在单一区域内的不同可用区之间进行物理分布,从而提高可靠性。 在多个区域中部署节点不会产生额外的费用。 有关 AKS 可靠性功能的详细信息,包括可用性区域、多区域配置、服务维护和备份期间的可靠性,请参阅 AKS 中的可靠性。
本文介绍如何配置 AKS 资源以使用可用性区域。
AKS 资源
此图显示了在创建 AKS 群集时创建的 Azure 资源:
AKS 控制平面
Microsoft 托管 AKS 控制平面、Kubernetes API 服务器以及 scheduler 和 etcd 等服务,将其作为托管服务提供。 Microsoft在多个区域中复制控制平面。
群集的其他资源部署在 Azure 订阅中的托管资源组中。 默认情况下,此资源组的前缀为MC_,代表托管群集,并包含以下部分中提到的资源。
节点池
节点池在 Azure 订阅中作为虚拟机规模集创建。
创建 AKS 群集时,需要一个 系统节点池 ,并且会自动创建。 它托管关键系统 Pod,例如 CoreDNS 和 metrics-server。 可以将更多 用户节点池 添加到 AKS 群集以托管应用程序。
可以通过三种方式部署节点池:
- 区域跨度
- 区域对齐
- 地域
创建群集或节点池时,将配置系统节点池区域。
跨区域
在此配置中,节点分布在所有所选区域。 这些区域是使用 --zones 参数指定的。
# Create an AKS cluster, and create a zone-spanning system node pool in all three AZs, one node in each AZ
az aks create --resource-group example-rg --name example-cluster --node-count 3 --zones 1 2 3
# Add one new zone-spanning user node pool, two nodes in each
az aks nodepool add --resource-group example-rg --cluster-name example-cluster --name userpool-a --node-count 6 --zones 1 2 3
AKS 自动平衡区域之间的节点数。
如果发生区域中断,则受影响区域中的节点可能会受到影响,但其他可用性区域中的节点仍不受影响。
若要验证节点位置,请运行以下命令:
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-34917322-vmss000000 chinanorth3 chinanorth3-1
aks-nodepool1-34917322-vmss000001 chinanorth3 chinanorth3-2
aks-nodepool1-34917322-vmss000002 chinanorth3 chinanorth3-3
区域对齐
在此配置中,每个节点都与特定区域对齐(固定)。 为具有三个可用性区域的区域创建三个节点池:
# # Add three new zone-aligned user node pools, two nodes in each
az aks nodepool add --resource-group example-rg --cluster-name example-cluster --name userpool-x --node-count 2 --zones 1
az aks nodepool add --resource-group example-rg --cluster-name example-cluster --name userpool-y --node-count 2 --zones 2
az aks nodepool add --resource-group example-rg --cluster-name example-cluster --name userpool-z --node-count 2 --zones 3
需要 降低节点之间的延迟时,可以使用此配置。 它还提供对缩放操作更精细的控制,或者在使用 集群自动扩缩程序时提供更精细的控制。
注释
如果单个工作负荷跨节点池部署,我们建议在扩展操作期间将 --balance-similar-node-groups 设置为 true 以保持工作负荷期间区域之间节点的均衡分布。
区域(不使用可用区)
如果未在部署模板中设置区域分配(例如, "zones"=[] 或 "zones"=null) 时使用区域模式。
在此配置中,节点池创建区域(非区域固定)实例,并隐式放置整个区域的实例。 不能保证实例在区域之间均衡或分散,或者实例位于同一可用性区域中。
在极少数情况下,整个区域发生故障时,节点池中的任意或全部实例都可能受到影响。
若要验证节点位置,请运行以下命令:
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-34917322-vmss000000 chinanorth3 0
aks-nodepool1-34917322-vmss000001 chinanorth3 0
aks-nodepool1-34917322-vmss000002 chinanorth3 0
部署
豆荚
Kubernetes 知道 Azure 的可用区,并且可以在不同区中的节点之间平衡 Pod。 如果某个区域不可用,Kubernetes 会自动将 Pod 移离受影响的节点。
如 Kubernetes 参考 Well-Known 标签、批注和污点中所述,Kubernetes 使用 topology.kubernetes.io/zone 标签,自动在复制控制器或服务中的 Pod 分布到各个可用的区域。
若要查看哪些 Pod 和节点正在运行,请运行以下命令:
kubectl describe pod | grep -e "^Name:" -e "^Node:"
该 maxSkew 参数描述 Pod 分布不均匀的程度。 假设有三个区域和三个副本,设置此值以确保 1 每个区域至少有一个 Pod 正在运行:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-deployment
spec:
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
topologySpreadConstraints:
- maxSkew: 1
topologyKey: topology.kubernetes.io/zone
whenUnsatisfiable: DoNotSchedule
labelSelector:
matchLabels:
app: my-app
containers:
- name: my-container
image: my-image
存储和卷
默认情况下,Kubernetes 版本 1.29 及更高版本使用 Azure 托管磁盘,通过持久卷声明使用区域冗余存储。
这些磁盘在区域之间复制,以提高应用程序的复原能力。 此作有助于保护数据免受数据中心故障的影响。
以下示例演示在区域冗余存储中使用 Azure 标准 SSD 的永久性卷声明:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: azure-managed-disk
spec:
accessModes:
- ReadWriteOnce
storageClassName: managed-csi
#storageClassName: managed-csi-premium
resources:
requests:
storage: 5Gi
对于对齐于区域的部署,可以创建一个新的存储类,并将skuname参数设置为LRS(本地冗余存储)。 您可以在 PersistentVolumeClaim 中使用新的存储类。
尽管本地冗余存储磁盘成本较低,但它们不是区域冗余的,不支持将磁盘附加到不同区域中的节点。
以下示例演示本地冗余存储标准 SSD 存储类:
kind: StorageClass
metadata:
name: azuredisk-csi-standard-lrs
provisioner: disk.csi.azure.com
parameters:
skuname: StandardSSD_LRS
#skuname: PremiumV2_LRS
负载均衡器
Kubernetes 默认部署 Azure 标准负载均衡器,用于均衡区域中所有区域的入站流量。 如果某个节点不可用,负载均衡器会将流量重新路由到正常运行的节点。
使用 Azure 负载均衡器的示例服务:
apiVersion: v1
kind: Service
metadata:
name: example
spec:
type: LoadBalancer
selector:
app: myapp
ports:
- port: 80
targetPort: 8080
重要
从 2025 年 9 月 30 日开始,Azure Kubernetes 服务(AKS)不再支持基本负载均衡器。 为了避免任何潜在的服务中断,我们建议使用标准负载均衡器进行新部署 ,并将任何现有部署升级到标准负载均衡器。 有关此停用的详细信息,请参阅 停用 GitHub 问题和Azure 更新停用公告。 若要随时了解公告和更新,请关注AKS 发行说明。
局限性
使用可用性区域时,以下限制适用:
- 请参阅 AKS 中的配额、虚拟机大小限制和区域可用性。
- 创建节点池后,所使用的可用区数量无法更改。
- 大多数区域支持可用性区域。 请参阅区域列表。
相关内容
- 了解 AKS 中的可靠性。
- 了解 系统节点池。
- 了解 用户节点池。
- 了解 负载均衡器。
- 获取 AKS 中业务连续性和灾难恢复的最佳做法。