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號