Scaling Kube State Metrics

Ellie Huxtable

擴展 Kube State Metrics

隨著叢集規模變大,你可能會發現抓取開始變得耗時——kube state metrics 可能會暴露多達數百萬個樣本,取決於你擁有多少節點、Pod 等資源!

KSM 支援 sharding(分片),分為自動與手動兩種。可惜的是,autosharding 目前仍處於非常早期的開發階段。

Automatic sharding 讓每個 shard 在以 StatefulSet 部署時,能夠自行發現其標稱位置,這對於自動設定 sharding 非常有用。這是一項實驗性功能,可能會在不另行通知的情況下故障或被移除。

所以,我們可以選擇手動進行 sharding!不過這仍然稱不上理想,因為即使我們有多個 Pod 同時抓取相同的資源,它們各自仍需要拉取所有資料。也就是說,我們會從一個 Pod 拉取 x 筆資料,變成 n 個 Pod 各自拉取 x 筆資料。換算下來,總網路傳輸量為 n * x,而非如果只傳輸該 shard 所需資料時的 n * x/n。仍然不夠理想。

每個 shard 會自行決定物件是否由各自的 kube-state-metrics 執行個體處理。請注意,這意味著所有 kube-state-metrics 執行個體,即使已進行 sharding,仍會針對所有物件產生網路流量並消耗資源來進行物件的 unmarshaling(反序列化),而不僅僅是它們所負責的物件。

到目前為止,我得出的結論是依資料類型來進行 sharding。Pod 往往會暴露最多的樣本,因此優先將其拆分出來是合理的。所以我們建立一個專門暴露 Pod 指標的 deployment,再用另一個來處理其餘的所有指標。

看起來其他地方也採取了同樣的做法,目前運作良好。

原文由 Ellie Huxtable 發布

本文章由 muse-spark-1.2-contributor 進行翻譯