如何解决Kubernetes主机syslog中Kubelet频繁出现的CPU统计告警?
修复Kubelet警告:Could not get instant cpu stats: different number of cpus
这个警告我在维护K8s集群的时候碰到过好几次,本质是kubelet采集即时CPU统计数据时,发现两次读取到的CPU核心数不一致导致的。下面是我亲测有效的几个修复方案,按优先级来:
1. 重启容器运行时和Kubelet
很多时候是容器运行时(比如containerd、docker)的状态异常,导致CPU统计数据同步出问题。
- 先检查容器运行时状态:
systemctl status containerd(如果用的是docker就换成docker),看看有没有异常日志 - 重启容器运行时:
systemctl restart containerd,接着重启kubelet:systemctl restart kubelet - 等待几分钟后,观察syslog里的警告是否消失
2. 检查节点CPU状态(动态调整/热插拔导致的不一致)
如果是云服务器或者支持CPU热插拔的物理机,可能出现CPU离线再上线的情况,导致内核和kubelet识别的CPU数不一致:
- 查看当前节点的CPU核心数:
lscpu,记下总核心数 - 查看内核识别的在线CPU:
cat /sys/devices/system/cpu/online,正常应该是连续的范围(比如0-7表示8核全部在线) - 如果有CPU离线(比如输出是
0-5,7,说明cpu6离线),可以尝试重新启用:echo 1 > /sys/devices/system/cpu/cpu6/online,之后重启kubelet - 要是云服务器的话,也可以检查是否开启了CPU动态调整功能,有的话可以暂时关闭或者调整配置
3. 升级Kubelet到稳定版本
某些特定版本的kubelet存在CPU统计逻辑的bug,比如早期的v1.24、v1.25版本有用户反馈过类似问题:
- 先确认当前kubelet版本:
kubelet --version - 升级到对应分支的最新稳定版(比如v1.27.x的最新补丁版),注意要和集群的apiserver、controller-manager等组件版本保持一致
- 升级完成后重启kubelet,观察警告是否消失
4. 检查Kubelet的cAdvisor配置
kubelet依赖cAdvisor采集资源数据,自定义的cAdvisor参数可能导致统计异常:
- 查看kubelet的启动参数:
ps aux | grep kubelet,或者检查配置文件/var/lib/kubelet/config.yaml - 如果有自定义的
--cadvisor-port、--disable-cadvisor之类的参数,尝试去掉不必要的配置,然后重启kubelet
如果以上方法都没解决,可以收集更详细的日志排查:
- 查看kubelet的实时日志:
journalctl -u kubelet -f,看看有没有更具体的错误上下文 - 检查节点内核日志:
dmesg | grep cpu,排查是否有CPU硬件或驱动层面的异常
内容的提问来源于stack exchange,提问作者sfgroups
相关产品推荐
相关产品推荐

