一、Scheduler简介
Scheduler负责Pod的生命周期中的后半部分,即Pod的调度。在整个系统中起"承上启下"作用
承上:负责通过api server查询未分配node的pod,接收Controller Manager创建的新的Pod,根据调度策略为其选择一个合适的Node,通过通过RC/Deployment/Daemonset/Job完成pod的调度;
启下:Node上的kubelet接管Pod的生命周期。
工作原理:
第一、API创建新的Pod
第二、Controller Manager补充Pod的副本
第三、Scheduler按照特定的调度算法绑定到集群中匹配的node上
第四、绑定成功,将绑定信息写入etcd当中
Scheduler:
1)通过调度算法为待调度Pod列表的每个Pod从Node列表中选择一个最适合的Node,并将信息写入etcd中
2)kubelet通过API Server监听到kubernetes Scheduler产生的Pod绑定信息,然后获取对应的Pod清单,下载Image,并启动容器。
二、调度流程
1、预选调度过程,即遍历所有目标Node,筛选出符合要求的候选节点,kubernetes内置了多种预选策略(xxx Predicates)供用户选择
2、确定最优节点,在第一步的基础上采用优选策略(xxx Priority)计算出每个候选节点的积分,取最高积分。
调度流程通过插件式加载的“调度算法提供者”(AlgorithmProvider)具体实现,一个调度算法提供者就是包括一组预选策略与一组优选策略的结构体。
三、Scheduling节点调度
1、nodeSelector(定向调度):导读到label匹配的node节点中
2、nodeAffinity(node亲和性调度):
第一、调度到label匹配的node节点中(可以设置优选、匹配更丰富)
第二、requiredDuringSchedulingRequiredDuringExecution(类似于Selector),当pod不满足条件时,系统将从该node上移除之前调度的pod
第