• 应用场景:
系统中已部署好K8S,一个master两个worker,目前新建pod时会走默认调度器的逻辑。K8S版本1.22.7
需求:新增一个基于调度框架的调度插件,在score扩展点加入,在原有判断内存和CPU可用率基础上再增加对网络带宽剩余的判断(三个指标有权重),使用go语言编写一个插件文件并注册到调度框架中。需要自定义的是类似score扩展点的NodeResourcesBalancedAllocation
可参考git上原调度插件文件修改,实现效果即可:kubernetes/kubernetes/blob/release-1.22/pkg/scheduler/framework/plugins/noderesources/balanced_allocation.go
测试预期:集群中一个节点网络带宽占用较满,此时调度pod不会选择这个节点(最好在调度日志中能看到给节点的具体打分)
需确保脚本能注册到框架上并跑通,代码注释详细一点
评分逻辑简述:
capacity:节点总量 total:节点当前容器总占用量
节点资源剩余分数score1
cpuScore=[(capacituCPU-totalCPU)/capacityCPU]*100*0.2
memoryScore=[(capacituMemory-totalMemory)/capacityMemory]*100*0.3
ioScore=[(capacituIO-totalIO)/capacityIO]*100*0.5
score1=(cpuScore+memoryScore+ioScore)
节点资源平衡性分数score2
cpuFraction=[(capacituCPU-totalCPU)/capacityCPU]
memoryFraction=[(capacituMemory-totalMemory)/capacityMemory]
ioFraction=[(capacituIO-totalIO)/capacityIO]
mean=(cpuFraction+memoryFraction+ioFraction)/3
计算三种资源空闲率的标准差 std
score2 = (1-std)*100
最终评分 score = (score1+score2)/2
开发及部署步骤可参考网上K8s调度框架设计与调度插件开发部署相关文档