一、简介
scheduler是kubernetes的调度器,主要任务是把定义的pod分配到集群的节点上,其在调度时需要考虑一下问题:
- 公平:如何保证每个节点都能被分配资源
- 资源高效利用:集群所有资源最大化被使用
- 效率:调度的性能要好,能够尽快的对大批量的pod完成调度工作
- 灵活:允许用户根据自己的需求控制调度的逻辑
kubernetes调度流程如下图:
二、调度策略
scheduler调度分为以下几个步骤:
- 预选过程:根据资源定义,遍历所有节点过滤掉不满足条件的节点,此过程如果所有节点都不满足要求,Pod会一直处于Pending状态,等待有满足的节点出现。
- 优选过程:根据资源定义的策略,对满足条件的节点进行打分,然后进行排序。
- 选定过程:选定优先级最高的节点
kubernetes调度过程如下图:
下图为预选(Predicates)与优选(Priotites)策略:
一般情况下,使用kube-scheduler的默认调度就能满足大部分需求。kubernetes的调度器是以插件化的形式实现的,方便用户对调度的定制与二次开发。因此用户也可以自定义预选和优选策略。