Background
When a user creates a job, if there is no PriorityClassName specified in the template of the task, the task will use the PriorityClassName specified by the job. The user can specify PriorityClassName in each task’s template to override the configuration of job, so that priority can be configured separately for each task.
Key Points
- If the task does not specify
PriorityClassNamebut the job does, the task will use the job’s PriorityClass, and thePreemptionPolicyand priority value will also be the same as the job. - When user needs to allow task in job to preempt other tasks if the resources are insufficient, a separate
PriorityClassNamemust be set in the task’s template, and it is important to note that if there are multiple tasks that need to be set to different priorities, then user need to set thePriorityClassNamefor all of them, otherwise the task that does not specifyPriorityClassNamewill use the PriorityClass of the job it belongs to.
Example
apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:
name: job-priority
value: 1
preemptionPolicy: Never
---
apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:
name: task-priority
value: 10
---
apiVersion: batch.volcano.sh/v1alpha1
kind: Job
metadata:
name: job
spec:
schedulerName: volcano
priorityClassName: job-priority
minAvailable: 1
tasks:
- replicas: 1
name: preempt-task
template:
spec:
priorityClassName: task-priority # The priorityclass is specified individually for this task
containers:
- image: alpine
command: ["/bin/sh", "-c", "sleep 1000"]
name: preempt
resources:
requests:
cpu: 1
- replicas: 1
name: non-preempt-task # This task does not specify PriorityClassName, so it will use the "job-priority" priorityclass specified by job
template:
spec:
containers:
- image: alpine
command: ["/bin/sh", "-c", "sleep 1000"]
name: non-preempt
resources:
requests:
cpu: 1