PodGroup

最近更新于 Jul 31, 2021

定义

podgroup是一组强关联pod的集合,主要用于批处理工作负载场景,比如Tensorflow中的一组ps和worker。它是volcano自定义资源类型。

样例

  1. apiVersion: scheduling.volcano.sh/v1beta1
  2. kind: PodGroup
  3. metadata:
  4. creationTimestamp: "2020-08-11T12:28:55Z"
  5. generation: 5
  6. name: test
  7. namespace: default
  8. ownerReferences:
  9. - apiVersion: batch.volcano.sh/v1alpha1
  10. blockOwnerDeletion: true
  11. controller: true
  12. kind: Job
  13. name: test
  14. uid: 028ecfe8-0ff9-477d-836c-ac5676491a38
  15. resourceVersion: "109074"
  16. selfLink: /apis/scheduling.volcano.sh/v1beta1/namespaces/default/podgroups/job-1
  17. uid: eb2508f5-3349-439c-b94d-4ac23afd71ff
  18. spec:
  19. minMember: 1
  20. minResources:
  21. cpu: "3"
  22. memory: "2048Mi"
  23. priorityClassName: high-prority
  24. queue: default
  25. status:
  26. conditions:
  27. - lastTransitionTime: "2020-08-11T12:28:57Z"
  28. message: '1/0 tasks in gang unschedulable: pod group is not ready, 1 minAvailable.'
  29. reason: NotEnoughResources
  30. status: "True"
  31. transitionID: 77d5be3f-6169-4f86-8e65-0bdc621ce983
  32. type: Unschedulable
  33. - lastTransitionTime: "2020-08-11T12:29:02Z"
  34. reason: tasks in gang are ready to be scheduled
  35. status: "True"
  36. transitionID: 54514401-5c90-4b11-840d-90c1cda93096
  37. type: Scheduled
  38. phase: Running
  39. running: 1

关键字段

  • minMember

minMember表示该podgroup下最少需要运行的pod或任务数量。如果集群资源不满足miniMember数量任务的运行需求,调度器将不会调度任何一个该podgroup 内的任务。

  • queue

queue表示该podgroup所属的queue。queue必须提前已创建且状态为open。

  • priorityClassName

priorityClassName表示该podgroup的优先级,用于调度器为该queue中所有podgroup进行调度时进行排序。system-node-criticalsystem-cluster-critical 是2个预留的值,表示最高优先级。不特别指定时,默认使用default优先级或zero优先级。

  • minResources

minResources表示运行该podgroup所需要的最少资源。当集群可分配资源不满足minResources时,调度器将不会调度任何一个该podgroup内的任务。

  • phase

phase表示该podgroup当前的状态。

  • conditions

conditions表示该podgroup的具体状态日志,包含了podgroup生命周期中的关键事件。

  • running

running表示该podgroup中当前处于running状态的pod或任务的数量。

  • succeed

succeed表示该podgroup中当前处于succeed状态的pod或任务的数量。

  • failed

failed表示该podgroup中当前处于failed状态的pod或任务的数量。

资源状态

PodGroup - 图1

status-DAG

  • pending

pending表示该podgroup已经被volcano接纳,但是集群资源暂时不能满足它的需求。一旦资源满足,该podgroup将转变为running状态。

  • running

running表示该podgroup至少有minMember个pod或任务处于running状态。

  • unknown

unknown表示该podgroup中minMember数量的pod或任务分为2种状态,部分处于running状态,部分没有被调度。没有被调度的原因可能是资源不够等。调度 器将等待controller重新拉起这些pod或任务。

  • inqueue

inqueue表示该podgroup已经通过了调度器的校验并入队,即将为它分配资源。inqueue是一种处于pending和running之间的中间状态。

使用场景

  • minMember的使用

在某些场景下,可能会只需要某个任务的子任务运行达到一定的数量,即可认为本次任务可以运行,如机器学习训练。这种情况下适合使用minMember字段。

  • priorityClassName的使用

priorityClassName用于podgroup的优先级排序,可用于任务抢占调度场景。它本身也是一种资源。

  • minResources的使用

在某些场景下,任务的运行必须满足最小资源要求,不满足则不能运行该任务,如某些大数据分析场景。这种情况下适合使用minResources字段。

说明事项

  • 自动创建podgroup

当创建vcjob(Volcano Job的简称)时,若没有指定该vcjob所属的podgroup,默认会为该vcjob创建同名的podgroup。