CPU/Memory requests and limits per node

8/1/2018

kubectl describe nodes gives information on the requests and limits for resources such as CPU and memory. However, the api endpoint api/v1/nodes doesn't provide this information.

Alternatively, I could also hit the api/v1/pods endpoint to get this information per pod which I can accumulate across nodes. But is there already a kubernetes API endpoint which provides the information pertaining to cpu/memory requests and limits per node?

-- not_again_stackoverflow
kubernetes
kubernetes-apiserver

1 Answer

8/1/2018

From what I've found in documentation, the endpoint responsible for that is the Kubernetes API Server.

CPU and memory are each a resource type. A resource type has a base unit. CPU is specified in units of cores, and memory is specified in units of bytes.

CPU and memory are collectively referred to as compute resources, or just resources. Compute resources are measurable quantities that can be requested, allocated, and consumed. They are distinct from API resources. API resources, such as Pods and Services are objects that can be read and modified through the Kubernetes API server.

Going further to what is a node:

Unlike pods and services, a node is not inherently created by Kubernetes: it is created externally by cloud providers like Google Compute Engine, or exists in your pool of physical or virtual machines. What this means is that when Kubernetes creates a node, it is really just creating an object that represents the node. After creation, Kubernetes will check whether the node is valid or not. [...] Currently, there are three components that interact with the Kubernetes node interface: node controller, kubelet, and kubectl. [...] The capacity of the node (number of cpus and amount of memory) is part of the node object. Normally, nodes register themselves and report their capacity when creating the node object. If you are doing manual node administration, then you need to set node capacity when adding a node.

The Kubernetes scheduler ensures that there are enough resources for all the pods on a node. It checks that the sum of the requests of containers on the node is no greater than the node capacity. It includes all containers started by the kubelet, but not containers started directly by Docker nor processes not in containers.

Edit:

Alternatively, I could also hit the api/v1/pods endpoint to get this information per pod which I can accumulate across nodes.

This is an actual description in what order it works.

But is there already a kubernetes API endpoint which provides the information pertaining to cpu/memory requests and limits per node? Answer to this question is no, there is not.

Unfortunately there is no endpoint to get that information directly. Kubectl uses several requests to show describe of nodes. You can check them by kubectl -v 8 describe nodes:

When you run kubectl -v=8 describe nodes you can see GET calls in this order:

/api/v1/nodes?includeUninitialized=true    
/api/v1/nodes/minikube
/api/v1/pods
/api/v1/events?fieldSelector
-- aurelius
Source: StackOverflow