节点的部分资源需要运行一些必要的Kubernetes系统组件和Kubernetes系统资源,使该节点可作为您的集群的一部分。 因此,您的节点资源总量与节点在Kubernetes中的可分配资源之间会存在差异。节点的规格越大,在节点上部署的容器可能会越多,所以kubernetes自身需预留更多的资源。
为了保证节点的稳定性,CCE集群节点上会根据节点的规格预留一部分资源给Kubernetes的相关组件(kubelet,kube-proxy以及docker等)。
CCE对用户节点可分配的资源计算法则如下:
Allocatable = Capacity - Reserved - Eviction Threshold
即, 节点资源可分配量 = 总量 - 预留值 - 驱逐阈值 。其中内存资源的驱逐阈值,固定为100MB。
当节点上所有Pod消耗的内存上涨时,存在下列两种行为:
- 内存大于等于节点可分配量,触发kubelet驱逐Pod。
- 内存节点接近可分配量与驱逐(总量-预留值),触发操作系统OOM。
CCE对节点内存的预留规则v1
对于v1.21.4-r0和v1.23.3-r0以上版本集群,节点内存的预留规则优化为V2模型,请参见CCE对节点内存的预留规则v2。
CCE节点内存的总预留值等于系统组件预留值与Kubelet管理Pod所需预留值之和。
公式为: 总预留值= 系统组件预留值 + Kubelet管理Pod所需预留值
表 系统组件预留规则
| 内存总量范围 | 系统组件预留值 |
|---|---|
| 内存总量 <= 8GB | 0MB |
| 8GB < 内存总量 <= 16GB | ( (内存总量 – 8GB)102410% )MB |
| 16GB < 内存总量 <= 128GB | ( 8GB102410% + (内存总量 – 16GB)10246% )MB |
| 内存总量 > 128GB | ( 8GB102410% + 112GB10246% + (内存总量 – 128GB)10242% )MB |
表 Kubelet管理Pod所需预留规则
| 内存总量范围 | Pod数量 | Kubelet管理Pod所需预留值 |
|---|---|---|
| 内存总量 <= 2GB | - | 内存总量 *25% |
| 内存总量 > 2GB | 0 < 节点的最大实例数 <= 16 | 700 MB |
| 16 < 节点的最大实例数 <= 32 | ( 700 + (节点的最大实例数 - 16)*18.75 )MB | - |
| 32 < 节点的最大实例数 <= 64 | ( 1024 + (节点的最大实例数 - 32)*6.25 )MB | - |
| 64 < 节点的最大实例数 <= 128 | ( 1230 + (节点的最大实例数 - 64)*7.80 )MB | - |
| 节点的最大实例数 > 128 | ( 1740 + (节点的最大实例数 - 128)*11.20 )MB | - |
注意对于小规格节点,需根据实际使用情况调整节点的最大实例数。或者在CCE控制台创建节点时,需考虑根据节点规格自适应调整节点的最大实例数参数。
CCE对节点内存的预留规则v2
对于v1.21.4-r0和v1.23.3-r0以上版本集群,节点内存的预留规则优化为V2模型,且支持通过节点池配置管理参数(kube-reserved-mem和system-reserved-mem)动态调整,具体方法请参见[管理节点池]( " ")。
CCE节点内存V2模型的总预留值等于OS侧预留与CCE管理Pod所需预留值之和。
其中OS侧预留包括基础预留和随节点内存规格变动的浮动预留;CCE侧预留包括基础预留和随节点Pod数量的浮动预留。
表 节点内存预留规则v2
| 预留类型 | 基础/浮动 | 预留公式 | 预留对象 |
|---|---|---|---|
| OS侧预留 | 基础预留 | 固定400MB | sshd、systemd-journald等操作系统服务组件占用 |
| 浮动预留(随节点内存) | 25MB/GB | 内核占用 | |
| CCE侧预留 | 基础预留 | 固定500MB | 节点空载时, kubelet、kube-proxy等容器引擎组件占用。 |
| 浮动预留(随节点Pod数量) | Docker:20MB/PodContainerd:5MB/Pod | Pod数量增加时,容器引擎组件的额外占用。说明v2模型在计算节点默认预留内存时,随内存估计节点默认最大实例数,参见[节点默认最大实例数]( " ")。 |
CCE对节点CPU的预留规则
表 节点CPU预留规则
| CPU总量范围 | CPU预留值 |
|---|---|
| CPU总量 <= 1core | CPU总量 *6% |
| 1core < CPU总量 <= 2core | 1core*6% + (CPU总量– 1core)*1 % |
| 2core < CPU总量 <= 4core | 1core6% + 1core1% + (CPU总量– 2core)*0.5% |
| CPU总量 > 4core | 1core6% + 1core1% + 2core*0.5% + (CPU总量– 4core)*0.25% |
节点默认最大实例数
表 节点默认最大实例数
| 内存 | 节点默认最大实例数 |
|---|---|
| 4G | 20 |
| 8G | 40 |
| 16G | 60 |
| 32G | 80 |
| 64G及以上 | 110 |