如何使用 kubectl 汇总 Kubernetes 中的所有资源限制和请求?

jms*_*era 15 jsonpath kubernetes kubectl

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

所以我尝试使用kubectl获取此信息,但我是jsonpath的新手,我只是设法使用如下内容获取原始信息:

kubectl get pods -o=jsonpath='{.items..resources.limits}' -A
Run Code Online (Sandbox Code Playgroud)

这会产生这样的结果:

{"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"}
Run Code Online (Sandbox Code Playgroud)

所以,我的问题是,如何总结所有这些值?这些值是否准确,或者我是否遗漏了任何其他查询?我已经使用 LimitRange 检查过,得到的值似乎是正确的,结果包括 LimitRange 配置设置的限制。

guo*_*iao 22

您可以使用 kubectl 插件来列出/排序具有 cpu 限制的 pod:

kubectl resource-capacity --sort cpu.limit --util --pods
Run Code Online (Sandbox Code Playgroud)

https://github.com/robscott/kube-capacity


Kri*_*sia 9

仅靠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
Run Code Online (Sandbox Code Playgroud)

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