CCE节点资源预留说明
在 CCE 集群中,节点初始化时需要运行一些必要的系统组件和 Kubernetes 组件,使该节点能够成功纳入该集群并正常提供服务,因此需要为这些组件预留一部分系统资源,您会看到节点资源总量与节点在Kubernetes 中的可分配资源之间会存在差异。节点的规格越大,在节点上部署的容器可能会越多,需要需预留的资源可能越多。
为了保证节点的稳定性,CCE 集群节点上会根据机器规格预留一部分资源给 Kubernetes 的相关组件(kubelet、kube-proxy、docker等)。CCE 存在默认的资源预留策略,也支持通过 kubelet 配置自定义资源预留。
节点最终可分配的资源计算公式如下:
可分配资源(Allocatable) = 总资源(Capacity)-预留资源(Reserved)-驱逐阈值(Eviction-Threshold)。其中内存资源的驱逐阈值,固定为100MiB。
说明:
此处总量 Capacity 为弹性云服务器除系统组件消耗外的可用内存,因此总量会略小于节点规格的内存值。详细信息请参考系统内看到的系统可用内存比标称值少。
当节点上所有 Pod 消耗的内存上涨时,可能存在下列两种行为:
- 当节点可用内存低于驱逐阈值时,将会触发 kubelet 驱逐 Pod。关于 Kubernetes 中驱逐阈值的相关信息,请参见节点压力驱逐。
- 如果节点在 kubelet 回收内存之前触发操作系统内存不足事件(OOM),系统会终止容器,但是与 Pod驱逐不同,kubelet 会根据 Pod 的 RestartPolicy 重新启动它。
影响范围
自定义资源预留及其影响范围
您可以参见自定义节点组 Kubelet 配置修改资源预留的取值。修改后,节点组中的已有节点将即时生效,新增节点(例如扩缩容的新节点、通过添加已有节点新增的 BCC 实例)也会使用该配置。
注意:
- 不支持通过黑屏手动修改 kubelet 配置文件,以避免配置冲突,导致后续节点组运维过程中的非预期结果。
- 改变资源预留的值可能会造成节点的可分配资源变少。对于资源水位较高的节点,可能会触发节点驱逐。请合理配置取值。
默认资源预留及其影响范围
CCE 可能会迭代节点资源预留的默认取值。迭代后,如果您在节点组维度更新了节点配置,例如节点组升级、修改节点组自定义 kubelet 参数等,节点将自动使用新的资源预留策略。如果您没有相关运维操作,出于稳定性考量,节点组中的已有节点不会自动生效新的资源预留策略。
查询节点可分配资源
执行以下命令,查看节点的资源总量和可分配资源。
1kubectl describe node 192.168.102.106 | grep Allocatable -B 9 -A 8
预期输出:
1Capacity:
2 cce.baidubce.com/eni: 0
3 cce.baidubce.com/ip: 7
4 cpu: 2
5 ephemeral-storage: 103145380Ki
6 hugepages-1Gi: 0
7 hugepages-2Mi: 0
8 memory: 8139584Ki
9 pods: 128
10Allocatable:
11 cce.baidubce.com/eni: 0
12 cce.baidubce.com/ip: 7
13 cpu: 1900m
14 ephemeral-storage: 98227408251
15 hugepages-1Gi: 0
16 hugepages-2Mi: 0
17 memory: 7832384Ki
18 pods: 128
自定义资源预留
您可以参见自定义 kubelet 参数配置新增节点的资源预留;或修改节点组配置中的资源预留,新扩容节点将使用该配置。
重要:如需修改自定义资源预留,请合理配置取值,不合理的设置会造成节点的可分配资源变少,对于资源水位较高的节点,可能会触发节点驱逐。
默认资源预留策略
如果没有指定 kubelet 资源预留参数,CCE 会按如下策略自动设置资源预留。
内存预留值:
举例说明:
- 256 GiB内存的节点为例,总的内存预留量计算如下:
4×25%+(8-4)×20%+(16-8)×10%+(128-16)×6%+(256-128)×2% = 11.88 GiB
- 198 GiB内存的节点为例,总的内存预留量计算如下:
4×25%+(8-4)×20%+(16-8)×10%+(128-16)×6%+(198-128)×2% = 10.72 GiB
注意:
- 节点内存资源:以系统实际可用的内存资源为准。单位为MiB。
- 实例规格定义中的内存大小指所有可用内存,其中也包含了系统占用的部分。因此系统实时可用内存会小于实例规格定义,请参见系统内看到的系统可用内存比标称值少。
CPU 预留值:
举例说明:
- 32核的节点预留资源为:100+(32000-4000)×2.5% = 800 milliCore
CCE 节点默认资源预留示例
关于 BCC 实例规格的详细信息,请参见实例规格。
如何查看节点总 CPU 和内存?
CPU
执行如下命令,查询节点总 CPU。
1cat /proc/cpuinfo | grep processor
预期输出:
1processor : 0
2processor : 1
3processor : 2
4processor : 3
内存
执行如下命令,查询节点总内存。
1cat /proc/meminfo | grep MemTotal
预期输出:
1MemTotal: 7660952 kB