Joe Blog

Kubernetes的Pod调度算法

在本文档中,解释了如何为Pod选择节点的算法。在选择Pod的目标节点之前有两个步骤。第一步是过滤所有节点(预选),第二步是对剩余节点进行排名(优选),以找到最适合Pod的节点。

预选

预选的目的是过滤掉不满足Pod某些要求的节点。例如,如果节点上的空闲资源(通过容量减去已经在节点上运行的所有Pod的资源请求的总和来测量)小于Pod的所需资源,则不应在优选阶段考虑该节点打分排名,就被过滤掉了。目前,有几个“预选策略”实现了不同的过滤策略

上述预选的详细信息可以在pkg / scheduler / algorithm / predicates / predicates.go中找到。上面提到的所有策略可以组合使用以执行复杂的过滤策略。默认情况下,Kubernetes使用这些谓词中的一些,但不是全部。您可以在pkg / scheduler / algorithmprovider / defaults / defaults.go中查看默认使用的

优选

预选节点被认为适合托管Pod,并且通常存在多个节点。Kubernetes优先考虑这些节点,以找到Pod的“最佳”节点。优先级由一组优先级函数执行。对于每一个节点,优先级函数给出从0-10开始的分数,其中10代表“最优选”,0代表“最不优选”。每个优先级函数由正数加权,每个节点的最终得分通过将所有加权得分相加来计算。例如,假设有两个优先级的功能,priorityFunc1priorityFunc2与加权系数weight1weight2分别一些NodeA上的最后得分是:

finalScoreNodeA = (weight1 * priorityFunc1) + (weight2 * priorityFunc2)

在计算所有节点的分数之后,选择具有最高分数的节点作为Pod的主机。如果存在多个具有相同最高分数的节点,则选择其中的随机节点。

目前,Kubernetes调度程序提供了一些实用的优先级功能,包括:

参考文档:

https://github.com/kubernetes/community/blob/master/contributors/devel/sig-scheduling/scheduler_algorithm.md

https://blog.csdn.net/WaltonWang/article/details/54604392