背景介绍

Kubernetes下的监控组件需要获取容器的监控指标数据,并且kubelet已经内置了cadvisor,因此我们直接从当前节点kubelet拉取容器监控指标数据。但是却遇到偶发的丢失container*相关指标的情况,例如container_cpu_usage_seconds_totalcontainer_spec_cpu_quotacontainer_spec_cpu_period等重要的容器指标数据。

问题排查

一开始以为是网络访问的问题,直到给程序增加了调试信息,发现确实是kubelet返回的指标数据就已经丢失了相关指标,因此再去查看节点上的kubeket日志,通过以下命令:

journalctl -u kubelet

发下以下错误:

通过该错误去检索到社区也反馈过类似的issue

查看当前集群的kubelet版本是:v1.22.0。然后查看了一下kubernetes的源码,发现问题出现在这两个地方:只要有个别container的指标获取不了数据,所有的containers指标数据都不会返回了。

问题修复

这个问题不应该只有我遇到了,经过仔细查看issue的讨论,发现该issue2021年5月10号就已经修复了,对应的是cadvisor v0.43.0: https://github.com/google/cadvisor/commit/655773dc5ee9cbf48fe3f629f4e724c75dcd569c 对应已修复的最低kubernetes版本为 v1.23.0


因此,我们升级版本即可解决。但注意升级版本时需要上下游对齐,评估升级风险。












Content Menu

  • No labels