Skip to main content

Volcano提供了一系列注解(Annotations),可以应用于PodPodGroup资源,用于控制调度行为和资源分配。这些注解提供了一种简单而强大的方式来影响Volcano的调度决策,而无需修改复杂的配置文件或自定义资源定义。

常用注解及其作用

注解适用对象作用示例值
volcano.sh/queue-namePod, PodGroup指定资源应该被分配到哪个队列"default"
volcano.sh/preemptablePod标记Pod是否可被抢占"true","false"
volcano.sh/task-specPod指定Pod所属的任务类型"default"
volcano.sh/num-podsPodGroup指定PodGroup中需要的Pod数量"5"
volcano.sh/min-availablePodGroup指定PodGroup最小可用Pod数量"3"
volcano.sh/priorityClassNamePodGroup指定PodGroup的优先级类名"high-priority"
volcano.sh/resource-reservationPodGroup是否为PodGroup预留资源"true","false"
volcano.sh/job-typePodGroup指定作业类型,影响调度策略"MPI","TensorFlow"

注解使用示例

  1. Pod分配到特定队列

    apiVersion: v1
    kind: Pod
    metadata:
    name: example-pod
    annotations:
    volcano.sh/queue-name: "high-priority-queue"
    spec:
    schedulerName: volcano
    containers:
    - name: example-container
    image: nginx
  2. 设置PodGroup的最小可用数量

    apiVersion: scheduling.volcano.sh/v1beta1
    kind: PodGroup
    metadata:
    name: example-podgroup
    annotations:
    volcano.sh/min-available: "3"
    spec:
    minMember: 5
    queue: default
  3. 标记 Pod 为可抢占

    可抢占(Preemptable)是Volcano中的一个重要概念,它允许集群在资源紧张时为高优先级任务让出资源。当标记为可抢占时:

    • Pod可能会在运行过程中被终止,以释放资源给更高优先级的任务
    • 适用于容错性高、可以中断的工作负载,如批处理任务、后台分析等
    • 可以提高集群资源利用率,允许低优先级任务在资源空闲时运行,高优先级任务来时自动让出
    apiVersion: v1
    kind: Pod
    metadata:
    name: preemptable-pod
    annotations:
    volcano.sh/preemptable: "true"
    spec:
    schedulerName: volcano
    containers:
    - name: example-container
    image: nginx

    当集群资源紧张时,调度器会优先抢占标记为volcano.sh/preemptable: "true"Pod,而不是随机选择。这使得集群管理员可以明确指定哪些工作负载可以被安全地中断。

注解的优势

使用注解控制Volcano行为有以下优势:

  1. 简单易用:无需创建复杂的自定义资源,只需添加注解即可
  2. 灵活性:可以针对单个PodPodGroup进行精细控制
  3. 兼容性:与现有Kubernetes工作负载控制器(如DeploymentStatefulSet)良好集成
  4. 动态调整:可以通过更新注解动态调整调度行为,而无需重启组件

通过合理使用这些注解,用户可以更精细地控制Volcano的调度行为,满足不同场景下的资源分配和调度需求。