大型叢集的考量
叢集是一組節點(實體或虛擬機器),執行 Kubernetes 代理程式,由控制平面管理。 Kubernetes v1.32 支援最多 5,000 個節點的叢集。 更具體地說,Kubernetes 旨在適應符合所有以下條件的組態
- 每個節點不超過 110 個 Pod
- 不超過 5,000 個節點
- 總共不超過 150,000 個 Pod
- 總共不超過 300,000 個容器
你可以透過新增或移除節點來擴展你的叢集。 你執行此操作的方式取決於你的叢集部署方式。
雲端供應商資源配額
為了避免遇到雲端供應商配額問題,當建立具有多個節點的叢集時,請考慮
- 請求增加雲端資源的配額,例如
- 運算執行個體
- CPU
- 儲存卷
- 使用中的 IP 位址
- 封包過濾規則集
- 負載平衡器的數量
- 網路子網路
- 日誌串流
- 閘道叢集擴展操作,以分批啟動新節點,批次之間暫停,因為某些雲端供應商會限制新執行個體的建立速率。
控制平面元件
對於大型叢集,你需要具有足夠運算和其他資源的控制平面。
通常,每個故障區域你會執行一或兩個控制平面實例,首先垂直擴展這些實例,然後在達到 (垂直) 擴展的報酬遞減點後再水平擴展。
你應在每個故障區域至少執行一個實例,以提供容錯能力。 Kubernetes 節點不會自動將流量導向到位於相同故障區域中的控制平面端點;但是,你的雲端供應商可能具有自己的機制來執行此操作。
例如,使用託管負載平衡器,你將負載平衡器配置為發送來自故障區域 A 中 kubelet 和 Pod 的流量,並將該流量僅導向到也位於區域 A 中的控制平面主機。 如果單一控制平面主機或端點故障區域 A 離線,則表示區域 A 中節點的所有控制平面流量現在都在區域之間發送。 在每個區域中執行多個控制平面主機可以降低這種結果的可能性。
etcd 儲存
為了提高大型叢集的效能,你可以將 Event 物件儲存在單獨的專用 etcd 實例中。
建立叢集時,你可以(使用自訂工具)
- 啟動和組態額外的 etcd 實例
- 設定 API 伺服器 以使用它來儲存事件
請參閱Kubernetes 的 etcd 叢集操作和使用 kubeadm 設定高可用性 etcd 叢集,以了解關於為大型叢集設定和管理 etcd 的詳細資訊。
附加元件資源
Kubernetes 資源限制有助於盡量減少記憶體洩漏以及 Pod 和容器可能影響其他元件的其他方式所造成的影響。這些資源限制適用於附加元件資源,就像它們適用於應用程式工作負載一樣。
例如,您可以為日誌元件設定 CPU 和記憶體限制
...
containers:
- name: fluentd-cloud-logging
image: fluent/fluentd-kubernetes-daemonset:v1
resources:
limits:
cpu: 100m
memory: 200Mi
附加元件的預設限制通常基於從在小型或中型 Kubernetes 叢集上執行每個附加元件的經驗收集的資料。當在大型叢集上執行時,附加元件通常會消耗比其預設限制更多的資源。如果部署大型叢集時未調整這些值,則附加元件可能會因不斷達到記憶體限制而持續被終止。或者,附加元件可能會執行,但由於 CPU 時間配額限制而效能不佳。
為了避免遇到叢集附加元件資源問題,當建立具有許多節點的叢集時,請考慮以下事項
- 有些附加元件是垂直擴展的 - 叢集或服務整個故障區域只有一個附加元件副本。對於這些附加元件,當您擴展叢集時,請增加請求和限制。
- 許多附加元件是水平擴展的 - 您透過執行更多 Pod 來增加容量 - 但是對於非常大的叢集,您可能還需要稍微提高 CPU 或記憶體限制。垂直 Pod 自動擴展器可以在推薦器模式下運行,以為請求和限制提供建議數字。
- 有些附加元件以每個節點一個副本的方式運行,由 DaemonSet 控制:例如,節點級別的日誌聚合器。與水平擴展的附加元件的情況類似,您可能還需要稍微提高 CPU 或記憶體限制。
下一步
VerticalPodAutoscaler
是一種自訂資源,您可以將其部署到您的叢集中,以協助您管理 Pod 的資源請求和限制。
進一步了解垂直 Pod 自動擴展器以及如何使用它來擴展叢集元件,包括叢集關鍵附加元件。閱讀關於叢集自動擴展
附加元件調整器可協助您隨著叢集規模的變化自動調整附加元件的大小。