跳到主要内容
版本:v1.13.0 (最新版)

user_guide_how_to_configure_scheduler


title: "如何配置调度器"

要求

  • 在阅读本指南之前,请确保您了解一些基本概念,例如 actionpluginsessiontiervolcano jobpodgroupqueue 等。如果您仍然不熟悉这些概念,请参阅 Volcano 文档

了解更多详情。

  • 在阅读本指南之前,请确保您对 Volcano 调度工作流程有基本的了解。

背景

为了根据不同的场景调整调度流程和算法,Volcano 允许用户配置操作

和插件。调度管道由一系列操作组成。插件实现了算法, 这些算法将作为已注册的会话函数在操作中调用。正如您在 configmap volcano-scheduler-configmap 中看到的那样,

插件默认分为 2 个层级。这可能会让一些用户感到困惑。此外,还需要提供关于如何配置 Volcano 调度器的指南。

要点

  • 所有配置都在 volcano-scheduler-configmap 中进行,该配置位于命名空间 volcano-system 下。

  • 配置由两部分组成:actionstiers

  • actions 定义了调度管道。它们将在每个会话中按顺序执行。

  • tiers 将插件分为几个类别。插件中定义的所有函数将在会话打开时注册,并在执行操作时调用。

  • 在某些情况下,用户可能会配置注册相同函数的不同插件。如何组合这些函数取决于业务需求。这就是需要 tiers 的原因。

Actions

  • Action 实现了调度的主要逻辑。

  • Volcano 允许用户创建自定义操作。

  • Volcano 提供 7 个内置操作,有效期至 2022 年 4 月。详情如下:

| ID | 名称 | 是否必需 | 描述 |

|-----|----------|----------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|

| 1 | enqueue | Y | 判断集群中的空闲资源是否可以满足工作负载的基本需求。如果可以,则将工作负载的 Pod 组状态设置为 inqueue,否则保持 Pod 组状态为 pending。请注意,参数 overcommit-factor 的默认值为 1.2。|

| 2 | allocate | Y | 尝试将资源分配给 Pod 组状态为 inqueue 的工作负载。|

| 3 | backfill | N | 尝试将资源分配给 Pod 状态为 BestEffort 的工作负载。|

| 4 | preempt | N | 识别高优先级工作负载。尝试驱逐低优先级 Pod 并将资源分配给它们。|

| 5 | 回收 | N | 找出资源已被其他队列借用的队列并回收这些资源。|

| 6 | 选择 | N | 选择满足某些条件的工作负载。它旨在与目标工作负载的资源预留配合使用。将在未来的版本中弃用。|

| 7 | 预留 | N | 选择一系列节点并预留资源。它旨在与目标工作负载的资源预留配合使用。将在未来的版本中弃用。|

层级和插件

  • Plugin 通过注册一系列函数来提供有关调度算法的实现细节。这些函数

将在执行操作期间被调用。

  • 通常,一个插件主要由 3 个函数组成:NameOnSessionOpenOnSessionCloseName 提供插件的名称。

OnSessionOpen 在会话启动时执行一些操作并注册一些有关调度细节的函数。

OnSessionClose