为什么容器内存使用量在cAdvisor指标中翻了一番? [英] Why container memory usage is doubled in cAdvisor metrics?

查看:13
本文介绍了为什么容器内存使用量在cAdvisor指标中翻了一番?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我测试了这些查询。

sum(container_memory_working_set_bytes{image!="",name=~"^k8s_.*",pod=~"$pod"}) by (pod)sum (container_memory_working_set_bytes{pod=~"$pod"}) by (pod) 第一个查询的值是第二个查询的一半。

为什么写入image! = "", name = ~ "^ k8s_. *"将值减半?

推荐答案

这是因为cAdvisorcgroups获取这些值。cgroups的结构看起来像一棵树,其中每个Pod都有分支,每个Pod中的每个容器都有子cgroups。它看起来是这样的(systemd-cgls):

├─kubepods
│ ├─podb0c98680-4c6d-4788-95ef-0ea8b43121d4
│ │ ├─799e2d3f0afe0e43d8657a245fe1e97edfdcdd00a10f8a57277d310a7ecf4364
│ │ │ └─5479 /bin/node_exporter --path.rootfs=/host --web.listen-address=0.0.0.0:9100
│ │ └─09ce1040f746fb497d5398ad0b2fabed1e4b55cde7fb30202373e26537ac750a
│ │   └─5054 /pause

每个cgroup的资源值是其所有子项的累加。这就是内存使用率翻倍的原因,您只需汇总Pod的总消耗和其中的每个容器。

如果您在普罗米修斯中执行这些查询,您会注意到重复的值:

{pod="cluster-autoscaler-58b9c77456-krl5m"} 59076608
{container="POD",pod="cluster-autoscaler-58b9c77456-krl5m"} 708608
{container="cluster-autoscaler",pod="cluster-autoscaler-58b9c77456-krl5m"}  58368000

第一个是父cgroup。如您所见,它没有container标签。本例中的另外两个是the pause container和实际应用程序。将它们的值结合在一起,将得到父级cgroup

的值
>>> 708608 + 58368000 == 59076608
True

解决方案取决于您的需要,但它在任何情况下都可以修复查询。例如,您可以使用container_name!=""标签过滤器(container_name标签在您的设置中可以有不同的名称)从没有容器名称的聚合指标中删除。

这篇关于为什么容器内存使用量在cAdvisor指标中翻了一番?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆