深度解析descheduler的highNodeUtilization和lowNodeUtilization插件的原理
最近在研究descheduler,主要为了解决node节点出现cpu热点问题,即节点的cpu使用率相差特别大,而节点的request分布均匀。我们知道kube-scheduler将pod调度到节点上,而descheduler将pod进行移除,让workload控制器重新生成pod,并再次触发pod调度流程将pod调度到节点。通过这个方法达到pod重调度和节点的平衡目的。
社区的descheduler项目为了解决以下场景:
- 部分节点利用率过高,需要平衡节点的利用率
- 在pod调度之后,节点的label、taint不满足pod的pod/node affinity,需要将pod移动到符合的节点
- 新节点加入集群,需要平衡节点的利用率
- pod处于failed状态但是没有清理
- 同一个workload的pod集中在同一节点上
descheduler利用插件机制来扩展它的能力,插件分为Balance(节点平衡)和Deschedule(pod重调度)两个类型。