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

SLA

概述

当用户向 Volcano 提交作业时,可能需要为作业添加特定约束,例如最长 Pending 时间以防止作业饥饿。这些约束可视为 Volcano 与用户之间约定的服务级别协议(SLA)。SLA 插件用于接收并执行针对单个作业和整个集群的 SLA 设置。

工作原理

SLA 插件监控作业的等待时间,并在 SLA 约束被违反时采取相应措施:

  • JobWaitingTime:作业在 Pending 状态下允许等待的最长时间
  • JobEnqueuedFn:在作业入队前检查是否满足 SLA 要求

当作业的等待时间超过配置的阈值时,调度器可采取纠正措施,例如提升作业优先级或通知管理员。

应用场景

用户可根据业务需求在自己的集群中自定义 SLA 相关参数:

实时服务

对于有高实时性要求的集群,可将 JobWaitingTime 设置得尽量小,以确保作业被快速调度或被标记为需关注。

批量计算

对于主要运行批量计算作业的集群,可将 JobWaitingTime 设置得较大,以允许更灵活的时间窗口内进行调度。

多租户环境

在多租户集群中,不同队列或命名空间可以根据其服务等级设置不同的 SLA 要求。

配置

在调度器 ConfigMap 中启用 SLA 插件:

tiers:
- plugins:
- name: priority
- name: gang
- name: sla
arguments:
sla.JobWaitingTime: 10m

配置参数

参数说明默认值
sla.JobWaitingTime作业的最长等待时间-

JobWaitingTime 参数使用时长格式指定(例如 5m1h30s)。

示例

集群级 SLA 配置

apiVersion: v1
kind: ConfigMap
metadata:
name: volcano-scheduler-configmap
namespace: volcano-system
data:
volcano-scheduler.conf: |
actions: "enqueue, allocate, backfill"
tiers:
- plugins:
- name: priority
- name: gang
- name: sla
arguments:
sla.JobWaitingTime: 30m
- plugins:
- name: drf
- name: predicates
- name: proportion
- name: nodeorder

带 SLA 注解的作业

也可以在作业级别指定 SLA 约束:

apiVersion: batch.volcano.sh/v1alpha1
kind: Job
metadata:
name: sla-constrained-job
annotations:
volcano.sh/sla-waiting-time: "10m"
spec:
schedulerName: volcano
minAvailable: 1
tasks:
- replicas: 1
name: worker
template:
spec:
containers:
- name: worker
image: busybox
command: ["sleep", "3600"]

在此示例中,若作业在 Pending 状态下等待超过 10 分钟,SLA 插件将其标记为需优先调度或提醒管理员关注。

监控 SLA 违规

Volcano 暴露的指标可用于监控 SLA 合规情况:

  • 作业等待时间指标
  • SLA 违规计数
  • 队列级 SLA 统计数据

这些指标可与 Prometheus 等监控系统集成,以跟踪整个集群的 SLA 合规状态。