K8s中获取CPU和内存使用信息的方法及最高效实现方案咨询
Kubernetes 原生CPU/内存使用指标采集方案汇总
一、所有基于Kube/Container原语的采集方法
kubectl top命令行工具
依赖官方标准扩展组件metrics-server,底层调用kubelet的/stats/summaryAPI获取数据,支持节点、Pod、容器三个维度的CPU/内存实时指标,CPU单位为m核,内存单位为MiB/GiB
常用命令:kubectl top nodes、kubectl top pods <pod-name> --containers- 直接调用Kubelet
/stats/summaryAPI
无需额外部署组件,属于kubelet原生暴露的接口,返回结构化JSON数据,包含节点所有Pod、容器的实时使用量、工作集大小、CPU使用率累计值等核心指标,是所有上层采集工具的核心数据源
调用方式:节点本地可直接请求curl http://127.0.0.1:10255/stats/summary,集群内可通过APIServer代理访问 - 调用Kubelet
/metrics/cadvisor接口
基于kubelet内置的cAdvisor原生暴露的Prometheus格式指标,包含更细粒度的资源统计维度,除实时使用量外,还支持CPU throttling、内存缓存、OOM事件等扩展指标,适合长期监控采集 - 直接读取cgroup文件系统
属于容器底层原语,容器运行时会把CPU/内存统计数据写入节点的cgroup路径下(cgroup v1路径一般为/sys/fs/cgroup/cpu,cpuacct/kubepods/、/sys/fs/cgroup/memory/kubepods/,cgroup v2统一路径为/sys/fs/cgroup/kubepods/),无需调用任何API,直接读取文件即可获取原始统计值
可采集核心指标包括:- CPU:用户态/内核态使用时间、调度周期、throttled时间
- 内存:总使用量、工作集、活跃/不活跃文件页、OOM kill计数
二、最高效实现方案选型
若为调研阶段临时采样,优先选择直接调用Kubelet
/stats/summaryAPI
优势:无额外组件依赖、返回结果结构化、数据维度刚好覆盖CPU/内存核心使用指标,单节点单次请求耗时一般在10ms以内,比kubectl top少了APIServer转发和格式转换的开销
若为长期高频采集场景,优先选择直接读取cgroup文件系统
优势:完全无网络IO开销,读取文件耗时在微秒级,是所有方案中性能最高的,且完全基于容器运行时原生原语,不存在组件依赖带来的兼容性问题
内容的提问来源于stack exchange,提问作者Dev
相关产品推荐
相关产品推荐

