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

问题描述 投票:0回答:5

我开始使用Lens,并注意到当节点内的 Pod 的限制高于实际容量时,它会向您发出一些警告。

所以我尝试使用 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 配置设置的限制。

kubernetes kubectl jsonpath
5个回答
23
投票

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

kubectl resource-capacity --sort cpu.limit --util --pods

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


9
投票

仅使用

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

以下 shell 脚本将输出所有命名空间中所有 pod 的总 CPU 限制(以

m
为单位)。

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 请求以及内存请求和限制值。


2
投票

尝试这个命令:

kubectl get pods --namespace <your-namespace> --no-headers=true \
  -o custom-columns='NAME:.metadata.name, CPU_REQUEST:.spec.containers[*].resources.requests.cpu, MEMORY_REQUEST:.spec.containers[*].resources.requests.memory' \
  | awk 'BEGIN {cpu=0; memory=0} {cpu+=$2; memory+=$3} END {print "Total CPU Requests: " cpu "\nTotal Memory Requests: " memory}'

1
投票

不幸的是,仅使用

kubectl
无法做到这一点。

但是,您可以考虑使用:

  1. JSON
    $sum()
    函数

返回数字数组的算术和。

  1. 指标服务器、Grafana 和 Prometheus:

我们将逐步完成监控资源量(CPU 或内存)Kubernetes Pod 正在使用。因此我们将看看:

  • CPU 请求/限制/实际使用/限制

  • 内存请求/限制/实际使用/终止

或者监控 Kubernetes 节点 CPU 和内存请求/限制

节点 CPU 请求/限制是所有节点的 CPU 请求/限制的总和 在该节点上运行的 Pod。类似地,节点内存请求/限制是 所有 pod 的内存请求/限制总和

  1. kube-state-metrics

kube-state-metrics 是一个监听 Kubernetes 的简单服务 API 服务器并生成有关对象状态的指标。 (看 下面的指标部分中的示例。)它并不关注 各个 Kubernetes 组件的健康状况,而是取决于 内部各种对象的健康状况,例如部署、节点和 豆荚。


0
投票

您可以使用常用工具

jq
来处理
json
提供的
kubectl
输出。至少在简单情况下,
cpu.request
的每个值都具有相同的单位。

kubectl get pods -o=jsonpath-as-json='{.items..containers..resources.requests}' -A | jq "([.[].cpu[0:-1] | tonumber] | add) / 1000 / 4"

假设每个

cpu.request
的单位为毫核,则此命令将输出当前工作负载在完美打包 Pod 时所需的核心数量。

对于单位不匹配的情况,这并不容易,需要更多的努力,此时编写 bash/pwsh/python 脚本来进行处理可能是值得的。

© www.soinside.com 2019 - 2024. All rights reserved.