kuberneteskubectljsonpath

How can I summarize all the resource limits and requests in Kubernetes with kubectl?


I started using Lens and noticed that it gives you some warnings when the pods inside the nodes have limits higher than the actual capacity. A graphic visualization from Lens where you can see a warning telling that the specified limits are higher than the node capacity

So I tried to get this information with kubectl but I'm new to jsonpath and I just managed to get the raw info using something like this:

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

That produces something like this:

{"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"}

So, my questions are, how can I sum all these values? Will these values be accurate or am I missing any other query? I've checked using LimitRange and the values I got seem to be correct, the results include the limits set by the LimitRange configuration.


Solution

  • It is not possible with just kubectl commands. However, you can use the output of kubectl and write a basic shell script to compute the total values.

    The following shell script will output total CPU limits(in m units) of all the pods in all namespaces.

    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
    

    You can extend the above to compute the CPU requests and the memory requests and limits values as well.