最近发现在给kubelet reserve资源的时候,它的kubeReserved flag实际没生效,调查之后才发现,在用kubeadm安装的cluster里,kubelet默认被systemd管理,它所创建的cgroup kubelet.service被放在system.slice下,而用户传入的kubeReservedCgroup没有生效。这样的话,就只有systemReserved里设置的资源能生效,而这个资源基本上也只能设置为:

systemReservedCgroup: /system.slice

它下面管理着kubelet, containerd, sshd等资源,所以只要设置得大一些,基本上也能满足需求。

另外,在/kubepods.slice下的memory.max默认也没有生效,即使设置了systemReserve它依然是用了机器的全部内存,想要这个值生效,需要设置

enforceNodeAllocatable:
  - pods
  - system-reserved

这样,让pods和systemReserve同时生效,那么/kubepods.slice下的max就等于机器总的memory减去systemReserve了。


original refer