背景介绍
在Kubernetes
下的监控组件需要获取容器的监控指标数据,并且kubelet
已经内置了cadvisor
,因此我们直接从当前节点的kubelet
拉取容器监控指标数据。但是却遇到偶发的丢失container*
相关指标的情况,例如container_cpu_usage_seconds_total
、container_spec_cpu_quota
、container_spec_cpu_period
等重要的容器指标数据。
问题排查
一开始以为是网络访问的问题,直到给程序增加了调试信息,发现确实是kubelet
返回的指标数据就已经丢失了相关指标,因此再去查看节点上的kubeket
日志,通过以下命令:
发下以下错误:
通过该错误去检索到社区也反馈过类似的issue
:
查看当前集群的kubelet
版本是:v1.22.0
。然后查看了一下kubernetes
的源码,发现问题出现在这两个地方:只要有个别container的指标获取不了数据,所有的containers指标数据都不会返回了。
问题修复
这个问题不应该只有我遇到了,经过仔细查看issue
的讨论,发现该issue
在2021年5月10号就已经修复了,对应的是cadvisor v0.43.0
: https://github.com/google/cadvisor/commit/655773dc5ee9cbf48fe3f629f4e724c75dcd569c 对应已修复的最低kubernetes
版本为 v1.23.0
:
因此,我们升级版本即可解决。但注意升级版本时需要上下游对齐,评估升级风险。