kubernetes node可用内存
kubectl top node 发现内存使用率很高(超过100%),但是实际上内存还有很多可用,这是为什么呢?
# kubectl top node
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
node-1 553m 14% 11363Mi 91%
node-2 400m 10% 10120Mi 81%
node-3 224m 5% 10613Mi 85%
node-4 1086m 27% 12535Mi 101%
查看node可调度的内存
# kubectl describe node node-1
Allocatable:
cpu: 3900m
ephemeral-storage: 190119300396
hugepages-1Gi: 0
hugepages-2Mi: 0
memory: 12670892Ki
pods: 64
这是由于kubelet 可调度的内存不是所有的内存,需要去掉预留资源和eviction-threshold
,这个预留资源是由kubelet的–kube-reserved和–system-reserved参数指定的,eviction临界点由kubelet的–eviction-hard参数指定的。
官方的一张图解释的很清楚
让我们来计算一下
kubelet的预留配置
# cat /etc/kubernetes/kubelet-customized-args.conf
KUBELET_CUSTOMIZED_ARGS=" --eviction-hard=imagefs.available<15%,memory.available<300Mi,nodefs.available<10%,nodefs.inodesFree<5% --system-reserved=cpu=50m,memory=1272Mi --kube-reserved=cpu=50m,memory=1272Mi --kube-reserved=pid=1000 --system-reserved=pid=1000 "
free -m 查看系统总内存
# free -m
total used free shared buff/cache available
Mem: 15217 12300 236 5 2680 2682
Swap: 0 0 0
系统总内存减去kubelet预留的内存和eviction,就是node可用的内存
# kubelet Allocatable内存转换成Mi
12670892/1024=12373Mi
# 系统总内存减去kubelet预留的内存
15217-1272-1272-300=12373Mi