Kubernetes中的资源分配:如何安排Pod?

时间:2019-03-25 11:14:32

标签: kubernetes scheduling

在Kubernetes中,调度程序的作用是为Pod寻找合适的节点。因此,在将Pod分配给节点后,该节点上有不同的Pod,以便这些Pod竞争获得资源。因此,对于这种竞争形势,Kubernetes如何分配资源? Kubernetes中有用于计算资源分配的任何源代码吗?

1 个答案:

答案 0 :(得分:2)

我想您可以看一下以下文章,看看是否能回答您的查询

https://github.com/eBay/Kubernetes/blob/master/docs/devel/scheduler_algorithm.md

https://jvns.ca/blog/2017/07/27/how-does-the-kubernetes-scheduler-work/

  

被过滤的节点被认为适合托管Pod,并且通常剩余多个节点。 Kubernetes优先处理其余节点,以找到Pod的“最佳”节点。优先级排序由一组优先级功能执行。对于每个剩余节点,优先级函数给出的分数从0-10缩放,其中10代表“最喜欢”,0代表“最不喜欢”。每个优先级函数都由一个正数加权,并且每个节点的最终分数是通过将所有加权分数相加得出的。例如,假设有两个优先级函数,priorityFunc1和priorityFunc2,其加权因子分别为weight1和weight2,则某些NodeA的最终得分为:

     

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

     

计算所有节点的分数后,选择分数最高的节点作为Pod的主机。如果有多个节点的最高分数相等,则从中随机选择一个。

     

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

     

LeastRequestedPriority :如果将新Pod调度到该节点上,则该节点的优先级将基于该节点的空闲部分。 (换句话说,(容量-节点上已经存在的所有Pod的请求总和-已调度的Pod的请求)/容量)。 CPU和内存的权重相等。自由分数最高的节点是最优选的。请注意,此优先级功能具有在资源消耗方面将Pod分布在节点上的作用。

     

CalculateNodeLabelPriority :更喜欢具有指定标签的节点。

     

BalancedResourceAllocation :此优先级功能尝试将Pod放置在节点上,以便在部署Pod之后平衡CPU和内存的利用率。

     

CalculateSpreadPriority :通过最小化属于同一节点上同一服务的Pod数量来传播Pod。如果节点上存在区域信息,则会调整优先级,以便将Pod分布在区域和节点上。

     

CalculateAntiAffinityPriority :通过最小化属于特定标签的具有相同值的节点上属于同一服务的Pod数量来传播Pod。