文章目录
1. 预选策略(xxx Predicates)
目的:筛选出符合要求的节点
1.1 NoDiskConflict
目的:判断备选pod中 gccPersistentDisk等和备选节点已有Pod是否冲突
1.2 PodFitsResources
目的:节点资源是否满足pod需求
1.3 PodSelectorMatches
目的:判断备选节点是否包含(Pod标签选择器的)指定标签
1.4 PodFitsHost
目的:判断Pod指定节点名(spec.nodeName)指定节点是否和备选节点一致
1.5 CheckNodeLaberPresence
目的:如果指定该策略,Scheduler将注册该策略。其用于判断策略列出的标签在备选节点中存在时,是否选择该节点。
流程如下:
- 读取备选节点标签列表
- 根据策略判断:
可理解为presence:true为白名单,presence:false为黑名单
1.6 CheckServiceAffinity
如果用户指定该策略,则会判断Pod的亲和度(详情见文集《k8s-进阶》中《pod的亲和度调度》一片)
1.7 PodFitsPorts
目的:判断端口是否被调用。
2. 优选策略(xxx Priority)
目的:计算每个候选节点的积分已得到最高者。(调度的最终判断)
2.1 LeastRequestedPriority
按资源消耗给节点打分(小的分高)
计分规则大致如下:
score=int(((nodeCpuCapacity-totalMilliCPU)\*10)/nodeCpuCapacity+((nodeMemoryCapacity-totalMemory)\*10)/NodeCpuMemory)/2)
参数说明:
- nodeCpuCapacity:节点CPU数。
- nodeMemoryCapacity:节点内存大小。
- totalMilliCPU:所有备选节点上运行的Pod和备选Pod的CPU占用量
- totalMemory:所以备选节点上运行的Pod和备选Pod的CPU占用量
改成数学式表示:
2.2 CalculateNodeLabelPriority
目的:如果用户指定该策略,Scheduler将注册该策略。其用于判断是否给该节点加分。
判断策略如下:
2.3 BalancedResource
目的:按各项资源使用率均衡度打分(均衡分高)
计算规则大致如下:
score=int(10-math.abs(totalMilliCPU/nodeCpuCapacity-totalMemory/nodeMemoryCapacity)\*10)
参数同2.1
改成数学式表示: