首页 > 解决方案 > 如何使用 kubectl 总结 Kubernetes 中的所有资源限制和请求?

问题描述

我开始使用Lens,并注意到当节点内的 pod 的限制高于实际容量时,它会给你一些警告。 来自 Lens 的图形可视化,您可以在其中看到一条警告,指出指定的限制高于节点容量

因此,我尝试使用kubectl获取此信息,但我是jsonpath的新手,我只是设法使用以下方式获取原始信息:

kubectl get pods -o=jsonpath='{.items..resources.limits}' -A

这会产生这样的结果:

{"cpu":"200m","memory":"1Gi"} {"cpu":"200m","memory":"1Gi"} {"cpu":"200m","memory":"512Mi"} {"cpu":"500m","memory":"250Mi"} {"memory":"170Mi"} {"memory":"170Mi"} {"cpu":"2","memory":"2Gi"} {"cpu":"2","memory":"2Gi"} {"cpu":"2","memory":"2Gi"} {"cpu":"1","memory":"1Gi"} {"cpu":"1","memory":"1Gi"} {"cpu":"2","memory":"2Gi"} {"cpu":"100m","memory":"128Mi"} {"cpu":"100m","memory":"128Mi"} {"cpu":"500m","memory":"600Mi"} {"cpu":"1","memory":"1Gi"} {"cpu":"100m","memory":"25Mi"} {"cpu":"100m","memory":"25Mi"}

所以,我的问题是,我怎样才能总结所有这些值?这些值是准确的还是我错过了任何其他查询?我已经使用 LimitRange 进行了检查,我得到的值似乎是正确的,结果包括由 LimitRange 配置设置的限制。

标签: kuberneteskubectljsonpath

解决方案


kubectl仅使用命令是不可能的。但是,您可以使用输出kubectl并编写一个基本的 shell 脚本来计算总值。

以下 shell 脚本将输出m所有命名空间中所有 pod 的总 CPU 限制(以单位为单位)。

res=$(kubectl get pods -o=jsonpath='{.items[*]..resources.limits.cpu}' -A)
let tot=0
for i in $res
do
   if [[ $i =~ "m" ]]; then
      i=$(echo $i | sed 's/[^0-9]*//g')
      tot=$(( tot + i ))
   else
      tot=$(( tot + i*1000 ))
   fi
done
echo $tot

您可以扩展上述内容以计算 CPU 请求和内存请求以及限制值。


推荐阅读