从零开始入门 K8s | 调度器的调度流程和算法介绍( 六 )

整个调度流水线只有在 Scheduler Thread 阶段是串行的一个 Pod 一个 Pod 的进行调度 , 在 Wait 和 Bind 阶段 Pod 都是异步并行执行 。

调度详细流程

解说完 kube-scheduler 的几大部件的作用和关联关系之后 , 接下来深入理解下 Scheduler Pipeline 的具体工作原理 , 如下是 kube-scheduler 的详细流程图 , 先解说调度队列:

SchedulingQueue有三个子队列 activeQ、backoffQ、unschedulableQ 。

Scheduler 启动的时候所有等待被调度的 Pod 都会进入 activieQ , activeQ 会按照 Pod 的 priority 进行排序 , Scheduler Pipepline 会从 activeQ 获取一个 Pod 进行 Pipeline 执行调度流程 , 当调度失败之后会直接根据情况选择进入 unschedulableQ 或者 backoffQ , 如果在当前 Pod 调度期间 Node Cache、Pod Cache 等 Scheduler Cache 有变化就进入 backoffQ , 否则进入 unschedulableQ 。

unschedulableQ 会定期较长时间(例如 60 秒)刷入 activeQ 或者 backoffQ , 或者在 Scheduler Cache 发生变化的时候触发关联的 Pod 刷入 activeQ 或者 backoffQ;backoffQ 会以 backoff 机制相比 unschedulableQ 比较快地让待调度的 Pod 进入 activeQ 进行重新调度 。

推荐阅读