Scaling Kube State Metrics

Ellie Huxtable

Kube State Metrics 的扩展

当集群规模变大时,你可能会发现抓取(scrape)开始变得耗时——kube state metrics 可能会暴露数百万个样本,具体取决于你有多少节点/pod 等!

KSM 支持分片(sharding),既有自动方式,也有手动方式。遗憾的是,自动分片(autosharding)仍处于开发初期

自动分片允许每个分片在部署于 StatefulSet 中时发现其名义位置,这对于自动配置分片非常有用。这是一个实验性功能,可能会在没有通知的情况下损坏或被移除。

所以,我们可以手动分片!不过这仍然不算理想,因为即使我们有一堆 pod 在抓取同一类资源,它们每个仍需要拉取全部数据。于是我们从原来一个 pod 拉取 x 数据,变成了 n 个 pod 各自拉取 x 数据。也就是说,总网络传输量为 n * x,而如果我们只传输该分片所需的数据,则只需传输 n * x/n。仍然不理想。

每个分片自行决定某个对象是否由对应的 kube-state-metrics 实例处理。请注意,这意味着所有 kube-state-metrics 实例,即使已分片,仍会产生针对所有对象的网络流量和对象反序列化的资源消耗,而不仅仅是它们负责的那些对象。

到目前为止,我得出的结论是按数据类型进行分片。Pod 往往暴露最多的样本,因此首先把这部分拆分出来是合理的。于是我们用一个部署(deployment)暴露 pod 指标,另一个用于其余所有内容。

看起来其他地方也是这么做的,目前这样可行

原文由 Ellie Huxtable 发布

本文章由 stealth/ox-alpha 进行翻译