ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Volcano——配置理解

Volcano——配置理解

Volcano配置

apiVersion: v1
kind: ConfigMap
metadata:name: volcano-scheduler-configmapnamespace: volcano-system
data:volcano-scheduler.conf: |actions: "enqueue, allocate, backfill"tiers:- plugins:- name: priority- name: gang- name: conformance- plugins:- name: drf- name: predicates- name: proportion- name: nodeorder- name: binpack

actions

actions表示调度需要执行的动作。

Volcano每次调度会创建一个session,并按actions中配置的动作依次执行。

每个action里都设定好了执行逻辑,里面会调用session上的处理函数(xxxFn),这些函数都是由各个插件添加的。执行顺序参考tiers的配置。

// runOnce executes a single scheduling cycle. This function is called periodically
// as defined by the Scheduler's schedule period.
func (pc *Scheduler) runOnce() {klog.V(4).Infof("Start scheduling ...")scheduleStartTime := time.Now()defer klog.V(4).Infof("End scheduling ...")pc.mutex.Lock()actions := pc.actionsplugins := pc.pluginsconfigurations := pc.configurationspc.mutex.Unlock()// Load ConfigMap to check which action is enabled.conf.EnabledActionMap = make(map[string]bool)for _, action := range actions {conf.EnabledActionMap[action.Name()] = true}ssn := framework.OpenSession(pc.cache, plugins, configurations)defer func() {framework.CloseSession(ssn)metrics.UpdateE2eDuration(metrics.Duration(scheduleStartTime))}()for _, action := range actions {actionStartTime := time.Now()action.Execute(ssn)metrics.UpdateActionDuration(action.Name(), metrics.Duration(actionStartTime))}
}

tiers

上面配置中的tiers里有两个数组,在每个action里执行插件处理的时候,会按照tiers里定义的数组顺序以及组里插件顺序进行。

Volcano代码示例:

func (ssn *Session) JobOrderFn(l, r interface{}) bool {for _, tier := range ssn.Tiers {for _, plugin := range tier.Plugins {if !isEnabled(plugin.EnabledJobOrder) {continue}jof, found := ssn.jobOrderFns[plugin.Name]if !found {continue}if j := jof(l, r); j != 0 {return j < 0}}}// If no job order funcs, order job by CreationTimestamp first, then by UID.lv := l.(*api.JobInfo)rv := r.(*api.JobInfo)if lv.CreationTimestamp.Equal(&rv.CreationTimestamp) {return lv.UID < rv.UID}return lv.CreationTimestamp.Before(&rv.CreationTimestamp)
}

 

返回列表