K8S调度器Schduler工作原理--Priority优选算法过程分析

本文深入探讨了K8S Scheduler的工作流程,重点解析了Priority优选阶段,包括PriorityFunction和Map-Reduce类型的算法,以及如何通过Combine过程整合结果,最终选择最佳节点进行Pod调度。
摘要由CSDN通过智能技术生成

Scheduler工作流程

我们在使用K8S集群时,常常需要对Deployment Controller做创建、修改、删除操作,K8S对应的会创建、销毁和重新调度Pod在合适的节点上,这个调度过程是通过K8S的Scheduler调度器实现的。Schduler的工作流程如下图所示:
在这里插入图片描述
Informer组件一直在监听etcd中Pod信息的变化,准确来说,监听的是Pod信息中Spec.nodeName字段的变化,一旦检测到该字段为空,则认为集群中有Pod尚未调度到Node中,这时Informer开始将这个Pod的信息加入队列中,同时更新Scheduler Cache缓存。接下来Pod信息从队列中出队,进入Predicates(预选阶段),该阶段通过一系列的预选算法选出集群中适合Pod运行的节点,带着这些信息进入Priorities(优选阶段)。同理,该阶段通过一系列的优选算法为适合该Pod调度对每个Node进行打分,最后选出集群中最适合(也就是分数最高的)Pod运行的一个节点,最后将这个节点和Pod进行绑定(Bind),更新缓存,从而实现Pod的调度。

Priority优选流程

整个优选流程如下图:

将需要调度的Pod列表和Node列表传入各种优选算法进行打分,最终整合成结果集HostPriorityList:

type HostPriority struct {
   
	Host string
	Score int
}
type HostPriorityList []HostPriority

这个HostPriorityList数组保存了每个Node的名字和它对应的分数,最后选出分数最高的Node对Pod进行绑定和调度。
那么优选算法具体是怎样工作的呢?我们来看看源码中的优选算法结构体PriorityConfig:

type PriorityConfig struct {
   
   Name   string
   Map    PriorityMapFunction
   Reduce PriorityReduceFunction
   // TODO: Remove it after migrating all functions to
   // Map-Reduce pattern.
   Function PriorityFunction
   Weight   int
}

优选算法由一系列的PriorityConfig(也就是PriorityConfig数组)组成,每个Config代表了一个算法,Config描述了名字Name、权重Weight、Function(一种优选算法函数类型)、Map-Reduce(Map和Reduce成对出现,是另一种优选算法函数类型)。需要调度的Pod分别对每个合适的Node(N)执行每个优选算法(A)进行打分,最后得到一个二维数组,元素分别为A1N1,A1N2,A1N3… ,行代表一个算法对应不同的Node计算得到的分值,列代表同一个Node对应不同算法的分值:

N1 N2 N3
A1 { Name:“node1”,Score:5,PriorityConfig:{…weight:1}} { Name:“node2”,Score:3,PriorityConfig:{…weight:1}} { Name:“node3”,Score:1,PriorityConfig:{…weight:1}}
A2 { Name:“node1”,Score:6,PriorityConfig:{…weight:1}} { Name:“node2”,Score:2,PriorityConfig:{…weight:1}} { Name:“node3”,Score:3,PriorityConfig:{…weight:1}}
A3 { Name:“node1”,Score:4,PriorityConfig:{…weight:1}} { Name:“node2”,Score:7,PriorityConfig:{…weight:1.}} { Name:“node3”,Score:2,PriorityConfig:{…weight:1}}

最后将结果合并(Combine)成一维数组HostPriorityList :

HostPriorityList =[{ Name:"node1",Score:15},{ Name:"node2",Score:12},{ Name:"node3",Score:6}]

这样就完成了对每个Node进行优选算法打分的流程

Fucntion类型优选算法

具体的优选算法分为两种,先介绍第一种PriorityFunction类型的优选算法。

type PriorityFunction func(pod *v1.Pod, nodeNameToInfo map[string]*schedulercache.NodeInfo, nodes []*v1.Node
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值