K8s Pod可观测cpu使用率转cpu使用量

原创 吴就业 275 0 2024-03-28

本文为博主原创文章,未经博主允许不得转载。

本文链接:https://wujiuye.com/article/e71bcecfe598448e9329eabf64bb645a

作者:吴就业
链接:https://wujiuye.com/article/e71bcecfe598448e9329eabf64bb645a
来源:吴就业的网络日记
本文为博主原创文章,未经博主允许不得转载。

前面《如何获取Pod的CPU和内存指标,使用Grafana Agent收集指标,上传到Prometheus》这篇介绍的指标获取只拿到了cpu使用率,怎么转成cpu使用量呢?

如果我们需要的是cpu使用量,而不是cpu使用率的话,其实只需要用使用率*1000毫核即可(1cpu=1000m)。

假如cpu使用率是200%的话,以一分钟计算的话,因为一分钟只有60秒,200%就是占用了120秒,一个cpu肯定只有60秒的时间,所以200%,就是用了两个cpu。

由于/metrics/resource接口没有提供节点的cpu核数,我们想知道cpu核数,所以指标收集我们换了个接口:/metrics/cadvisor。可以使用/metrics/cadvisor取代/metrics/resource

/metrics/cadvisor我们可以通过此接口拿到一些我们关心的指标,例如:

container_cpu_usage_seconds_total ## 容器cpu使用秒数
container_memory_usage_bytes ## 容器内存使用
machine_cpu_cores ## cpu核数

/metrics/cadvisor接口收集到的指标

由于/metrics/cadvisor也并不直接给出cpu使用率,而是给出容器的cpu使用时间:container_cpu_usage_seconds_total

所以我们还是需要先计算使用率,再计算使用量,计算公式:

举例:

发送两次curl请求取container_cpu_usage_seconds_total指标,并记录下来。

container_cpu_usage_seconds_total 440622.88009 1710842537802
container_cpu_usage_seconds_total 440624.781901 1710842567875

container_cpu_usage_seconds_total后面有两个数字:一个是使用时间,单位核心/秒;一个是时间戳,单位毫秒。单位不一样,所以需要换算一下,所示计算利用率的公式是:

(440624.781901 - 440622.88009) / ((1710842567875 - 1710842537802) / 1000) 
= 1.901811 / 30.073 
= 0.06324 
= 6.324%

那么计算使用量为:

0.06324 * 1000 = 63.24m (毫核)

然后,如果我们想要的是Pod的CPU使用率,由于/metrics/cadvisor只提供容器的,就需要我们将Pod上所有容器的使用量相加。不过一般情况下一个Pod都只会有一个容器。

#云原生

声明:公众号、CSDN、掘金的曾用名:“Java艺术”,因此您可能看到一些早期的文章的图片有“Java艺术”的水印。

文章推荐

满足Autoscaler触发自定扩容Node的条件是什么?

我们使用自定义的调度器来调度pod,有自定义的Filter插件。Autoscaler在执行扩容之前,会调用Filter插件,尝试是不是真的没有node满足调度这个pod再去扩容。而默认情况下,Autoscaler拿的是默认的Filter插件,拿不到我们自定义的Filter插件,所以没有走我们的Filter逻辑,所以不会扩容。

如何实现一个简单的K8s apiserver

apiserver是k8s的另一种扩展机制,相比CRD,它更为灵活。本篇以实战为主,介绍如何实现一个简单的apiserver。

Autopilot: workload autoscaling at Google论文描述的requests预测算法

本篇简单描述(Autopilot: workload autoscaling at Google)论文中描述的资源request预测算法,不需要理解论文中那复杂的数学公式。

云原生专栏第一阶段完结,第二阶段开始

由于方向的错误,我们第一阶段开发的云原生PaaS平台这个项目也迎来了终结。但我们换了个方向继续做云原生PaaS平台。

使用Grafana Agent收集Pod的cpu和内存指标,以及标准输出日志的完整案例

通常指标和日志收集这两者是一起的,可观测即离不开指标,也离不开日记。当两者都需要的时候,就没必要部署两个DaemonSet了。本篇将两者结合成一个完整的案例,大家可以直接拿去部署使用。

如何获取Pod的CPU和内存指标,使用Grafana Agent收集指标,上传到Prometheus

本篇是作者在云原生PaaS平台项目中实战可观测能力做的技术调研,将关键技术知识点讲透,涉及:如何获取Pod的cpu和内存指标、使用Grafana Agent收集指标、上传到Prometheus。