Inspecting Resources

(this post is part of the material I cover in my devops course)

kubernetes cluster metrics

  • When you run a pod, some load is laid on the node that runs it.
  • The pod consume some of the memory and cpu power of that node.
  • We'll use a tool called metrics-server to inspect resources.
  • For minikube, the resource-server is available as an addon.
    Here's how to install it (my profile is called five):
 1$> kubectl top pods
 2error: Metrics API not available
 3$> minikube addons -p five enable metrics-server
 4💡  metrics-server is an addon maintained by Kubernetes. For any concerns contact minikube on GitHub.
 5You can view the list of minikube maintainers at: https://github.com/kubernetes/minikube/blob/master/OWNERS
 6     Using image registry.k8s.io/metrics-server/metrics-server:v0.7.1
 7🌟  The 'metrics-server' addon is enabled
 8$> kubectl top pods
 9error: Metrics API not available
10
11(**STILL GETTING ERRORS BECAUSE IT IS NOT READY**)
12
13$> kubectl top pods
14NAME         CPU(cores)   MEMORY(bytes)   
15envvar-pod   0m           0Mi             
16volume-pod   0m           0Mi             
17$> 

Memory Size Units

  • Memory is generally measured in bytes
  • There are Decimal and Binary systems for memory multiple-byte unit.
  • For example:
    • 103 = 1000 bytes is called kilobyte (short kB)
    • 210 = 1024 bytes is called kibibyte (short KiB)
  • See a list of these units here

CPU load Units

  • CPU is measure in CPU resource units
  • In Kubernetes, 1 CPU unit is equivalent to 1 physical cpu core, or 1 virtual core, depending on whether the node is a physical host or a virtual machine running inside a physical machine
  • Fractional units (so fractions of 1 CPU) are allowed.
  • For example, 100m is the same as 0.1, which is 1/10 of a single cpu
  • Another example: 0.5m is 5/1000 or 1/2 of a mili-cpu

The top command

  • Here's an example:
    We are creating a pod, exec into it, them run a script to create some load in this pod.
    It may take 2-3 minutes until you'll see this reflected in the metrics:
 1$> 
 2$> kubectl apply -f pod.yaml 
 3pod/my-pod created
 4$> kubectl get pods
 5NAME     READY   STATUS    RESTARTS   AGE
 6my-pod   1/1     Running   0          10s
 7$> kubectl exec -it my-pod -- sh
 8/ # 
 9/ # for i in 1 2 3 4; do while : ; do : ; done & done
10/ # 
11/ # exit
12$> 
13$> 
14$> kubectl top pods
15NAME     CPU(cores)   MEMORY(bytes)   
16my-pod   1m           0Mi             
17$> kubectl top pods
18NAME     CPU(cores)   MEMORY(bytes)   
19my-pod   1m           0Mi             
20$> 
21$> kubectl top pods
22NAME     CPU(cores)   MEMORY(bytes)   
23my-pod   3582m        1Mi             
24$> 
25$> kubectl top pods
26NAME     CPU(cores)   MEMORY(bytes)   
27my-pod   3978m        1Mi             
28$> kubectl top pods
29NAME     CPU(cores)   MEMORY(bytes)   
30my-pod   3978m        1Mi             
31$>