大型叢集注意事項

叢集是執行 Kubernetes 代理的節點(物理或虛擬機器)的集合,由控制平面管理。Kubernetes v1.34 支援多達 5000 個節點的叢集。更具體地說,Kubernetes 旨在適應滿足以下所有條件的配置:

  • 每個節點不超過 110 個 Pod
  • 節點總數不超過 5000 個
  • Pod 總數不超過 150,000 個
  • 容器總數不超過 300,000 個

你可以透過新增或刪除節點來擴充套件叢集。具體操作方式取決於叢集的部署方式。

雲提供商資源配額

為了避免遇到雲提供商配額問題,在建立包含大量節點的叢集時,請考慮:

  • 申請增加雲資源配額,例如:
    • 計算例項
    • CPU
    • 儲存卷
    • 正在使用的 IP 地址
    • 包過濾規則集
    • 負載均衡器數量
    • 網路子網
    • 日誌流
  • 分批啟動新節點,並在批次之間暫停,以控制叢集擴縮操作,因為某些雲提供商會限制新例項的建立速率。

控制平面元件

對於大型叢集,你需要一個具有足夠計算能力和其他資源的控制平面。

通常,你會在每個故障區域執行一個或兩個控制平面例項,首先垂直擴充套件這些例項,然後在達到(垂直)擴充套件收益遞減點後,再進行水平擴充套件。

你至少應在每個故障區域執行一個例項以提供容錯能力。Kubernetes 節點不會自動將流量引導至同一故障區域的控制平面端點;但是,你的雲提供商可能擁有自己的機制來完成此操作。

例如,使用託管負載均衡器,你可以將負載均衡器配置為將源自故障區域 _A_ 中 kubelet 和 Pod 的流量,僅導向到同樣位於區域 _A_ 中的控制平面主機。如果區域 _A_ 中的單個控制平面主機或端點離線,則意味著區域 _A_ 中節點的所有控制平面流量現在都會在區域之間傳送。在每個區域中執行多個控制平面主機可以降低發生這種情況的可能性。

etcd 儲存

為了提高大型叢集的效能,你可以將 Event 物件儲存在獨立的專用 etcd 例項中。

建立叢集時,你可以(使用自定義工具):

  • 啟動並配置額外的 etcd 例項
  • 配置API 伺服器,使其用於儲存事件

有關為大型叢集配置和管理 etcd 的詳細資訊,請參閱為 Kubernetes 運維 etcd 叢集使用 kubeadm 設定高可用性 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 自動擴縮器以及如何使用它來擴縮叢集元件(包括叢集關鍵外掛)。

  • 閱讀節點自動擴縮

  • 外掛調整器可以幫助你在叢集規模變化時自動調整外掛的大小。

上次修改於 2024 年 4 月 26 日太平洋時間下午 3:39:cluster-autoscaling -> node-autoscaling clean-up (dc530ffd6a)