執行或調整大型 AKS 叢集常見問題時的常見問題
本文回答當您在 Microsoft Azure Kubernetes Service (AKS) 中執行或調整大型叢集時可能發生之常見問題的常見問題。 大型叢集是任何以超過 500 節點規模執行的叢集。
我在建立、相應增加或升級期間收到「超過配額」錯誤
若要解決此問題,請在您嘗試建立、調整或升級的訂用帳戶中建立支援要求,並要求對應資源類型的配額。 如需詳細資訊,請參閱 區域計算配額。
當我部署使用進階網路的 AKS 叢集時,我收到「insufficientSubnetSize」錯誤
此錯誤表示用於叢集的子網在其 CIDR 內已不再有可用的 IP,以便成功指派資源。 此問題可能發生在升級、向外延展或節點集區建立期間。 發生此問題的原因是子網中的可用IP數目小於下列公式的結果:
要求的節點數目 * 節點集
--max-pod
區值
必要條件
若要調整超過 400 個節點,您必須使用 Azure CNI 網路外掛程式。
若要協助規劃虛擬網路和子網,以容納您要部署的節點和 Pod 數目,請參閱 規劃叢集的 IP 位址。 若要減少因為IP耗盡而進行子網規劃或叢集重新建立的額外負荷,請參閱 動態IP配置。
解決方案
因為您無法更新現有子網的 CIDR 範圍,因此您必須擁有建立新子網的許可權,才能解決此問題。 執行下列步驟:
重建具有較大 CIDR 範圍且足以達到作業目標的新子網。
建立具有新非重疊範圍的新子網。
在新的子網路上建立新的節點集區。
從將取代之舊子網中的舊節點集區清空 Pod。
刪除舊的子網路和舊的節點集區。
我因為 SNAT 埠耗盡而發生零星的輸出連線失敗
對於以相對大型(超過 500 個節點)執行的叢集,建議您使用 AKS 受控網路位址轉換 (NAT) 閘道 ,以取得更大的延展性。 Azure NAT 閘道允許每個IP位址最多64,512個輸出UDP和TCP流量流動,以及最多16個IP位址。
如果您未使用受控 NAT,請參閱 針對來源網路位址轉換 (SNAT) 耗盡和連線逾 時進行疑難解答,以瞭解並解決 SNAT 埠耗盡問題。
我無法使用 Azure 入口網站 來相應增加 5,000 個節點
請遵循下列步驟,使用 Azure CLI 來相應增加最多 5,000 個節點:
執行下列命令,在叢集中建立最小節點集區數目(因為節點集區節點限制上限為1,000個):
az aks nodepool add --resource-group MyResourceGroup --name nodepool1 --cluster-name MyManagedCluster
一次相應增加一個節點集區。 在理想情況下,在連續相應增加 1,000 之間設定 5 分鐘的睡眠時間。 執行以下命令:
az aks nodepool scale --resource-group MyResourceGroup --name nodepool1 --cluster-name MyManagedCluster
我的升級正在執行中,但速度很慢
在其預設設定中,AKS 會採取下列動作在升級期間激增:
- 建立一個新的節點。
- 將節點集區調整為超過所需節點數目的一個節點。
針對最大激增設定,一個節點的預設值表示 AKS 會在清空現有應用程式之前建立一個新節點,並取代舊版節點。 這個額外的節點可讓 AKS 將工作負載中斷降至最低。
當您升級具有許多節點的叢集時,如果您使用的預設值 max-surge
,可能需要數小時才能升級整個叢集。 您可以自定義 max-surge
每個節點集區的屬性,以在升級速度和升級中斷之間取得取捨。 藉由增加最大激增值,您可以讓升級程式更快完成。 不過,最大激增的較大值也可能在升級程式期間造成中斷。
執行下列命令來增加或自訂現有節點集區的最大激增:
az aks nodepool update --resource-group MyResourceGroup --name mynodepool --cluster-name MyManagedCluster --max-surge 5
也請務必考慮部署設定如何延遲升級或調整作業的完成:
- 系統節點集區中的 AKS 不支援 SKU 系列 B 系列 VM,而且在更新期間和之後可能會有低效能。
- 檢查部署的 PDB 資源設定,以確保它們能正確升級。 如需詳細資訊,請參閱 AKS 工作負載最佳做法。
提示
若要深入瞭解此行為,您可以在 Azure 入口網站 的 [活動記錄] 頁面上檢視錯誤詳細數據,或檢視叢集上的資源記錄。
我的升級已達到配額 (5,000 個叢集) 限制
若要解決此問題,請參閱 增加區域 vCPU 配額。
在超過 750 個節點的內部服務建立速度緩慢或失敗,因為發生逾時錯誤
標準 Load Balancer (SLB) 後端集區更新是已知的效能瓶頸。 我們正致力於一項新功能,以便更快速地大規模建立服務和 SLB。 若要傳送有關此問題的意見反應,請參閱 Azure Kubernetes 對具有 IP 型後端集區的負載平衡器支援。
解決方案
我們建議您將叢集相應減少到少於 750 個節點,然後為叢集建立內部負載平衡器。 若要建立內部負載平衡器,請根據下列範例程式建立 LoadBalancer
服務類型和 azure-load-balancer-internal
批注。
步驟 1:建立內部負載平衡器
若要建立內部負載平衡器,請建立名為 internal-lb.yaml 且包含 LoadBalancer
服務類型和 azure-load-balancer-internal
批注的服務指令清單,如下列範例所示:
apiVersion: v1
kind: Service
metadata:
name: internal-app
annotations:
service.beta.kubernetes.io/azure-load-balancer-internal: "true"
spec:
type: LoadBalancer
ports:
- port: 80
selector:
app: internal-app
步驟 2:部署內部負載平衡器
使用 kubectl apply
命令部署內部負載平衡器,並指定 YAML 指令清單的名稱,如下列範例所示:
kubectl apply -f internal-lb.yaml
建立叢集之後,您也可以布建內部負載平衡器(根據此程式),並讓內部負載平衡服務保持執行。 這樣做可讓您大規模地將更多服務新增至負載平衡器。
大規模建立 SLB 服務需要數小時才能執行
SLB 後端集區更新是已知的效能瓶頸。 我們正致力於一項新功能,可讓您大規模執行負載平衡服務,以大幅提升建立、更新和刪除作業的效能。 若要傳送您的意見反應,請參閱 Azure Kubernetes 對具有 IP 型後端集區的負載平衡器支援。
協力廠商資訊免責聲明
本文提及的協力廠商產品是由與 Microsoft 無關的獨立廠商所製造。 Microsoft 不以默示或其他方式,提供與這些產品的效能或可靠性有關的擔保。
與我們連絡,以取得說明
如果您有問題或需要相關協助,請建立支援要求,或詢問 Azure community 支援。 您也可以向 Azure 意見反應社群提交產品意見反應。