gpt4 book ai didi

kubernetes - 为什么容器内存使用量在 cAdvisor 指标中翻倍?

转载 作者:行者123 更新时间:2023-12-05 09:30:51 30 4
gpt4 key购买 nike

我测试了这些查询。第一个查询是第二个查询值的一半:

sum(container_memory_working_set_bytes{image!="",name=~"^k8s_.*",pod=~"$pod"}) 由 (pod)

通过 (pod) 求和 (container_memory_working_set_bytes{pod=~"$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 消耗量。

如果您在 Prometheus 中执行这些查询,您会注意到重复的值:

{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!="" 标签过滤器排除没有容器名称的指标。

解决此问题的另一种(更困难的)方法是删除 metric_relabel_configs (prometheus.yml) 中的累积指标。 IE。您可以编写一个重新标记规则,该规则将删除没有容器名称的指标。 小心这个,您可能会不小心删除所有非 cadvisor 指标。

关于kubernetes - 为什么容器内存使用量在 cAdvisor 指标中翻倍?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69281327/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com