k8s之Kueue 中的抢占策略详解

Kueue 中的抢占策略详解

Kueue 是一个 Kubernetes 原生的队列系统,用于管理工作负载的资源分配。当集群或队列组资源不足时,Kueue 提供了灵活的抢占机制来确保高优先级工作负载能够获得所需资源。以下是 Kueue 中抢占策略的详细说明:

抢占策略概述

抢占策略通过 spec.preemption 字段配置,包含三种主要策略类型:

  1. reclaimWithinCohort - 队列组内资源回收
  2. borrowWithinCohort - 队列组内资源借用时的抢占
  3. withinClusterQueue - 集群队列内部的抢占

如果不设置这些策略,默认都是不开启抢占功能。

1. reclaimWithinCohort(队列组内资源回收)

当队列中出现排队工作负载时,此策略决定如何从借用了该队列资源的其他队列回收资源。

可选值

  • Never(默认值):不触发资源回收
  • LowerPriority:仅当资源被优先级较低的工作负载借用时触发回收
  • Any:不考虑优先级,直接回收被借用的资源

工作流程

  1. 检查当前队列的 nominalQuota 是否足够满足新工作负载
  2. 如果不足,检查资源是否被队列组内其他队列借用
  3. 根据策略决定是否回收这些资源

2. borrowWithinCohort(队列组内资源借用时的抢占)

此策略控制当队列需要从队列组借用资源时,是否可以通过抢占其他队列的资源来获得。

前提条件

  • 必须同时开启 reclaimWithinCohort 并设置为非 Never 值

配置参数

  • maxPriorityThreshold:设置可被抢占的工作负载的最高优先级阈值
  • policy:抢占策略类型

策略类型

  • Never(默认值):不允许通过抢占来借用资源
  • LowerPriority:只允许抢占优先级低于当前工作负载的资源

3. withinClusterQueue(集群队列内部抢占)

此策略控制是否可以在同一集群队列内抢占其他工作负载的资源。

可选值

  • Never(默认值):不开启队列内抢占
  • LowerPriority:只能抢占优先级低于自身的工作负载
  • LowerOrNewerEqualPriority:更复杂的抢占规则:
    • 可以抢占优先级低于自身的工作负载
    • 对于相同优先级的工作负载,只能抢占比自身创建时间晚的工作负载(防止大任务被饿死)

策略组合与交互

这些策略可以组合使用,形成多层次的资源保障机制:

  1. 首先尝试从本队列回收被借出的资源(reclaimWithinCohort)
  2. 如果仍不足,尝试从队列组其他队列抢占资源(borrowWithinCohort)
  3. 最后考虑从本队列其他工作负载抢占资源(withinClusterQueue)

使用场景示例

场景1:确保高优先级工作负载优先运行

preemption:
  reclaimWithinCohort: LowerPriority
  borrowWithinCohort:
    maxPriorityThreshold: 100
    policy: LowerPriority
  withinClusterQueue: LowerPriority

场景2:严格保障队列资源不被抢占

preemption:
  reclaimWithinCohort: Never
  borrowWithinCohort:
    policy: Never
  withinClusterQueue: Never

场景3:公平调度,防止大任务饿死

preemption:
  withinClusterQueue: LowerOrNewerEqualPriority

这些策略的组合为集群管理员提供了精细化的资源管理能力,可以根据不同工作负载类型和组织策略进行灵活配置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值