Kubernetes Resources management

Node Allocatable

The general idea :

	
      Node Capacity
---------------------------
|     kube-reserved       |
|-------------------------|
|     system-reserved     |
|-------------------------|
|    eviction-threshold   |
|-------------------------|
|                         |
|      allocatable        |
|   (available for pods)  |
|                         |
|                         |

Node resource information :
kubectl describe node NODE

Capacity:
  cpu:                24
  ephemeral-storage:  4263600Ki  = 4.2GB
Allocatable:
  cpu:                24
  ephemeral-storage:  3215024Ki = 3.2GB

That ephemeral-storage info looks to be not dynamic (valued a single time at node kubelet startup)

Another way is calling the kubectl api :
First we start the proxy : kubectl proxy -p fooUnusedPort &
Then we could request the node stats :
curl "localhost:fooUnusedPort/api/v1/nodes/NODE/proxy/stats/summary"

It returns a lot of information :
– resource state for images fs
– resource state for containers fs
– resource state for fs

For example here :

"fs": {
   "time": "2020-10-01T09:26:11Z",
   "availableBytes": 3178647552,  = 3.2GB
   "capacityBytes":  4365926400,  = 4.2GB
   "usedBytes": 958107648,
   "inodesFree": 272372,
   "inodes": 278528,
   "inodesUsed": 6156
  },

node.fs.availableBytes is the space available for ephemoral storage.
It looks to be updated dynamically

How is computed node.fs.capacityBytes(storage of the node)

Several directories :
– /var/lib/kubelet
– ???

How fix fs space issues on a node

If the mount on /var/lib/kubelet doesn’t contain much spaces, K8s deploys on the node may fail
To fix that :
– either increase the space size of /var/lib/kubelet
– create a symlink from /var/lib/kubelet to a directory that has more space.

———-
Kubelet :

KUBELET find default service conf :
find / -type f -name 10-kubeadm.conf 2>/dev/null

It may at :/etc/systemd/system/kubelet.service.d/10-kubeadm.conf or still at :/usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf

Garbage collection for container images

Overview

Garbage collection (GC) is a function of kubelet that clean up unused images and unused containers.
Kubelet perform GC for containers every minute and GC for images every five minutes.

configuration

image-gc-high-threshold : percent of disk usage which triggers image garbage collection.
Default is 85%.
image-gc-low-threshold : percent of disk usage to which image garbage collection attempts to free.
Default is 80%.

Kubelet configurations example

Kubelet configuration are set for the current node and not the whole cluster.
So to enable a configuration in the whole cluster, we need to set the changes on each node of that !
The configuration may be set as arguments to kubelet command line or added in the /var/lib/kubelet/config.yaml file.

Example of very minimal conditions for evictions

Note : imageGCLowThresholdPercent has to be lower than imageGCHighThresholdPercent. Otherwise kubelet fails to start.

#kubelet eviction hard conditions to clean unused containers and images
evictionHard:
  imagefs.available: 1%
  memory.available: 100Mi
  nodefs.available: 1%
  nodefs.inodesFree: 1%
# kubelet rule for GC to periocaly  clean unused containers and images
imageGCHighThresholdPercent: 95
imageGCLowThresholdPercent: 94
Ce contenu a été publié dans Non classé. Vous pouvez le mettre en favoris avec ce permalien.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *