When we work with Kubernetes, to check the resource requests and limits we will use kubectl describe
, and to check the utilization of the resources we will use kubectl top
. Today we will talk about the kube-capacity CLI that combines the two CLI above and provides an overview of the resource requests, limits, and utilization.
For example, the illustration.
Installation
On macOS, this project can be installed with Homebrew
:
1 2 3 | brew tap robscott/tap brew <span class="token function">install</span> robscott/tap/kube-capacity |
On Linux, we go to the releases page and select the appropriate Linux Package, for example with me:
1 2 | <span class="token function">curl</span> -fsSLO https://github.com/robscott/kube-capacity/releases/download/v0.7.1/kube-capacity_0.7.1_Linux_x86_64.tar.gz |
1 2 | tar zxvf kube-capacity_0.7.1_Linux_x86_64.tar.gz |
Move to one of the directories located in $PATH
:
1 2 | sudo mv kube-capacity /usr/local/bin/ |
Check if we have installed it successfully:
1 2 | kube-capacity -h |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | ... Flags: -a, --available includes quantity available instead of percentage used -c, --containers includes containers in output --context string context to use for Kubernetes config -h, --help help for kube-capacity --kubeconfig string kubeconfig file to use for Kubernetes config -n, --namespace string only include pods from this namespace --namespace-labels string labels to filter namespaces with --node-labels string labels to filter nodes with -o, --output string output format for information (supports: [table json yaml]) (default "table") --pod-count includes pod count per node in output -l, --pod-labels string labels to filter pods with -p, --pods includes pods in output --sort string attribute to sort results be (supports: [cpu.util cpu.request cpu.limit mem.util mem.request mem.limit name]) (default "name") -u, --util include |
Usage
By default, kube-capacity will output a list of nodes with the total CPU and Memory resource requests and limits for all the pods running on them.
Default
For clusters with more than one node, the first line will also include cluster wide totals.
1 2 | kube-capacity |
1 2 3 4 5 | NODE CPU REQUESTS CPU LIMITS MEMORY REQUESTS MEMORY LIMITS * 560m <span class="token punctuation">(</span><span class="token number">28</span>%<span class="token punctuation">)</span> 130m <span class="token punctuation">(</span><span class="token number">7</span>%<span class="token punctuation">)</span> 572Mi <span class="token punctuation">(</span><span class="token number">9</span>%<span class="token punctuation">)</span> 770Mi <span class="token punctuation">(</span><span class="token number">13</span>%<span class="token punctuation">)</span> isito-node-1 220m <span class="token punctuation">(</span><span class="token number">22</span>%<span class="token punctuation">)</span> 10m <span class="token punctuation">(</span><span class="token number">1</span>%<span class="token punctuation">)</span> 192Mi <span class="token punctuation">(</span><span class="token number">6</span>%<span class="token punctuation">)</span> 360Mi <span class="token punctuation">(</span><span class="token number">12</span>%<span class="token punctuation">)</span> isito-node-2 340m <span class="token punctuation">(</span><span class="token number">34</span>%<span class="token punctuation">)</span> 120m <span class="token punctuation">(</span><span class="token number">12</span>%<span class="token punctuation">)</span> 380Mi <span class="token punctuation">(</span><span class="token number">13</span>%<span class="token punctuation">)</span> 410Mi <span class="token punctuation">(</span><span class="token number">14</span>%<span class="token punctuation">)</span> |
Including Pods
For more detailed output about the requests and limits of each Pod, add the flags --pods
or -p
to kube-capacity
.
1 2 | kube-capacity -p |
1 2 3 4 5 6 7 8 9 10 11 | NODE NAMESPACE POD CPU REQUESTS CPU LIMITS MEMORY REQUESTS MEMORY LIMITS * * * 560m <span class="token punctuation">(</span><span class="token number">28</span>%<span class="token punctuation">)</span> 780m <span class="token punctuation">(</span><span class="token number">38</span>%<span class="token punctuation">)</span> 572Mi <span class="token punctuation">(</span><span class="token number">9</span>%<span class="token punctuation">)</span> 770Mi <span class="token punctuation">(</span><span class="token number">13</span>%<span class="token punctuation">)</span> isito-node-1 * * 220m <span class="token punctuation">(</span><span class="token number">22</span>%<span class="token punctuation">)</span> 320m <span class="token punctuation">(</span><span class="token number">32</span>%<span class="token punctuation">)</span> 192Mi <span class="token punctuation">(</span><span class="token number">6</span>%<span class="token punctuation">)</span> 360Mi <span class="token punctuation">(</span><span class="token number">12</span>%<span class="token punctuation">)</span> isito-node-1 istio-system istio-egressgateway-lwc6z 100m <span class="token punctuation">(</span><span class="token number">10</span>%<span class="token punctuation">)</span> 200m <span class="token punctuation">(</span><span class="token number">20</span>%<span class="token punctuation">)</span> 100Mi <span class="token punctuation">(</span><span class="token number">3</span>%<span class="token punctuation">)</span> 200Mi <span class="token punctuation">(</span><span class="token number">7</span>%<span class="token punctuation">)</span> isito-node-1 istio-system istio-ingressgateway-7b5bcb98f8 120m <span class="token punctuation">(</span><span class="token number">12</span>%<span class="token punctuation">)</span> 120m <span class="token punctuation">(</span><span class="token number">12</span>%<span class="token punctuation">)</span> 92Mi <span class="token punctuation">(</span><span class="token number">3</span>%<span class="token punctuation">)</span> 160Mi <span class="token punctuation">(</span><span class="token number">5</span>%<span class="token punctuation">)</span> isito-node-2 * * 340m <span class="token punctuation">(</span><span class="token number">34</span>%<span class="token punctuation">)</span> 460m <span class="token punctuation">(</span><span class="token number">46</span>%<span class="token punctuation">)</span> 380Mi <span class="token punctuation">(</span><span class="token number">13</span>%<span class="token punctuation">)</span> 410Mi <span class="token punctuation">(</span><span class="token number">14</span>%<span class="token punctuation">)</span> isito-node-2 kube-system kube-proxy-3ki7 200m <span class="token punctuation">(</span><span class="token number">20</span>%<span class="token punctuation">)</span> 280m <span class="token punctuation">(</span><span class="token number">28</span>%<span class="token punctuation">)</span> 210Mi <span class="token punctuation">(</span><span class="token number">7</span>%<span class="token punctuation">)</span> 210Mi <span class="token punctuation">(</span><span class="token number">7</span>%<span class="token punctuation">)</span> isito-node-2 tiller tiller-deploy 140m <span class="token punctuation">(</span><span class="token number">14</span>%<span class="token punctuation">)</span> 180m <span class="token punctuation">(</span><span class="token number">18</span>%<span class="token punctuation">)</span> 170Mi <span class="token punctuation">(</span><span class="token number">5</span>%<span class="token punctuation">)</span> 200Mi <span class="token punctuation">(</span><span class="token number">7</span>%<span class="token punctuation">)</span> |
Filtering By Namespace
To list by namespace, we use the flags --namespace
or -n
1 2 | kube-capacity -p -n istio-system |
1 2 3 4 5 | NODE NAMESPACE POD CPU REQUESTS CPU LIMITS MEMORY REQUESTS MEMORY LIMITS isito-node-1 * * 220m <span class="token punctuation">(</span><span class="token number">22</span>%<span class="token punctuation">)</span> 320m <span class="token punctuation">(</span><span class="token number">32</span>%<span class="token punctuation">)</span> 192Mi <span class="token punctuation">(</span><span class="token number">6</span>%<span class="token punctuation">)</span> 360Mi <span class="token punctuation">(</span><span class="token number">12</span>%<span class="token punctuation">)</span> isito-node-1 istio-system istio-egressgateway-lwc6z 100m <span class="token punctuation">(</span><span class="token number">10</span>%<span class="token punctuation">)</span> 200m <span class="token punctuation">(</span><span class="token number">20</span>%<span class="token punctuation">)</span> 100Mi <span class="token punctuation">(</span><span class="token number">3</span>%<span class="token punctuation">)</span> 200Mi <span class="token punctuation">(</span><span class="token number">7</span>%<span class="token punctuation">)</span> isito-node-1 istio-system istio-ingressgateway-7b5bcb98f8 120m <span class="token punctuation">(</span><span class="token number">12</span>%<span class="token punctuation">)</span> 120m <span class="token punctuation">(</span><span class="token number">12</span>%<span class="token punctuation">)</span> 92Mi <span class="token punctuation">(</span><span class="token number">3</span>%<span class="token punctuation">)</span> 160Mi <span class="token punctuation">(</span><span class="token number">5</span>%<span class="token punctuation">)</span> |
Including Utilization
In case we need to check the utilization of the resources, we use the flags --util
or -u
.
Note: It’s important to note that this output relies on metrics-server functioning correctly in your cluster.
1 2 | kube-capacity --util |
1 2 3 4 5 | NODE CPU REQUESTS CPU LIMITS CPU UTIL MEMORY REQUESTS MEMORY LIMITS MEMORY UTIL * 560m <span class="token punctuation">(</span><span class="token number">28</span>%<span class="token punctuation">)</span> 130m <span class="token punctuation">(</span><span class="token number">7</span>%<span class="token punctuation">)</span> 40m <span class="token punctuation">(</span><span class="token number">2</span>%<span class="token punctuation">)</span> 572Mi <span class="token punctuation">(</span><span class="token number">9</span>%<span class="token punctuation">)</span> 770Mi <span class="token punctuation">(</span><span class="token number">13</span>%<span class="token punctuation">)</span> 470Mi <span class="token punctuation">(</span><span class="token number">8</span>%<span class="token punctuation">)</span> isito-node-1 220m <span class="token punctuation">(</span><span class="token number">22</span>%<span class="token punctuation">)</span> 10m <span class="token punctuation">(</span><span class="token number">1</span>%<span class="token punctuation">)</span> 10m <span class="token punctuation">(</span><span class="token number">1</span>%<span class="token punctuation">)</span> 192Mi <span class="token punctuation">(</span><span class="token number">6</span>%<span class="token punctuation">)</span> 360Mi <span class="token punctuation">(</span><span class="token number">12</span>%<span class="token punctuation">)</span> 210Mi <span class="token punctuation">(</span><span class="token number">7</span>%<span class="token punctuation">)</span> isito-node-2 340m <span class="token punctuation">(</span><span class="token number">34</span>%<span class="token punctuation">)</span> 120m <span class="token punctuation">(</span><span class="token number">12</span>%<span class="token punctuation">)</span> 30m <span class="token punctuation">(</span><span class="token number">3</span>%<span class="token punctuation">)</span> 380Mi <span class="token punctuation">(</span><span class="token number">13</span>%<span class="token punctuation">)</span> 410Mi <span class="token punctuation">(</span><span class="token number">14</span>%<span class="token punctuation">)</span> 260Mi <span class="token punctuation">(</span><span class="token number">9</span>%<span class="token punctuation">)</span> |
Sorting
To highlight the nodes, pods, and containers with the highest metrics, you can sort by a variety of columns:
1 2 | kube-capacity --util --sort cpu.util |
1 2 3 4 5 | NODE CPU REQUESTS CPU LIMITS CPU UTIL MEMORY REQUESTS MEMORY LIMITS MEMORY UTIL * 560m <span class="token punctuation">(</span><span class="token number">28</span>%<span class="token punctuation">)</span> 130m <span class="token punctuation">(</span><span class="token number">7</span>%<span class="token punctuation">)</span> 40m <span class="token punctuation">(</span><span class="token number">2</span>%<span class="token punctuation">)</span> 572Mi <span class="token punctuation">(</span><span class="token number">9</span>%<span class="token punctuation">)</span> 770Mi <span class="token punctuation">(</span><span class="token number">13</span>%<span class="token punctuation">)</span> 470Mi <span class="token punctuation">(</span><span class="token number">8</span>%<span class="token punctuation">)</span> isito-node-2 340m <span class="token punctuation">(</span><span class="token number">34</span>%<span class="token punctuation">)</span> 120m <span class="token punctuation">(</span><span class="token number">12</span>%<span class="token punctuation">)</span> 30m <span class="token punctuation">(</span><span class="token number">3</span>%<span class="token punctuation">)</span> 380Mi <span class="token punctuation">(</span><span class="token number">13</span>%<span class="token punctuation">)</span> 410Mi <span class="token punctuation">(</span><span class="token number">14</span>%<span class="token punctuation">)</span> 260Mi <span class="token punctuation">(</span><span class="token number">9</span>%<span class="token punctuation">)</span> isito-node-1 220m <span class="token punctuation">(</span><span class="token number">22</span>%<span class="token punctuation">)</span> 10m <span class="token punctuation">(</span><span class="token number">1</span>%<span class="token punctuation">)</span> 10m <span class="token punctuation">(</span><span class="token number">1</span>%<span class="token punctuation">)</span> 192Mi <span class="token punctuation">(</span><span class="token number">6</span>%<span class="token punctuation">)</span> 360Mi <span class="token punctuation">(</span><span class="token number">12</span>%<span class="token punctuation">)</span> 210Mi <span class="token punctuation">(</span><span class="token number">7</span>%<span class="token punctuation">)</span> |
Conclusion
This is a helpful tool when we need quickly check resource requests and limits.