容器服务 节点资源预留算法(新)

TKE 需要占用节点的一部分资源来运行相关组件(例如:kubelet、kube-proxy、Runtime 等),因此节点的总资源与集群中可分配的资源之间会存在差异。这里说明 TKE 集群中 Kubernetes 版本在1.30及以上节点的新资源预留算法,帮助用户在部署应用时合理设置 Pod 的请求资源量和限制资源量。

相关产品
容器服务 产品页,含版本规格、价格与购买入口。

一、适用范围

本算法适用于集群 kubernetes 版本在1.30及以上的普通和原生节点。

二、定义

整机使用资源 = 维持节点运行的系统进程占用资源 + Pod 运行占用资源

注意:这篇主要讨论“维持节点运行的系统进程占用资源”的预留算法。

三、节点 CPU 预留规则

由于 CPU 是可压缩资源且存在部分 perCPU 的内核线程,我们尽量保持算法的一致性,并在大规格机型上提供更多的资源。更新后的算法如下:

·第一个核心的6%。

·下一个核心(最多2个核心)的1%。

·接下来2个核心(最多4个核心)的0.5%。

·4个以上任何核心数量的0.25%。

需注意,在小规格机器上创建过多的 Pod 可能会导致预留的 CPU 过少,从而影响系统稳定性。以下行为也可能会占用系统资源,可以使用自定义参数适当调整预留的资源情况:

·容器打印过多日志(容器日志通过 pipe 交给 containerd,最终由 kubelet 压缩落盘)。

·exec probe 执行过于频繁(如每秒一次,exec probe 通过 runc 在容器中执行命令,因此可能会占用大量的 CPU)。

·在节点上部署其他服务(非 Pod 管理的服务会占用节点预留资源,从而导致系统不稳定)。

新旧算法在 CPU 资源占用情况的对比如下:

CPU(核) 旧算法 新算法
1 0.1 0.06
2 0.1 0.07
4 0.1 0.08
8 0.2 0.09
16 0.4 0.11
32 0.8 0.15
64 1.6 0.23
128 2.4 0.39
256 3.04 0.71

四、节点 Mem 预留规则

Memory 是不可压缩资源,设置预留内存时应较为谨慎。经过测试内存和 Pod 数量、机器规格紧密相关,调整新算法为:min(旧算法,20MiB * Pod 数量 + 256MiB)。注意在节点上部署其他服务也可能会占用节点预留资源,导致节点稳定性降低。如果需要部署非 Pod 管理的服务,建议调整预留资源。

新旧算法在 Mem 资源占用情况的对比如下:

内存大小(GiB) 旧算法 16个 pod(GiB) 32个 pod(GiB) 64个 pod(GiB) 128个 pod(GiB) 256个 pod(GiB)
1 0.25 0.25 0.25 0.25 0.25 0.25
2 0.5 0.5 0.5 0.5 0.5 0.5
4 1 0.58 0.9 1 1 1
8 1.8 0.58 0.9 1.54 1.8 1.8
16 2.6 0.58 0.9 1.54 2.6 2.6
32 3.56 0.58 0.9 1.54 2.82 3.56
64 5.48 0.58 0.9 1.54 2.82 5.38
128 9.32 0.58 0.9 1.54 2.82 5.38
256 11.88 0.58 0.9 1.54 2.82 5.38

五、新旧算法有什么差异?

·旧算法:根据机器规格为资源预留固定值,详情请参见 资源预留说明。算法相对保守,预留资源量较大,用户可以给业务使用的资源量较低。

·新算法:通过调整 Pod 数在不同规格机器上进行大规模压测获得资源预留公式,新算法在大规格机型上提供更多的资源给业务使用。

六、关于设置 kube-reserved 且不设置 system-reserved 的解释

kubelet 将 capacity – kubeReserved – systemReserved – evictionHard 作为节点可分配资源,用来控制 Pod 可用到的资源量。按照文档,kubeReserved 可用来限制 kubelet 和运行时组件的资源使用量、systemReserved 可用来限制系统服务资源量,但生效的前提是需要开启 enforce-node-allocatable 并指定 kube-reserved-cgroup 和 system-reserved-cgroup ,这对系统的 cgroup 布局有额外要求。同时,社区和众多云厂商出于对整体稳定性考量,并不会启用这两种限制。因此 TKE 也不会对 kubelet 组件和系统组件进行资源限制,同样 reserved 的资源完全设置在 kube-reserved 上还是 kube-reserved 和 system-reserved 各占一部分实际的效果没有区别。

七、新算法是否支持对低版本节点生效?

暂不支持。存量节点后续可以通过节点升级来体验新算法。

赞 (0)
上一篇 4天前
下一篇 4天前