kubernetes 核心原理之 Sheduler
作用是将待调度的pod按照特定的调度算法和调度策略绑定到集群中的某个合适的Node上,并将绑定信息写入etcd中。
目标节点上的kubelet通过api server监听到schduler产生的pod绑定事件,然后获取对应的pod清单,下载image镜像,并启动容器。
Scheduler默认调度流程分为以下两步
- 预调度过程,即遍历所有目标node,筛选出符合要求的候选节点
- 确定最优节点,在上一步基础上,采用优选策略计算出每个候选节点的积分,积分高者胜出。
Scheduler调度流程是通过插件方式加载的“调度算法提供者”(AlgorithmProvider)具体实现的。一个AlgorithmProvider其实是一组预选策略与一组优先选择策略的结构体。
Scheduler中可选的预选策略
- NoDiskConflict
- PodFitsResources
- PodSelectorMatches
- PodFitsHost
- CheckNodeLabelPresence
- CheckServiceAffinity
- PodFitsPorts
Scheduler优选策略
- LeastRequestedPriority(资源消耗最小)
- CalculateNodeLabelPriority
- BalancedResourceAllocation(各项资源使用率最均衡的节点)
每个节点通过优选策略算出一个得分,最终选出分值最大的节点作为优选的结果。