k8s上worker某节点上cpu占用相对其他都很高,如何排查?

1.分析是否pod占用cpu过高

1.1通过监控确定是否是pod cpu占用过高

//pod按照cpu使用情况降序
kubectl top pods --all-namespaces --sort-by=cpu

//检查pod是否存缺失资源限制(resources/requests/limits)
kubectl describe pod <pod-name> -n <namespace>

1.2查看对应pod有没有resouece cpu/memory limit

- 没有限制,则为了系统稳定性添加限制,进一步分析pod内进程为什么导致cpu过高

关键是找到启动日志,分析是是错误导致的还是系统内程序逻辑不合理导致的cpu占用过高

  • 容器内进程占用了较多的CPU,通过对应工具分析
    • pprof go
    • jstack java
    • pref linux

2.分析是否系统进程导致的还是kubelet进程导致的

top观察进程cpu占用情况

top
    -C  //根据cpu使用情况排序
    观察wa是否存在io等待,存在说明磁盘存在性能问题。(iostat -x 1)

检查服务日志及开机自检日志

journalctl -u kubelet -f -n 100 --no-pager
journalctl -u docker -f -n 100 --no-pager
dmesg