第1个回答 2022-07-14
Kubernetes的kubelet组件内置了cadvisor,将Node上容器的指标以Prometheus支持的格式展示,可以通过这些指标计算得到更多有用的数据。
在Prometheus的配置文件中,配置了相关的Target之后,这些指标就可以从Prometheus中查询到。
直接访问Kubelet的apiserver接口,可以读取以Prometheus支持的格式呈现的指标:
从 man top 手册中找到了CPU使用率的定义:
即在过去的一段时间里进程占用的CPU时间与CPU总时间的比率,如果有多个CPU或者多核,需要将每个CPU的时间相加。
kubelet中的cadvisor采集的指标与含义,见: Monitoring cAdvisor with Prometheus 。
其中有几项是:
container_cpu_usage_seconds_total是container累计使用的CPU时间,用它除以CPU的总时间,就得到了容器的CPU使用率。
Pod 在1s内累计使用的CPU时间为:
container_spec_cpu_quota 是容器的CPU配额,它的值是:为容器指定的CPU个数*100000。
故,Pod在1s内CPU的总时间为:Pod的CPU核数 * 1s:
将上面两个公式的结果相除,就得到了容器的CPU使用率:
Pod 内存使用率的计算就简单多了,直接用内存实际使用量除以内存限制使用量即可: