Scheduler

Kubernetes Scheduler的作用是将待调度的Pod(API新创建的Pod、Controller Manager为补足副本而创建的Pod等)按照特定的调度算法和调度策略绑定(Binding)到集群中某个合适的Node上,并将绑定信息写入etcd中

随后,目标节点上的kubelet通过API Server监听到Kubernetes Scheduler产生的Pod绑定事件,然后获取对应的Pod清单,下载Image镜像并启动容器。

调度流程

Kubernetes Scheduler当前提供的默认调度流程分为以下两步。

  1. 预选调度过程,即遍历所有目标Node,筛选出符合要求的候选节点。为此,Kubernetes内置了多种预选策略(xxx Predicates)供用户选择。

  2. 确定最优节点,在第1步的基础上,采用优选策略(xxx Priority)计算出每个候选节点的积分,积分最高者胜出。

Kubernetes Scheduler的调度流程是通过插件方式加载的“调度算法提供者”(AlgorithmProvider)具体实现的。一个AlgorithmProvider其实就是包括了一组预选策略一组优先选择策略的结构体。

预选策略

Scheduler中可用的预选策略包含: NoDiskConflict PodFitsResources PodSelectorMatches PodFitsHost CheckNodeLabelPresence CheckServiceAffinityPodFitsPorts策略等。

其默认的AlgorithmProvider加载的预选策略Predicates包括:

  • PodFitsPorts(PodFitsPorts)

  • PodFitsResources(PodFitsResources)

  • NoDiskConflict(NoDiskConflict)

  • MatchNodeSelector(PodSelectorMatches)

  • HostName(PodFitsHost)

每个节点只有通过前面提及的5个默认预选策略后,才能初步被选中,进入下一个流程。

优选策略

Scheduler中的优选策略包含:LeastRequestedPriorityCalculateNodeLabelPriorityBalancedResourceAllocation等。

每个节点通过优先选择策略时都会算出一个得分,计算各项得分,最终选出得分值最大的节点作为优选的结果(也是调度算法的结果)

最后更新于