默认调度流程分为以下两步:

  1. 预选调度过程,即遍历所有目标Node,筛选出符合要求的候选节点。为此,Kubernetes内置了多种预选策略(xxx Predicates)供用户选择。
  2. 确定最优节点,在第一步的基础上,采用优选策略计算出每个候选节点的积分,积分最高者胜出。

预选策略

  • CheckNodeUnschudulable:检查节点是否被标识为Unschedulable,以及是否将Pod调度到该类节点之上。
  • NoDiskConflict
  • PodFitsResouces
  • PodSelectorMatches
  • PodFitHost
  • CheckNodeLabelPresence
  • CheckServiceAffinity
  • PodFitsPorts

优选策略

  • LeastRequestedPriority
  • CalculateNodeLabelPriority
  • BalancedResourceAllocation

LeastRequestedPriority

LeastRequestedPriority该优选策略用于从备选节点列表中选出资源消耗最小的节点。
(1)计算出在所有备选节点上运行的Pod和备选Pod的CPU占用量totalMilliCPU。
(2)计算出在所有备选节点上运行的Pod和备选Pod的内存占用量totalMemory。
(3)计算每个节点的得分,计算规则大致如下,其中,NodeCpuCapacity为节点CPU计算能力,NodeMemoryCapacity为节点内存大小:

(cpu((capacity –sum(requested)) * 10 / capacity) + memory((capacity –sum(requested)) * 10 / capacity))/ 2