叢集是由一組執行 Kubernetes 代理程式的節點 (實體機器或虛擬機器)所組成,並由控制平面進行管理。 Kubernetes v1.35 支援最多 5,000 個節點的叢集。 更具體來說,Kubernetes 的設計可支援符合以下所有準則的配置:
您可以透過新增或移除節點來調整叢集規模。具體作法取決於叢集的部署方式。
為了避免碰到雲端供應商的配額問題,在建立多個節點的叢集時,建議考量:
對於大型叢集,您需要一個具備足夠運算及其他資源的控制平面。
通常您會在每個故障區執行一到兩個控制平面執行個體,並優先對這些執行個體進行垂直擴展; 直到垂直擴展達到邊際效益遞減的臨界點後,再進行水平擴展。
您應該在每個故障區執行至少一個執行個體來提供容錯能力。 Kubernetes 節點不會自動將流量導向位於相同故障區的控制平面端點;然而, 您的雲端供應商可能有其獨有的機制來做到這一點。
例如,使用託管的負載平衡器時, 您可以設定此負載平衡器將源於故障區 A 的 kubelet 與 Pod 流量僅導向同樣位於故障區 A 的控制平面主機。 如果故障區 A 內的單一控制平面主機或端點離線,這意味著 A 區節點的所有控制平面流量現在都將改為跨區傳輸。 在每個區域中執行多個控制平面主機可以降低發生這種情況的可能性。
為了提升大型叢集的效能,您可以將 Event 物件儲存於一個獨立且專屬的 etcd 執行個體中。
您可以使用自訂工具,在建立叢集時:
請參閱針對 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 時間切片限制影響而效能低落。
為了避免遇到叢集附加元件的資源問題,在建立包含多個節點的叢集時,建議考量以下事項:
為了確保叢集的必要組件(例如 CoreDNS、metrics-server 與其他關鍵附加元件)優先於其他工作負載進行排程,且不會被較低優先權的 Pod 搶佔,
請使用系統的 PriorityClass 來設定這些組件的優先順序,
例如 system-cluster-critical 或 system-node-critical。
VerticalPodAutoscaler 是一個您可以部署到叢集中的自訂資源,用來協助您管理 Pod 的資源請求與限制。
請參閱 Vertical Pod Autoscaler 以了解更多資訊,
並學習如何使用它來調整叢集組件的規模,包括叢集關鍵的附加元件。