共用方式為


Azure Kubernetes Service 中的可用性區域 (AKS)

可用性區域 可協助保護您的應用程式和數據免於資料中心失敗。 區域是在 Azure 區域內獨特的實體位置。 每個區域皆包含一或多個配備獨立電力、冷卻系統及網路的資料中心。

搭配可用性區域使用 AKS 可實際將資源分散到單一區域內的不同可用性區域,以改善可靠性。 在多個區域中部署節點不會產生額外的成本。

本文說明如何設定 AKS 資源以使用 可用性區域。

AKS 資源

下圖顯示當您建立 AKS 叢集時所建立的 Azure 資源:

顯示各種 AKS 元件的圖表,其中顯示 Azure 訂用帳戶中Microsoft和 AKS 元件所裝載的 AKS 元件。

AKS 控制平面

Microsoft裝載 AKS 控制平面、Kubernetes API 伺服器和服務,例如 scheduleretcd 作為受控服務。 Microsoft複寫多個區域中的控制平面。

叢集的其他資源會部署在 Azure 訂用帳戶中的受控資源群組中。 根據預設,此資源群組前面會加上 受控叢集的 MC_,並包含下列資源:

節點集區

節點集區會建立為 Azure 訂用帳戶中的虛擬機擴展集。

當您建立 AKS 叢集時,需要一個 系統節點集 區,並自動建立。 它會載入重要的系統 Pod,例如 CoreDNSmetrics-server。 您可以將更多 使用者節點集 區新增至 AKS 叢集,以裝載您的應用程式。

有三種方式可以部署節點集區:

  • 區域跨越
  • 區域對齊
  • Regional

此圖顯示不同模型中跨可用性區域的 AKS 節點分佈。

針對系統節點集區,建立叢集時會設定所使用的區域數目。

區域跨越

跨越擴展集的區域會透過使用 --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。

限制

使用 可用性區域 時適用下列限制:

  • 請參閱 AKS 中的配額、虛擬機大小限制和區域可用性。
  • 建立節點集區之後,無法使用的 可用性區域 數目。
  • 大部分區域都支援 可用性區域。 您可以在這裡找到清單。

下一步