You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Bash命令汇总Kubernetes中top pods的CPU和内存数值?

解决k top pods -A输出的CPU/内存求和问题

当然可以用Bash命令完成求和,核心是处理表头行和数值单位两个问题,你之前的命令无效主要有三个原因:

  • 没跳过表头行,表头字符串转数值为0
  • 列位置选错了(CPU/内存不是第1列)
  • 带单位的字符串直接累加会被awk识别为0

先看典型输出结构

k top pods -A的输出大概是这样:

NAMESPACE     NAME                          CPU(cores)   MEMORY(bytes)
kube-system   coredns-7f6cbbb7b8-2x7nr      1m           12Mi
kube-system   etcd-k8s-master               20m          300Mi
default       my-app-5f7d6c89d4-9zqzk       5m           80Mi

CPU在第3列(单位多为m,毫核),内存在第4列(单位可能是Ki/Mi/Gi)。


1. CPU求和(统一为毫核)

跳过表头,去掉m单位后累加:

k top pods -A | awk 'NR>1 {sub(/m$/,"",$3); total+=$3} END {print total "m (" total/1000 " cores)"}'
  • NR>1:跳过第一行表头
  • sub(/m$/,"",$3):移除第3列末尾的m单位
  • 最后输出总毫核数,同时换算成核心数方便阅读

2. 内存求和(统一转换为Mi)

内存单位不统一,需要先转换为同一单位再累加:

k top pods -A | awk 'NR>1 {
    val = $4
    if (val ~ /Gi$/) { sub(/Gi$/,"",val); total += val*1024 }
    else if (val ~ /Mi$/) { sub(/Mi$/,"",val); total += val }
    else if (val ~ /Ki$/) { sub(/Ki$/,"",val); total += val/1024 }
    else { total += val }
} END { printf "%.2f Mi\n", total }'
  • 自动识别Gi/Mi/Ki单位,统一转为Mi计算
  • 用printf保留两位小数,输出更整洁

为什么你之前的命令没输出?

你的awk '{s+=$1}END{print s}'命令:

  • 第1列是NAMESPACE,全是字符串,awk会把字符串转为0累加,最终结果是0,可能你误以为无输出
  • 就算跳过表头,第1列还是命名空间,不是CPU/内存数值,自然得不到正确结果

内容的提问来源于stack exchange,提问作者Ann Flus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 14:10:09