red*_*099 3 cgroups kubernetes prometheus cadvisor kubernetes-pod
我测试了这些查询。第一个查询的值是第二个查询的一半:
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_. *"价值会减半?
ane*_*yte 12
那是因为cAdvisor从 中获取这些值cgroups。cgroup 的结构看起来像一棵树,每个 pod 都有分支,每个 pod 中的每个容器都有子 cgroup。其外观如下 ( systemd-cgls):
\xe2\x94\x9c\xe2\x94\x80kubepods\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80podb0c98680-4c6d-4788-95ef-0ea8b43121d4\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80799e2d3f0afe0e43d8657a245fe1e97edfdcdd00a10f8a57277d310a7ecf4364\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x805479 /bin/node_exporter --path.rootfs=/host --web.listen-address=0.0.0.0:9100\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x8009ce1040f746fb497d5398ad0b2fabed1e4b55cde7fb30202373e26537ac750a\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x805054 /pause\nRun Code Online (Sandbox Code Playgroud)\n每个 cgroup 的资源值是其所有子 cgroup 的累积值。这就是内存利用率加倍的方法,您只需总结其中每个容器的 pod 总消耗量。
\n如果您在 Prometheus 中执行这些查询,您会注意到重复的值:
\n{pod="cluster-autoscaler-58b9c77456-krl5m"} 59076608\n{container="POD",pod="cluster-autoscaler-58b9c77456-krl5m"} 708608\n{container="cluster-autoscaler",pod="cluster-autoscaler-58b9c77456-krl5m"} 58368000\nRun Code Online (Sandbox Code Playgroud)\n第一个是父 cgroup。如您所见,它没有container标签。本示例中的另外两个是暂停容器和实际应用程序。结合它们的值,您将得到父 cgroup 的值:
\xe2\x94\x9c\xe2\x94\x80kubepods\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80podb0c98680-4c6d-4788-95ef-0ea8b43121d4\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80799e2d3f0afe0e43d8657a245fe1e97edfdcdd00a10f8a57277d310a7ecf4364\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x805479 /bin/node_exporter --path.rootfs=/host --web.listen-address=0.0.0.0:9100\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x8009ce1040f746fb497d5398ad0b2fabed1e4b55cde7fb30202373e26537ac750a\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x805054 /pause\nRun Code Online (Sandbox Code Playgroud)\n有多种方法可以解决该问题。例如,您可以使用container!=""标签过滤器排除没有容器名称的指标。
解决此问题的另一种(更困难)方法是删除(prometheus.yml)中的累积指标metric_relabel_configs。即,您可以编写一个重新标记规则,该规则将删除没有容器名称的指标。小心这一点,您可能会意外删除所有非 cadvisor 指标。
| 归档时间: |
|
| 查看次数: |
6068 次 |
| 最近记录: |