Scheduler
Kubernetes Scheduler的作用是将待调度的Pod(API新创建的Pod、Controller Manager为补足副本而创建的Pod等)按照特定的调度算法和调度策略绑定(Binding)到集群中某个合适的Node上,并将绑定信息写入etcd中。
随后,目标节点上的kubelet通过API Server监听到Kubernetes Scheduler产生的Pod绑定事件,然后获取对应的Pod清单,下载Image镜像并启动容器。
调度流程
Kubernetes Scheduler当前提供的默认调度流程分为以下两步。
预选调度过程,即遍历所有目标Node,筛选出符合要求的候选节点。为此,Kubernetes内置了多种预选策略(xxx Predicates)供用户选择。
确定最优节点,在第1步的基础上,采用优选策略(xxx Priority)计算出每个候选节点的积分,积分最高者胜出。
Kubernetes Scheduler的调度流程是通过插件方式加载的“调度算法提供者”(AlgorithmProvider)具体实现的。一个AlgorithmProvider其实就是包括了一组预选策略与一组优先选择策略的结构体。
预选策略
Scheduler中可用的预选策略包含: NoDiskConflict 、PodFitsResources 、PodSelectorMatches 、 PodFitsHost 、CheckNodeLabelPresence 、 CheckServiceAffinity和PodFitsPorts策略等。
其默认的AlgorithmProvider加载的预选策略Predicates包括:
PodFitsPorts(PodFitsPorts)
PodFitsResources(PodFitsResources)
NoDiskConflict(NoDiskConflict)
MatchNodeSelector(PodSelectorMatches)
HostName(PodFitsHost)
每个节点只有通过前面提及的5个默认预选策略后,才能初步被选中,进入下一个流程。
优选策略
Scheduler中的优选策略包含:LeastRequestedPriority、CalculateNodeLabelPriority和BalancedResourceAllocation等。
每个节点通过优先选择策略时都会算出一个得分,计算各项得分,最终选出得分值最大的节点作为优选的结果(也是调度算法的结果)。
最后更新于
这有帮助吗?