Kubernetes 1.27.2 kubelet日志报错‘Failed updating cpu usage nano core’求助
Kubelet日志持续报错:"Failed updating cpu usage nano core"(zero or negative interval)
环境版本信息
- CentOS Linux release 7.9.2009 (Core)
- GO version go1.20.4
- Docker-CE 24.0.2
- cri-dockerd 0.3.2
- Containerd Containerd.io 1.6.21
- Kubernetes组件版本:
- kube-apiserver:v1.27.2
- kube-controller-manager:v1.27.2
- kube-scheduler:v1.27.2
- kube-proxy:v1.27.2
- pause:3.9/pause:3.6(pause:3.6是kubectl init流程所需,原因未知)
- etcd:3.5.7-0
- coredns:v1.10.1
问题现象
master节点kubelet的journalctl日志持续输出以下错误:
Jun 06 09:33:00 controller-master kubelet[945]: E0606 09:33:00.520295 945 cri_stats_provider.go:757] "Failed updating cpu usage nano core" err="zero or negative interval (1686015180512008450 - 1686041401143535060)" Jun 06 09:33:00 controller-master kubelet[945]: E0606 09:33:00.520325 945 cri_stats_provider.go:757] "Failed updating cpu usage nano core" err="zero or negative interval (1686015180513632138 - 1686041401144229382)" Jun 06 09:33:00 controller-master kubelet[945]: E0606 09:33:00.520355 945 cri_stats_provider.go:757] "Failed updating cpu usage nano core" err="zero or negative interval (1686015180515665184 - 1686041401135390384)" Jun 06 09:33:00 controller-master kubelet[945]: E0606 09:33:00.520386 945 cri_stats_provider.go:757] "Failed updating cpu usage nano core" err="zero or negative interval (1686015180517282786 - 1686041401133856169)"
错误核心为zero or negative interval,表明kubelet统计CPU使用率时,两次采样的时间戳出现倒序(后一次采样时间早于前一次)。
解决方案
1. 检查并修复节点时间同步
时间戳倒序最常见原因是节点时间回退或不同步。执行以下命令检查时间同步状态:
timedatectl status
确保NTP服务处于active状态,且节点时间与集群内其他节点一致。若时间不同步,重启时间同步服务:
systemctl restart chronyd # 若使用ntpd则执行: # systemctl restart ntpd
2. 升级cri-dockerd至稳定版本
cri-dockerd 0.3.2存在时间采样相关的已知bug,升级至0.3.4及以上版本可修复该问题:
- 下载对应版本二进制文件:
wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.4/cri-dockerd-0.3.4.amd64.tgz
- 解压并替换现有二进制:
tar xvf cri-dockerd-0.3.4.amd64.tgz mv cri-dockerd /usr/bin/
- 重启相关服务:
systemctl restart cri-dockerd systemctl restart kubelet
3. 排查containerd与cri-dockerd的冲突
同时运行containerd和cri-dockerd可能引发兼容性问题。若仅使用Docker作为容器运行时,可停止containerd服务:
systemctl stop containerd systemctl disable containerd
之后重启kubelet服务。
4. 验证kubelet统计配置
检查kubelet配置文件(如/var/lib/kubelet/config.yaml),确认stats-collection-interval参数设置合理(默认10秒),避免因采样间隔过短导致时间戳冲突。
5. 临时缓解:重启kubelet服务
若需快速临时消除错误,可重启kubelet重置统计状态:
systemctl restart kubelet
内容的提问来源于stack exchange,提问作者Tony C
相关产品推荐
相关产品推荐

