Azure Kubernetes Service 中的自動區域放置 (預覽版)

Azure Kubernetes Service (AKS) 中的自動區域配置會動態選擇節點池中最佳的可用性區域集合。 你不需要為每個區域和虛擬機 SKU 組合手動指定區域。 當你使用 --zones auto 建立或更新節點池時,AKS 會將虛擬機器(VM)部署到目標區域中具有所要求 SKU 容量的可用性區域,並對每個區域套用最多 50% 的執行個體比例。

本文將教你如何建立或更新使用自動區域放置的 AKS 節點池。

自動區域擺放的運作方式

當你指定--zones auto(或availabilityZones: ["auto"]在代理池設定檔中)時,AKS 會使用 Azure Compute 自動放置區域政策來選擇區域並分散節點。 你不需要指定區域號碼,也不需要為每個區域和虛擬機 SKU 維護不同的區域配置。

自動分區配置的運作方式如下:

  1. AKS 評估目標區域內哪些可用區域能支援所請求的虛擬機 SKU。
  2. AKS 最初會根據自動區域放置政策選擇最多三個可用區域並放置節點。 單一區域最多只能包含 50% 的節點池。
  3. 在後續規模化作業中,AKS會重新評估區域可用性。 如果 Azure 在該區域新增一個區域,或讓虛擬機 SKU 在另一個區域可用,當部署政策和可用容量允許時,AKS 可能會在該區域新增節點。 你不需要更新節點池的設定。

Important

50% 限制是每個區域的最大濃度,並不保證節點分布均勻。 實際分布取決於節點數量、支援所選虛擬機 SKU 的區域,以及節點配置時可用的容量。 如果 Azure 無法在遵守每個區域限制的情況下分配所需節點,建立或擴展操作仍可能失敗。

此方法透過手動指定區域來解決常見痛點:

  • 區域無關部署:跨區域使用一致配置,無需擔心區域可用性差異。
  • 提升韌性:自動實現多區域冗餘,提升應用程式可用性。
  • 自動區域擴展:當區域擴展時,無縫利用新的可用區域(例如從三個區域擴展到四個區域)。
  • 減少部署失敗:根據你對區域平衡的工作負載容忍度,減少因特定區域容量限制而導致的建立與擴展分配失敗。

限制與考量

  • 自動區域配置僅支援支援可用區域的區域。 欲了解更多資訊,請參閱 Azure 區域列表。
  • 自動區域放置支援建立及更新以 虛擬機器擴展集 和 虛擬機器 為基礎的節點集區。
  • 每個區域的上限為節點數的 50%。 如果 Azure 無法在遵守每個區域限制的情況下分配所需節點,建立或擴展操作仍可能失敗。
  • 自動區域配置設計用於跨 區域 工作負載。 對於採用區域對齊的工作負載(其中每個節點集區都固定在單一區域),請繼續使用 --zones 1、--zones 2 等來明確指定區域。

先決條件

Important

AKS 預覽功能以自助方式提供,並採選擇加入制。 預覽版本係依「現狀」及「可用情況」提供,且不適用於服務等級協定與有限保固。 客戶支援部門會盡最大努力,部分支援 AKS 預覽。 因此,這些功能不適合實際執行用途。 如需詳細資訊,請參閱下列支援文章:

安裝 aks-preview CLI 擴充功能

請使用 az extension add 指令安裝 aks-preview CLI 擴充功能。

az extension add --name aks-preview

使用 az extension update 指令更新擴充功能,以確保已安裝最新版本。

az extension update --name aks-preview

註冊 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命令搭配--zones auto,透過以虛擬機器擴展集為基礎或以虛擬機器為基礎且使用自動區域放置的系統節點集區建立新的 AKS 叢集:

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 透過滾動操作更新現有節點池:

  1. AKS 新增使用自動區域放置的突波節點。
  2. AKS 封鎖並排空現有節點。
  3. 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   eastus   eastus-1
aks-nodepool1-12345678-vmss000001   eastus   eastus-2
aks-nodepool1-12345678-vmss000002   eastus   eastus-3
...