Kube Queue:Kubernetes 任务排队的利器
内容提要
批处理作业常用于数据处理、仿真计算、科学计算和人工智能等领域。Kubernetes调度器在任务排队方面存在局限性,缺少自动化排队机制、多样化排队策略和多队列能力。Kube Queue是阿里云容器服务ACK的一个关键组件,解决了Kubernetes调度器的问题。
延伸解读
Kube Queue 与调度器的职责划分
Kube Queue 属于第一类 Queue,与 Kubernetes Scheduler 分层协作。Queue 负责任务排序和生命周期管理,Scheduler 负责 Pod 的节点编排。这种设计避免了替换默认调度器,但任务出队后可能因节点亲和性、资源碎片化等因素无法调度,导致队头阻塞。因此 Kube Queue 引入了任务无法调度时重新入队的机制,以缓解该问题。
三种排队策略的适用场景
Kube Queue 提供轮转、阻塞和严格优先级三种策略。轮转策略是默认策略,确保每个任务都有机会调度,适合希望最大化资源利用率的场景。阻塞策略只调度队首任务,避免小任务占用轮转时间导致大任务长时间 Pending,适合保证任务优先级的场景。严格优先级策略则优先尝试调度高优先级任务,是前两者的折中。
Queue 与 QueueUnit 抽象的价值
Kube Queue 通过 Queue 和 QueueUnit 两个核心抽象简化了任务排队。Queue 是队列实体,包含策略、Quota 和排队参数,并能自动感知 Resource Quota、Elastic Quota 和 ElasticQuotaTree,用户只需配置上层 Quota。QueueUnit 是任务实体,屏蔽了实际 Job 类型,任何任务只需实现 Extension 排队接口即可接入,减少了 Controller 需要监听的对象类型和 Api Server 连接数,提升了可扩展性。
使用 Kube Queue 的注意事项
使用 Kube Queue 前需安装 kube-queue 组件并配置 ElasticQuotaTree 以声明队列资源。提交任务时需将 Job 的 .spec.suspend 设为 true,以便 Kube Queue 接管排队。默认超卖比为 2,允许出队两倍配置资源的任务,可根据需要调整。任务出队后若在可配置超时时段内未完成调度,会被重新入队,防止队头阻塞。
Q&A
Kubernetes 调度器在任务排队方面有哪些不足?
Kubernetes 调度器在任务排队方面存在四个主要不足:缺少自动化的排队机制,导致大量 Pending Pod 拖慢调度器;缺少多样化的排队策略,难以应对不同任务排队需求;缺少多队列能力,无法隔离不同用户或租户的任务;大量任务类型难以统一,将不同计算逻辑集成到调度器会增加维护复杂性。
Kube Queue 是什么?它主要解决什么问题?
Kube Queue 是阿里云容器服务 ACK 的云原生 AI 套件中的一个关键组件,旨在解决 Kubernetes 调度器在任务调度场景中存在的问题。它通过与 Arena 组件以及弹性 Quota 特性结合,支持多种 AI 任务自动排队和多租户 Quota 管理。
Kube Queue 的工作机制是怎样的?
Kube Queue 的工作机制围绕 Queue 和 QueueUnit 两个核心抽象。Queue 代表队列实体,包含策略、Quota 等信息;QueueUnit 代表任务实体,屏蔽实际 Job 类型。工作流程包括:任务提交和入队、任务排队和等待调度、任务出队和执行调度。
Kube Queue 提供了哪些排队策略?分别适用于什么场景?
Kube Queue 提供三种排队策略:轮转策略(默认),确保每个任务均有机会调度,推荐在希望保证集群资源利用率时使用;阻塞策略,只调度队列最前端的任务,推荐在希望保证任务优先级时使用;严格优先级策略,优先调度高优先级任务,是轮转和阻塞的折中策略。
如何快速上手使用 Kube Queue 进行任务排队?
首先安装 kube-queue 组件,可在 ACK 云原生 AI 套件页面一键安装。然后提交一个 ElasticQuotaTree 申明队列,配置资源配额和命名空间。接着提交 Job 并将 .spec.suspend 设置为 true。任务提交后,Kube Queue 会自动控制任务按顺序执行。
Kubernetes 中的 Queue 可以分为哪两类?各有什么特点?
Kubernetes 中的 Queue 分为两类:第一类 Queue 与 Scheduler 属于不同分层,Queue 负责任务排序和生命周期管理,Scheduler 负责 Pod 编排,但可能因节点亲和性等因素导致队头阻塞,需要重新入队机制,代表有 Kube Queue 和 Kueue;第二类 Queue 与 Scheduler 耦合,任务确保能调度才出队,避免队头阻塞,但需替换默认调度器,代表有 Volcano 和 YuniKorn。