擴展 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,再用另一個來處理其餘的所有指標。
看起來其他地方也採取了同樣的做法,目前運作良好。
隨機一篇部落格