跳至主要内容

大規模 Rancher 的調優和最佳實踐

本指南描述了擴展 Rancher 設定的最佳實踐和調優方法,以及與此相關的挑戰。隨著系統的增長,效能自然會降低,但可以採取一些步驟來最小化 Rancher 上的負載並優化 Rancher 管理更大基礎設施的能力。

優化 Rancher 效能​

  • 使用修補程式版本保持 Rancher 最新。我們不斷透過效能增強和錯誤修復來改進 Rancher。最新的 Rancher 版本包含所有累積的效能和穩定性改進,以及基於開發者經驗和使用者回饋的更新。

  • 始終逐步擴展,並在此過程中監控和觀察行為的任何變化。通常,在效能問題出現時立即解決它們會更容易,而不是在其他問題掩蓋根本原因之後。

  • 盡可能減少上游 Rancher 叢集和下游叢集之間的網路延遲。請注意,延遲除其他因素外,也是地理距離的函數 - 如果您需要跨越世界的叢集或節點,請考慮多個 Rancher 安裝。

最小化上游叢集的負載​

在擴展 Rancher 時,一個典型的瓶頸是上游(本機)Kubernetes 叢集中的資源增長。上游叢集包含所有下游叢集的資訊。應用於下游叢集的許多操作會在上游叢集中建立新物件,並需要在上游叢集中執行的處理程序進行計算。

最小化上游叢集上的第三方軟體​

一般 Rancher 建議中概述的建議在高規模環境中尤為重要。

管理您的物件計數​

Etcd 是 Kubernetes 和 Rancher 的後端資料庫。該資料庫最終可能會遇到它可以儲存的單一 Kubernetes 資源類型數量的限制。確切的限制各不相同,並取決於許多因素。然而,經驗表明,一旦單一資源類型的物件計數超過 60,000,效能問題經常出現。通常該類型是 RoleBinding。

這在 Rancher 中很典型,因為許多操作會在上游叢集中建立新的 RoleBinding 物件作為副作用。

您可以透過以下方式減少上游叢集中的 RoleBindings 數量:

  • 僅在必要時將使用者新增到叢集和專案。
  • 在不再需要時移除叢集和專案。
  • 僅在必要時使用自訂角色。
  • 在自訂角色中使用盡可能少的規則。
  • 考慮將角色新增到使用者是否是多餘的。
  • 考慮使用更少但更強大的叢集。
  • Kubernetes 權限始終是「加法」(允許清單)而不是「減法」(拒絕清單)。嘗試最小化賦予除一個方面之外的叢集、專案或命名空間存取權限的配置,因為這將導致建立大量 RoleBinding 物件。
  • 實驗以查看建立新專案或叢集是否會為您的特定使用案例產生更少的 RoleBindings。

使用外部身份驗證​

如果您有五十個或更多使用者,您應該配置外部身份驗證提供商。這對於更好的效能是必要的。

配置外部身份驗證後,請確保將權限指派給群組而不是個別使用者。這有助於減少 RoleBinding 物件計數。

RoleBinding 計數估算​

預測給定配置將建立多少 RoleBinding 物件是複雜的。然而,以下考慮因素可以提供粗略估計:

  • 對於最小估計,請使用公式 32C + U + 2UaC + 8P + 5Pa。
    • C 是叢集總數。
    • U 是使用者總數。
    • Ua 是具有叢集成員資格的平均使用者數。
    • P 是專案總數。
    • Pa 是具有專案成員資格的平均使用者數。
  • RoleBindings 的數量隨叢集、專案和使用者的數量線性增加。

使用新應用程式而非舊版應用程式​

Rancher 使用兩種 Kubernetes 應用程式資源:apps.projects.cattle.io 和 apps.cattle.cattle.io。舊版應用程式由 apps.projects.cattle.io 表示,隨前 Cluster Manager UI 引入,現已過時。當前應用程式由 apps.catalog.cattle.io 表示,可在其各自叢集的 Cluster Explorer UI 中找到。Apps.cattle.cattle.io 應用程式更可取,因為它們的資料駐留在下游叢集中,從而釋放了上游叢集中的資源。

您應該移除出現在 Cluster Manager UI 中的任何剩餘舊版應用程式,並將它們替換為 Cluster Explorer UI 中的應用程式。僅在 Cluster Explorer UI 中建立任何新應用程式。

使用授權叢集端點 (ACE)​

授權叢集端點 (ACE) 提供對 Rancher 佈建的 RKE2 和 K3s 叢集的 Kubernetes API 的存取。啟用時,ACE 會將上下文新增到為叢集生成的 kubeconfig 檔案。該上下文使用直接端點到叢集,從而繞過 Rancher。這在可接受或優先使用無中介 API 存取的情況下減少了 Rancher 上的負載。有關更多資訊和配置說明,請參閱授權叢集端點。

減少事件處理程序執行​

Rancher 的大部分邏輯發生在事件處理程序上。這些事件處理程序在物件更新時以及啟動 Rancher 時在物件上執行。此外,當 Rancher 同步快取時,它們每 10 小時執行一次。在擴展設定中,這些排程執行會帶來巨大的效能成本,因為每個處理程序都在每個適用的物件上執行。但是,可以使用 CATTLE_SYNC_ONLY_CHANGED_OBJECTS 環境變數停用排程處理程序執行。如果每 10 小時看到資源分配峰值,此設定可以提供幫助。

CATTLE_SYNC_ONLY_CHANGED_OBJECTS 的值可以是以下選項的逗號分隔清單。這些值指的是處理程序和控制器的類型(包含和執行處理程序的結構)。將控制器類型新增到變數會停用該組控制器將其處理程序作為快取重新同步的一部分執行。

  • mgmt 指的是僅在一個 Rancher 節點上執行的管理控制器。
  • user 指的是為每個叢集執行的使用者控制器。其中一些與管理控制器在同一節點上執行,而其他則在下游叢集中執行。此選項針對前者。
  • scaled 指的是在每個 Rancher 節點上執行的擴展控制器。您應該避免設定此值,因為擴展處理程序負責關鍵功能,變更可能會破壞叢集穩定性。

簡而言之,如果您注意到 CPU 使用率每 10 小時達到峰值,請將 CATTLE_SYNC_ONLY_CHANGED_OBJECTS 環境變數新增到您的 Rancher 部署(在 spec.containers.env 清單中),值為 mgmt,user。

Rancher 外部的優化​

重要的影響因素是底層叢集自身的效能和配置。如果配置錯誤,上游叢集可能會引入 Rancher 軟體無法解決的瓶頸。

直接使用 RKE2 管理上游叢集節點​

由於 Rancher 在上游叢集上可能要求非常高,特別是在規模上,您應該對叢集的配置和節點具有完全的管理控制權。要識別過多資源消耗的根本原因,請使用標準 Linux 故障排除技術和工具。這可以幫助區分 Rancher、Kubernetes 或作業系統元件是否導致問題。

儘管受管理的 Kubernetes 服務使部署和執行 Kubernetes 叢集變得更容易,但在高規模場景中不建議用於上游叢集。受管理的 Kubernetes 服務通常限制對個別節點和服務的配置和見解的存取。

對於大規模使用案例,請使用 RKE2。

將所有上游叢集節點放在同一位置​

為了提供高可用性,Kubernetes 被設計為在不同區域執行節點和控制元件。然而,如果節點和控制平面元件位於不同區域,網路流量可能會變慢。

Rancher 元件與 Kubernetes API 之間的流量以及節點之間的 etcd 流量對網路延遲特別敏感。

為了提高效能,請在同一位置執行所有上游節點叢集。特別是,請確保 etcd 節點和 Rancher 之間的延遲盡可能低。

保持 Kubernetes 版本最新​

您應該保持本機 Kubernetes 叢集最新。這將確保您的叢集具有所有可用的效能增強和錯誤修復。

優化 etcd​

Etcd 是 Kubernetes 和 Rancher 的後端資料庫。它在 Rancher 效能中起著非常重要的作用。

etcd 效能的兩個主要瓶頸是磁碟和網路速度。Etcd 應該在具有快速網路設定和具有高每秒輸入/輸出操作(IOPS)的 SSD 的專用節點上執行。有關 etcd 效能的更多資訊,請參閱緩慢的 etcd 效能(效能測試和優化)和為大型安裝調優 etcd。有關磁碟的資訊也可以在安裝要求中找到。

最好在恰好三個節點上執行 etcd,因為新增更多節點會降低操作速度。這可能與常見的擴展方法相反,但這是由於 etcd 的複製機制。

Etcd 效能也會受到節點之間網路延遲的負面影響,因為這會減慢網路通訊。Etcd 節點應與 Rancher 節點位於一起。

瀏覽器要求​

在高規模下,Rancher 從上游叢集向在瀏覽器中執行的 UI 元件傳輸更多資料,這些元件也需要執行更多處理。

為了獲得最佳效能,請確保執行硬體的主機符合以下要求:

  • 2020 i5 第 10 代 Intel(4 核心)或同等產品
  • 8 GB RAM
  • 到上游叢集的總網路頻寬:72 Mb/s(相當於單一 802.11n Wi-Fi 4 連結串流,~8 MB/s http 下載吞吐量)
  • 從瀏覽器到上游叢集的往返時間(ping 時間):150 ms 或更少