建立使用可用性區域的 Azure Kubernetes Service (AKS) 叢集
本文說明如何建立 AKS 叢集,並跨多個可用性區域散發節點元件。
開始之前
- 您必須安裝並設定 Azure CLI 版本 2.0.76 或以後版本。 執行
az --version
以尋找版本。 如果您需要安裝或升級,請參閱安裝 Azure CLI。 - 請閱讀 AKS 中可用性區域的概觀,以瞭解在 AKS 中使用可用性區域的優點和限制。
Azure Resource Manager 範本和可用性區域
使用 Azure Resource Manager 範本建立具有可用性區域的 AKS 叢集時,請記住下列詳細數據:
- 例如,如果您在範本中明確定義 Null 值,
"availabilityZones": null
範本會將 屬性視為不存在。 這表示您的叢集不會部署在可用性區域中。 - 如果您未在
"availabilityZones":
範本中包含 屬性,則叢集不會部署在可用性區域中。 - 您無法更新現有叢集上可用性區域的設定,因為當您使用 Azure Resource Manager 範本更新 AKS 叢集時的行為不同。 如果您在可用性區域的範本中明確設定 Null 值,並更新叢集,則不會針對可用性區域更新叢集。 不過,如果您省略可用性區域屬性的語法 (例如
"availabilityZones": []
),則部署會嘗試停用現有 AKS 叢集上的可用性區域並且失敗。
在可用性區域之間建立 AKS 叢集
當您使用 az aks create
命令建立叢集時, --zones
參數會指定要部署代理程序節點的可用性區域。 受控控制平面元件部署所在的可用性區域不受此參數控制。 在叢集部署期間,這些元件會自動散佈到區域中的所有可用性區域 (如果有的話)。
下列範例命令示範如何建立總共三個節點的資源群組和 AKS 叢集。 一個代理程式節點位在區域 1 中,一個在 2 中,另一個則在 3 中。
使用
az group create
命令建立資源群組。az group create --name $RESOURCE_GROUP --location $LOCATION
使用
az aks create
命令搭配--zones
參數建立 AKS 叢集。az aks create \ --resource-group $RESOURCE_GROUP \ --name $CLUSTER_NAME \ --generate-ssh-keys \ --vm-set-type VirtualMachineScaleSets \ --load-balancer-sku standard \ --node-count 3 \ --zones 1 2 3
建立 AKS 叢集需要幾分鐘的時間。
在決定新節點應屬於哪個區域時,指定的 AKS 節點集區會使用基礎 Azure 虛擬機器擴展集提供的最佳工作區域平衡。 對擴展集而言,如果每個區域的 VM 數目相同,或是與所有其他區域中的 VM 數目差異為 +- 1 個,則該 AKS 節點集區即視為 [平衡]。
驗證跨區域的節點散發
叢集準備就緒時,請列出擴展集中的代理程式節點所在的可用性區域。
使用
az aks get-credentials
命令取得 AKS 叢集認證:az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME
使用
kubectl describe
命令列出叢集中的節點,並篩選topology.kubernetes.io/zone
值。kubectl describe nodes | grep -e "Name:" -e "topology.kubernetes.io/zone"
下列範例輸出顯示了跨指定區域和可用性區域散發的三個節點,例如第一個可用性區域的 eastus2-1,以及第二個可用性區域的 eastus2-2:
Name: aks-nodepool1-28993262-vmss000000 topology.kubernetes.io/zone=eastus2-1 Name: aks-nodepool1-28993262-vmss000001 topology.kubernetes.io/zone=eastus2-2 Name: aks-nodepool1-28993262-vmss000002 topology.kubernetes.io/zone=eastus2-3
您將更多節點新增至代理程式集區時,Azure 平台會自動在指定的可用性區域之間散發基礎 VM。
使用 Kubernetes 1.17.0 版和更新版本時,AKS 會使用 topology.kubernetes.io/zone
標籤和已被取代的 failure-domain.beta.kubernetes.io/zone
。 您可以使用下列命令,在上一個範例中執行 kubectl describe nodes
命令,以取得相同的結果:
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 eastus eastus-1
aks-nodepool1-34917322-vmss000001 eastus eastus-2
aks-nodepool1-34917322-vmss000002 eastus eastus-3
驗證跨區域的 Pod 散發
如已知的標籤、註釋和污點 (英文) 一文中所述,Kubernetes 會使用 topology.kubernetes.io/zone
標籤自動將 Pod 散發至不同可用區域中的複寫控制器或服務。 在此範例中,您會測試標籤,並將叢集從 3 個調整為 5 個節點,以確認 Pod 正確分散。
使用 命令,將 AKS 叢集從 3 個調整為 5 個節點,
--node-count
並將 設定為5
。az aks scale
az aks scale \ --resource-group $RESOURCE_GROUP \ --name $CLUSTER_NAME \ --node-count 5
調整作業完成時,請使用下列
kubectl describe
命令來確認 Pod 分佈於區域:kubectl describe nodes | grep -e "Name:" -e "topology.kubernetes.io/zone"
下列範例輸出顯示分散在指定區域和可用性區域的五個節點,例如 第一個可用性區域的 eastus2-1 ,第 二個可用性區域的 eastus2-2 :
Name: aks-nodepool1-28993262-vmss000000 topology.kubernetes.io/zone=eastus2-1 Name: aks-nodepool1-28993262-vmss000001 topology.kubernetes.io/zone=eastus2-2 Name: aks-nodepool1-28993262-vmss000002 topology.kubernetes.io/zone=eastus2-3 Name: aks-nodepool1-28993262-vmss000003 topology.kubernetes.io/zone=eastus2-1 Name: aks-nodepool1-28993262-vmss000004 topology.kubernetes.io/zone=eastus2-2
使用下列
kubectl create deployment
和kubectl scale
命令,部署具有三個複本的 NGINX 應用程式:kubectl create deployment nginx --image=mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine kubectl scale deployment nginx --replicas=3
使用下列
kubectl describe
命令驗證跨區域的 Pod 散發:kubectl describe pod | grep -e "^Name:" -e "^Node:"
下列範例輸出顯示分散在指定區域和可用性區域的三個 Pod,例如 第一個可用性區域的 eastus2-1 ,第 二個可用性區域的 eastus2-2 :
Name: nginx-6db489d4b7-ktdwg Node: aks-nodepool1-28993262-vmss000000/10.240.0.4 Name: nginx-6db489d4b7-v7zvj Node: aks-nodepool1-28993262-vmss000002/10.240.0.6 Name: nginx-6db489d4b7-xz6wj Node: aks-nodepool1-28993262-vmss000004/10.240.0.8
如您在先前的輸出中所見,第一個 Pod 是在節點 0 上執行,此節點位於可用性區域
eastus2-1
。 第二個 Pod 在節點 2 (對應至eastus2-3
) 上執行,而第三個節點則是在eastus2-2
中的節點 4。 如果沒有任何額外組態,Kubernetes 會在這三個可用性區域中之間正確散佈 Pod。
下一步
本文說明了如何使用可用性區域建立 AKS 叢集。 如需更多高可用性叢集的相關考量事項,請參閱因應 AKS 中商務持續性和災害復原的最佳做法。
意見反映
https://aka.ms/ContentUserFeedback。
即將推出:我們會在 2024 年淘汰 GitHub 問題,並以全新的意見反應系統取代並作為內容意見反應的渠道。 如需更多資訊,請參閱:提交及檢視以下的意見反映: