更新时间:2024-10-14 GMT+08:00

节点预留资源策略说明

节点的部分资源需要运行一些必要的Kubernetes系统组件和Kubernetes系统资源,使该节点可作为您的集群的一部分。 因此,您的节点资源总量与节点在Kubernetes中的可分配资源之间会存在差异。节点的规格越大,在节点上部署的容器可能会越多,所以Kubernetes自身需预留更多的资源。

为了保证节点的稳定性,CCE集群节点上会根据节点的规格预留一部分资源给Kubernetes的相关组件(kubelet,kube-proxy以及docker等)。

CCE对用户节点可分配的资源计算法则如下:

Allocatable = Capacity - Reserved - Eviction Threshold

即,节点资源可分配量=总量-预留值-驱逐阈值。其中内存资源的驱逐阈值,固定为100MiB。

此处总量 Capacity为弹性云服务器除系统组件消耗外的可用内存,因此总量会略小于节点规格的内存值。

当节点上所有Pod消耗的内存上涨时,可能存在下列两种行为:

  1. 当节点可用内存低于驱逐阈值时,将会触发kubelet驱逐Pod。关于Kubernetes中驱逐阈值的相关信息,请参见节点压力驱逐
  2. 如果节点在kubelet回收内存之前触发操作系统内存不足事件(OOM),系统会终止容器,但是与Pod驱逐不同,kubelet会根据Pod的RestartPolicy重新启动它。

CCE对节点内存的预留规则v1

v1.21.4-r0v1.23.3-r0以下版本集群中,节点内存的预留规则使用v1模型。对于v1.21.4-r0v1.23.3-r0及以上版本集群,节点内存的预留规则优化为v2模型,请参见CCE对节点内存的预留规则v2

CCE节点内存的总预留值等于系统组件预留值Kubelet管理Pod所需预留值之和。

公式为:总预留值 = 系统组件预留值 + Kubelet管理Pod所需预留值

表1 系统组件预留规则

内存总量范围

系统组件预留值

内存总量 <= 8GiB

0MiB

8GiB < 内存总量 <= 16GiB

( (内存总量 – 8GiB)*1024*10% )MiB

16GiB < 内存总量 <= 128GiB

( 8GiB*1024*10% + (内存总量 – 16GiB)*1024*6% )MiB

内存总量 > 128GiB

( 8GiB*1024*10% + 112GiB*1024*6% + (内存总量 – 128GiB)*1024*2% )MiB

表2 Kubelet管理Pod所需预留规则

内存总量范围

Pod数量

Kubelet管理Pod所需预留值

内存总量 <= 2GiB

-

内存总量 *25%

内存总量 > 2GiB

0 < 节点的最大实例数 <= 16

700 MiB

16 < 节点的最大实例数 <= 32

( 700 + (节点的最大实例数 - 16)*18.75 )MiB

32 < 节点的最大实例数 <= 64

( 1024 + (节点的最大实例数 - 32)*6.25 )MiB

64 < 节点的最大实例数 <= 128

( 1230 + (节点的最大实例数 - 64)*7.80 )MiB

节点的最大实例数 > 128

( 1740 + (节点的最大实例数 - 128)*11.20 )MiB

对于小规格节点,需根据实际使用情况调整节点的最大实例数。或者在CCE控制台创建节点时,需考虑根据节点规格自适应调整节点的最大实例数参数。

CCE对节点内存的预留规则v2

对于v1.21.4-r0v1.23.3-r0及以上版本集群,节点内存的预留规则优化为v2模型,且支持通过节点池配置管理参数(kube-reserved-mem和system-reserved-mem)动态调整,具体方法请参见修改节点池配置

CCE节点内存v2模型的总预留值等于OS侧预留值CCE管理Pod所需预留值之和。

其中OS侧预留包括基础预留和随节点内存规格变动的浮动预留;CCE侧预留包括基础预留和随节点Pod数量的浮动预留。

表3 节点内存预留规则v2

预留类型

基础/浮动

预留公式

预留对象

OS侧预留

基础预留

固定400MiB

sshd、systemd-journald等操作系统服务组件占用

浮动预留(随节点内存)

25MiB/GiB

内核占用

CCE侧预留

基础预留

固定500MiB

节点空载时, kubelet、kube-proxy等容器引擎组件占用。

浮动预留(随节点Pod数量)

Docker:20MiB/Pod

Containerd:5MiB/Pod

Pod数量增加时,容器引擎组件的额外占用。

说明:

v2模型在计算节点默认预留内存时,随内存估计节点默认最大实例数,请参见表1

CCE对节点CPU的预留规则

表4 节点CPU预留规则

CPU总量范围

CPU预留值

CPU总量 <= 1core

CPU总量 *6%

1core < CPU总量 <= 2core

1core*6% + (CPU总量– 1core)*1 %

2core < CPU总量 <= 4core

1core*6% + 1core*1% + (CPU总量– 2core)*0.5%

CPU总量 > 4core

1core*6% + 1core*1% + 2core*0.5% + (CPU总量– 4core)*0.25%

CCE对节点数据盘的预留规则

CCE使用LVM(Logical Volume Manager)进行磁盘管理,LVM会在磁盘上创建一个metadata区域用于存储逻辑卷和物理卷的信息,导致磁盘存在4MiB的不可用空间。因此节点实际可用的磁盘空间 = 磁盘大小 - 4MiB。