volcano基本知识
volcano基本知识
基本组成
volcano由scheduler、controllermanager、admission和vcctl组成.
-
volcano scheduler
Volcano scheduler通过一系列的action和plugin调度Job,并为它找到一个最适合的节点。与Kubernetes default-scheduler相比,Volcano与众不同的 地方是它支持针对Job的多种调度算法。
-
Volcano controllermanager
管理CRD资源的生命周期。它主要由Queue ControllerManager、 PodGroupControllerManager、 VCJob ControllerManager构成。
-
volcano admission
负责对CRD API资源进行校验。
-
volcano vcctl
volcano的命令行客户端工具
重要概念
Queue队列
queue用于容纳一组podgroup的队列,也是该组podgroup获取集群资源的划分依据;每一个podGroup都是一个job。
apiVersion: scheduling.volcano.sh/v1beta1
kind: Queue
metadata:
creationTimestamp: "2024-12-30T09:31:12Z"
generation: 1
name: test
resourceVersion: "987630"
uid: 88babd01-c83f-4010-9701-c2471c1dd040
spec:
capability:
cpu: "8"
memory: 16Gi
# deserved字段仅用于capacity插件
deserved: # deserved表示该queue内所有podgroup的资源应得量,若该queue已分配资源量超过了设置的deserved值,则queue中已分配的资源可被其他queue回收
cpu: "4"
memory: 8Gi
guarantee: # 该queue为自己队列中的所有podgroup预留的资源,其他队列无法使用该部分资源
resource:
cpu: "2"
memory: 4Gi
priority: 100
reclaimable: true
# weight字段仅用于proportion插件
weight: 1
status:
allocated:
cpu: "0"
memory: "0"
state: Open
Open
该queue当前处于可用状态,可接收新的podgroup
Closed
该queue当前处于不可用状态,不可接收新的podgroup
Closing
该Queue正在转化为不可用状态,不可接收新的podgroup
Unknown
该queue当前处于不可知状态,可能是网络或其他原因导致queue的状态暂时无法感知
default queue
volcano启动后,会默认创建名为default的queue。后续下发的job,若未指定queue,默认属于default queue
root queue
volcano启动后,同样会默认创建名为root的queue,该queue为开启层级队列功能时使用,作为所有队列的根队列,default queue为root queue的子队列
podGroup
podgroup是一组强关联pod的集合,主要用于批处理工作负载场景,比如Tensorflow中的一组ps和worker。它是volcano自定义资源类型。
apiVersion: scheduling.volcano.sh/v1beta1
kind: PodGroup
metadata:
creationTimestamp: "2020-08-11T12:28:55Z"
generation: 5
name: test
namespace: default
ownerReferences:
- apiVersion: batch.volcano.sh/v1alpha1
blockOwnerDeletion: true
controller: true
kind: Job
name: test
uid: 028ecfe8-0ff9-477d-836c-ac5676491a38
resourceVersion: "109074"
selfLink: /apis/scheduling.volcano.sh/v1beta1/namespaces/default/podgroups/job-1
uid: eb2508f5-3349-439c-b94d-4ac23afd71ff
spec:
minMember: 1
minResources:
cpu: "3"
memory: "2048Mi"
priorityClassName: high-prority
queue: default
status:
conditions:
- lastTransitionTime: "2020-08-11T12:28:57Z"
message: '1/0 tasks in gang unschedulable: pod group is not ready, 1 minAvailable.'
reason: NotEnoughResources
status: "True"
transitionID: 77d5be3f-6169-4f86-8e65-0bdc621ce983
type: Unschedulable
- lastTransitionTime: "2020-08-11T12:29:02Z"
reason: tasks in gang are ready to be scheduled
status: "True"
transitionID: 54514401-5c90-4b11-840d-90c1cda93096
type: Scheduled
phase: Running
running: 1
podGroup的状态
-
pending
pending表示该podgroup已经被volcano接纳,但是集群资源暂时不能满足它的需求。一旦资源满足,该podgroup将转变为running状态。
-
running
running表示该podgroup至少有minMember个pod或任务处于running状态。
-
unknown
unknown表示该podgroup中minMember数量的pod或任务分为2种状态,部分处于running状态,部分没有被调度。没有被调度的原因可能是资源不够等。调度器将等待kube-controller重新拉起这些pod或任务。当podGroup状态为未知时,pod将无法被volcano-scheduler调度 -
inqueue
inqueue表示该podgroup已经通过了调度器的校验并入队,即将为它分配资源。inqueue是一种处于pending和running之间的中间状态。
volcano job
当创建vcjob(Volcano Job的简称)时,若没有指定该vcjob所属的podgroup,默认会为该vcjob创建同名的podgroup。
Volcano Job,简称vcjob,是Volcano自定义的Job资源类型。区别于Kubernetes Job,vcjob提供了更多高级功能,如可指定调度器、支持最小运行pod数、 支持task、支持生命周期管理、支持指定队列、支持优先级调度等。Volcano Job更加适用于机器学习、大数据、科学计算等高性能计算场景。
Enqueue action筛选符合要求的作业进入待调度队列。当一个Job下的最小资源申请量不能得到满足时,即使为Job下的Pod执行调度动作,Pod也会因为gang约束没有达到而无法进行调度。只有当集群资源满足作业声明的最小资源需求时,Enqueue action才允许该作业入队,使得PodGroup的状态由Pending状态转换为Inqueue状态。
这个状态转换是Pod创建的前提,只有PodGroup进入Inqueue状态后,vc-controller才会为该PodGroup创建Pod。这种机制确保了Pod只会在资源满足的情况下被创建,是调度器配置中必不可少的action。
当vcjob没有指定所属podGroup时,将会默认为该vcjob创建同名的podGroup。

浙公网安备 33010602011771号