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表示该podgroupminMember数量的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。

posted @ 2025-05-29 00:32  LemHou  阅读(140)  评论(0)    收藏  举报