如何正确监控K8S Pod CPU使用率百分比?数值超100%求解决方案
K8s Pod CPU使用率超100%问题解决办法
问题根源
你使用的查询语句sum(rate(container_cpu_usage_seconds_total{container!=""}[10m])) by (pod) * 100会把Pod内所有容器的CPU使用率加总。K8s中一个Pod可分配多个CPU核心,当Pod使用的核心数超过1时,结果自然会超过100%;再加上GitLab Runner的Pod往往包含多个容器(比如初始化容器、构建容器),累加后数值会进一步放大。
可行解决方案
按容器拆分统计:如果需要查看单个容器的使用率,给分组维度加上
container,避免多容器累加导致的超值:sum(rate(container_cpu_usage_seconds_total{container!=""}[10m])) by (pod, container) * 100这样能清晰看到Pod内每个容器的单独使用情况,不会出现跨容器的累加超100%问题。
基于CPU配额计算相对使用率:如果要显示Pod实际使用占其CPU配额的百分比,结合CPU限制指标计算占比:
sum(rate(container_cpu_usage_seconds_total{container!=""}[10m])) by (pod) / sum(kube_pod_container_resource_limits_cpu_cores{container!=""}) by (pod) * 100这个查询的结果是Pod总CPU使用占其CPU限制的比例,正常情况下不会超过100%(除非Pod超配额运行,可能略超)。如果你的Pod使用CPU请求而非限制,将指标替换为
kube_pod_container_resource_requests_cpu_cores即可。针对GitLab Runner Pod的精准过滤:对于GitLab Runner动态创建、容器名重复的Pod,可以通过标签(比如
job标签)区分不同流水线任务:sum(rate(container_cpu_usage_seconds_total{container!="", job=~"gitlab-runner.*"}[10m])) by (pod, job) * 100这样能精准对应到具体流水线的Pod使用率数据,避免混淆。
内容的提问来源于stack exchange,提问作者Filip Csupka
相关产品推荐
相关产品推荐

