k8s 1.15.0
预选
GeneralPredicates
计算请求量方式
max(sum_cpu_memory(Containers), max_cpu_memory(InitContainers))
// Pod:
// InitContainers
// IC1:
// CPU: 2
// Memory: 1G
// IC2:
// CPU: 2
// Memory: 3G
// Containers
// C1:
// CPU: 2
// Memory: 1G
// C2:
// CPU: 1
// Memory: 1G
//
// Result: CPU: 3, Memory: 3G
PodFitsResources:cpu和memory以及gpu等是否匹配
PodMatchNodeSelector:nodeSelector和nodeAffinity是否匹配
Volume过滤
NoDiskConflict:不同Pod使用的PV是否有冲突
MaxPDVolumeCountPredicate:节点上PV卷数量是否达到上限
VolumeBindingPredicate:PV nodeAffinity是否匹配
宿主机过滤
PodToleratesNodeTaints:Pod是否容忍节点污点
NodeMemoryPressurePredicate:节点内存是否不足
Pod过滤
PodAffinityPredicate:待调度Pod与Node上已有Pod亲和与反亲和
优选
给预选出来的节点打0-10分,得分最高者作为调度节点。
选择空闲CPU和Memory最多的宿主机
LeastRequestedPriority
score = (cpu((allocatable-sum(requested))*10/allocatable) + memory((allocatable-sum(requested))*10/allocatable))/2
选择调度后各种资源分配最均衡的节点(计算方差,避免节点上CPU大量分配而Memory大量剩余)
BalancedResourceAllocation
fraction=request/allocatable
mean := (cpuFraction + memoryFraction + volumeFraction) / float64(3)
variance := float64((((cpuFraction - mean)^2) + ((memoryFraction - mean)^2) + ((volumeFraction - mean)^2)) / float64(3))
score = (1 - variance(cpuFraction,memoryFraction,volumeFraction))*10
还有 NodeAffinityPriority、TaintTolerationPriority 和 InterPodAffinityPriority,与 PodMatchNodeSelector、PodToleratesNodeTaints 和 PodAffinityPredicate 类似。Node满足规则数目越多,得分越高。
ImageLocalityPriority:Pod使用镜像大并已存在于Node上,这些Node得分高。
参考资料
标签:预选,allocatable,节点,scheduler,Memory,Pod,kube,CPU,mean From: https://www.cnblogs.com/WJQ2017/p/17471583.html