建立使用可用性區域的 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 有正確分散。
使用
az aks scale
命令並將--node-count
設定為5
,將 AKS 叢集從 3 個節點縮放為 5 個節點。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 中商務持續性和災害復原的最佳做法。