文档首页/ 云容器引擎 CCE/ 用户指南/ 节点/ 节点运维/ 节点预留资源策略说明
更新时间:2024-09-29 GMT+08:00

节点预留资源策略说明

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

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

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

Allocatable = Capacity - Reserved - Eviction Threshold

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

此处总量 Capacity为弹性云服务器除系统组件消耗外的可用内存,因此总量会略小于节点规格的内存值。详情请参见使用free命令查看弹性云服务器的内存,为什么与实际不符?

当节点上所有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

如果节点资源占用比较满,集群升级到v1.21.4-r0v1.23.3-r0及以上版本之后可能会因为系统组件预留值变大而导致节点上的负载被驱逐。

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。