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

取样调度里面的取样规模这里简单介绍一下 , 默认的取样比率公式 = Max (5 50 - 集群的 node 数 / 125)取样规模 = Max (100 集群 Node 数*取样比率) 。

这里举个例子:节点规模为 3000 个节点 , 那么取样比例= Max (5 50 - 3000/125) = 26% , 那么取样规模= Max (100 3000* 0.26) = 780 , 在调度流水线里面 , Filter 只要匹配到 780 个候选节点 , 就可以停止 Filter 流程 , 走到 Score 阶段 。

Score 阶段依据 Policy 配置的算分插件 , 进行排序 , 分数最高的节点作为 SelectHost 。 接着将这个 Pod 分配到这个 Node 上 , 这个过程叫做 Reserver 阶段可以称为账本预占 。 预占的过程修改 Pod 在 PodCache 的状态为 Assumed 的状态(处于内存态) 。

调度过程涉及到 Pod 状态机的生命周期 , 这里简单介绍下 Pod 的几个主要状态: Initial(虚拟状态)->Assumed(Reserver)->Added->Deleted(虚拟状态); 当通过 Informer watch 到 Pod 数据已经确定分配到这个节点的时候 , 才会把 Pod 的状态变成 Added 。 选中完节点在 Bind 的时候 , 有可能会 Bind 失败 , 在 Bind 失败的时候会做回退 , 就是把预占用的账本做 Assumed 的数据退回 Initial , 也就是把 Assumed 状态擦除 , 从 Node 里面把 Pod 账本清除 。

推荐阅读