目录

Kubernetes-Scheduler系列-02-most_requested

概述

most_requested 是 Kubernetes Scheduler 的调度算法之一。法如其名,就是尽量将 Pod 调到能提供最多资源的节点 Node 上。

代码走读

most_requested 中的核心方法是 mostRequestedScore,如下:

1
2
3
4
5
6
7
8
9
func mostRequestedScore(requested, capacity int64) int64 {
	if capacity == 0 {
		return 0
	}
	if requested > capacity {
		return 0
	}
	return (requested * framework.MaxNodeScore) / capacity
}

说白了,就是计算请求和节点 Node 可分配资源的最大值的比,也就是如下,framework.MaxNodeScore 为100。

1
(requested * framework.MaxNodeScore) / capacity

DefaultRequestedRatioResources 是一个默认值,会给 CPU 和 Memory 一个权重值,默认值为1:1。

1
var DefaultRequestedRatioResources = ResourceToWeightMap{v1.ResourceMemory: 1, v1.ResourceCPU: 1}

再看看更上层的方法,目前只需要传 requested 进去,也就是后面关于 volumes 的变量是可以不传的,在 most_requested 中是不考虑 volumes 的。

1
2
3
4
5
6
7
8
9
func mostResourceScorer(requested, allocable ResourceToValueMap, includeVolumes bool, requestedVolumes int, allocatableVolumes int) int64 {
	var nodeScore, weightSum int64
	for resource, weight := range mostRequestedRatioResources {
		resourceScore := mostRequestedScore(requested[resource], allocable[resource])
		nodeScore += resourceScore * weight
		weightSum += weight
	}
	return (nodeScore / weightSum)
}

公式其实也是很简单的,用文字来表达,就是在默认的 CPU:Memory 的权重比1:1的前提下,CPU/Memory 的 mostRequestedScore 越高,节点得分就越高。

参考资料

警告
本文最后更新于 2017年2月1日,文中内容可能已过时,请谨慎参考。