Azure Kubernetes Service 中的可用性區域 (AKS)
可用性區域 可協助保護您的應用程式和數據免於資料中心失敗。 區域是在 Azure 區域內獨特的實體位置。 每個區域皆包含一或多個配備獨立電力、冷卻系統及網路的資料中心。
搭配可用性區域使用 AKS 可實際將資源分散到單一區域內的不同可用性區域,以改善可靠性。 在多個區域中部署節點不會產生額外的成本。
本文說明如何設定 AKS 資源以使用 可用性區域。
AKS 資源
下圖顯示當您建立 AKS 叢集時所建立的 Azure 資源:
AKS 控制平面
Microsoft裝載 AKS 控制平面、Kubernetes API 伺服器和服務,例如 scheduler
和 etcd
作為受控服務。 Microsoft複寫多個區域中的控制平面。
叢集的其他資源會部署在 Azure 訂用帳戶中的受控資源群組中。 根據預設,此資源群組前面會加上 受控叢集的 MC_,並包含下列資源:
節點集區
節點集區會建立為 Azure 訂用帳戶中的虛擬機擴展集。
當您建立 AKS 叢集時,需要一個 系統節點集 區,並自動建立。 它會載入重要的系統 Pod,例如 CoreDNS
與 metrics-server
。 您可以將更多 使用者節點集 區新增至 AKS 叢集,以裝載您的應用程式。
有三種方式可以部署節點集區:
- 區域跨越
- 區域對齊
- Regional
針對系統節點集區,建立叢集時會設定所使用的區域數目。
區域跨越
跨越擴展集的區域會透過使用 --zones
參數指定這些區域,將節點分散到所有選取的區域。
# Create an AKS Cluster, and create a zone spanning System Nodepool 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 Nodepool, 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 會自動平衡區域之間的節點數目。
如果發生區域性中斷,受影響區域內的節點可能會受到影響,而其他可用性區域中的節點則不會受到影響。
區域對齊
每個節點都會對齊特定區域(釘選)。 若要為具有三個 可用性區域 的區域建立三個節點集區:
# # Add three new zone aligned User Nodepools, 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"=[] or "zones"=null
在此組態中,節點集區會建立區域(非區域固定)實例,並隱含地將實例置於整個區域。 不保證平衡或分散於區域,或該實例落在相同的可用性區域中。
在罕見的情況下,完全區域性中斷,節點集區中的任何或所有實例都可能會受到影響。
若要驗證節點位置,請執行下列命令:
kubectl describe nodes | grep -e "Name:" -e "topology.kubernetes.io/zone"
NAME REGION ZONE
aks-nodepool1-34917322-vmss000000 eastus eastus-1
aks-nodepool1-34917322-vmss000001 eastus eastus-2
aks-nodepool1-34917322-vmss000002 eastus eastus-3
部署
Pod
Kubernetes 知道 Azure 可用性區域,而且可以在不同區域中的節點之間平衡 Pod。 如果區域變成無法使用,Kubernetes 會自動將 Pod 從受影響的節點移開。
如已知的標籤、註釋和污點 (英文) 一文中所述,Kubernetes 會使用 topology.kubernetes.io/zone
標籤自動將 Pod 散發至不同可用區域中的複寫控制器或服務。
若要檢視執行中的 Pod 節點,請執行下列命令:
kubectl describe pod | grep -e "^Name:" -e "^Node:"
'maxSkew' 參數描述 Pod 可能分佈不平均的程度。 假設有三個區域和三個複本,將此值設定為1可確保每個區域至少有一個Pod正在執行:
kind: Pod
apiVersion: v1
metadata:
name: myapp
spec:
replicas: 3
topologySpreadConstraints:
- maxSkew: 1
topologyKey: "topology.kubernetes.io/zone"
whenUnsatisfiable: DoNotSchedule # or ScheduleAnyway
containers:
- name: pause
image: registry.k8s.io/pause:3.1
記憶體和磁碟區
根據預設,Kubernetes 1.29 版和更新版本會使用 Azure 受控磁碟 使用區域備援記憶體 (ZRS) 進行永續性磁碟區宣告。
這些磁碟會在區域之間復寫,以增強應用程式的復原能力,並保護您的數據免於數據中心失敗。
在 ZRS 中使用標準 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(本地備援記憶體)。
接著,便可以在持續性磁碟區宣告 (PVC) 中使用新的儲存類別。
雖然 LRS 磁碟成本較低,但不支援區域備援,而且不支援將磁碟連結至不同區域中的節點。
LRS 標準 SSD 儲存類別的範例:
kind: StorageClass
metadata:
name: azuredisk-csi-standard-lrs
provisioner: disk.csi.azure.com
parameters:
skuname: StandardSSD_LRS
#skuname: PremiumV2_LRS
負載平衡器
Kubernetes 預設會部署 Azure Standard Load Balancer,以平衡區域中所有區域的輸入流量。 如果節點變成無法使用,負載平衡器會將流量重新路由傳送至狀況良好的節點。
使用 Azure Load Balancer 的範例服務:
apiVersion: v1
kind: Service
metadata:
name: example
spec:
type: LoadBalancer
selector:
app: myapp
ports:
- port: 80
targetPort: 8080
重要
Basic Load Balancer 將於 2025 年 9 月 30 日淘汰。 如需詳細資訊,請參閱官方公告。 如果您目前使用基本Load Balancer,請務必 在淘汰日期之前升級 至 Standard Load Balancer。
限制
使用 可用性區域 時適用下列限制:
下一步
- 了解 系統節點集區
- 瞭解 用戶節點集區
- 瞭解 Load Balancer
- AKS 中商務持續性和災害復原的最佳做法