官网链接:/
Volcano Scheduler是负责Pod调度的组件,它由一系列action和plugin组成。action定义了调度各环节中需要执行的动作;plugin根据不同场景提供了action 中算法的具体实现细节。Volcano scheduler具有高度的可扩展性,您可以根据需要实现自己的action和plugin。
Volcano scheduler的工作流程如下:
Enqueue action负责通过一系列的过滤算法筛选出符合要求的待调度任务并将它们送入待调度队列。经过这个action,任务的状态将由pending变为inqueue。
Allocate action负责通过一系列的预选和优选算法筛选出最适合的节点。
Preempt action负责根据优先级规则为同一队列中高优先级任务执行抢占调度。
Reclaim action负责当一个新的任务进入待调度队列,但集群资源已不能满足该任务所在队列的要求时,根据队列权重回收队列应得资源。
backfill action负责将处于pending状态的任务尽可能的调度下去以保证节点资源的最大化利用。
gang plugin认为未处于ready状态(包括Binding、Bound、Running、Allocated、Succeed、Pipelined)的任务具有更高的优先级。它会检查假如驱逐某 些任务回收队列部分应得资源后,该任务所属的Job中任务的运行数量是否满足minAvailable的要求,以决定是否执行驱逐动作。
conformance plugin认为命名空间kube-system下的任务具有更高的优先级。这些任务不能被抢占。
DRF plugin认为占用资源较少的任务具有更高的优先级。它会尝试计算已分配给抢占者和被抢占者的资源总量,并在抢占者资源资源份额更少时触发抢占行为。
nodeorder plugin通过一系列维度的打分算法,算出针对某个任务时所有的节点的得分情况。得分最高的节点被认为是针对该任务最合适的节点。
predictions plugin通过一系列维度的评估算法,决定某个任务是否适合被绑定到某个节点。
priority plugin用于比较两个job或任务的优先级。它通过比较job.spec.priorityClassName来决定哪个job的优先级更高。对于两个任务,它会依次比较 task.priorityClassName、ateTime、task.id in order来决定谁的优先级更高。
由于Volcano scheduler采用了组合模式的设计,它具有高度的扩展性。用户可以根据个人需要决定使用哪些action和plugin,也可以根据action和plugin的 接口自定义实现。scheduler的配置位于名为volcano-scheduler-configmap的configmap内,该configmap被作为volume挂载在容器的/volcano.scheduler 路径下。
查看名为volcano-scheduler-configmap的configmap
[root@VM-0-16-centos ~]# kubectl get cm -nti-inf |grep volcano-scheduler
volcano-scheduler-configmap 1 6d5h
查看configmap的data部分详情
以下配置为当前测试环境配置:生产环境配置建议先查阅资料了解action和plugin内容之后根据当前应用场景进行调配。
[root@VM-0-16-centos ~]# kubectl get cm -nti-inf volcano-scheduler-configmap -oyaml
apiVersion: v1
f: |actions: "enqueue, reserve, allocate, backfill, preempt"tiers:- plugins:- name: reserveresourcearguments:reserve.cpu: : 4Gi- plugins:- name: priority- name: gang- name: conformance- plugins:- name: predicates- name: nodeorderarguments:nodeaffinity.weight: 20podaffinity.weight: 20bizaffinity.weight: 20resourcefit.weight: 1leastrequested.weight: 0balancedresource.weight: 1imagelocality.weight: 1similaraffinity.weight: 1- name: preemptnodeorder
kind: ConfigMap
metadata:annotations:meta.helm.sh/release-name: volcanometa.helm.sh/release-namespace: ti-infcreationTimestamp: "2021-12-15T07:29:41Z"labels:app.kubernetes.io/managed-by: Helmname: volcano-scheduler-configmapnamespace: ti-infresourceVersion: "11213455"selfLink: /api/v1/namespaces/ti-inf/configmaps/volcano-scheduler-configmapuid: fb96b080-f946-45fe-8844-770c90c1790c
在f中主要包括actions和tiers两部分。在actions中,使用逗号作为分隔符配置各需要执行的action。需要注意的是,action的配置 顺序就是scheduler的执行顺序。Volcano本身不会对action顺序的合理性进行检查。tiers中配置的plugin列表即为注册到scheduler中的plugin。plugin中 实现的算法将会被action调用。
本文发布于:2024-02-02 04:14:42,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170681848441287.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |