Kueue¶
Kueue 是一个 Kubernetes 原生的系统,用于管理配额及 Job 如何消耗配额的使用。 Kueue 决定 Job 何时应该等待,何时可以启动(即创建 Pod),以及何时需要抢占(即删除活动的 Pod)。
为什么使用 Kueue¶
你可以在一个标准的 Kubernetes 集群上安装 Kueue。 Kueue 不会替换任何现有的 Kubernetes 组件。Kueue 适用于以下云环境:
- 计算资源具有弹性,可以扩容和缩容。
- 计算资源是异构的(在架构、可用性、价格等方面存在差异)。
Kueue API 允许你定义:
- 在租户之间公平分享的配额和策略。
- 资源的可替代性:如果某种资源类型已被完全使用,Kueue 可以使用另一种资源类型来允许 Job 进行。
Kueue 的核心设计原则是避免重复 Kubernetes 组件和成熟第三方控制器中的功能。 自动扩展、Pod 到节点的调度和 Job 生命周期管理分别由 cluster-autoscaler、kube-scheduler 和 kube-controller-manager 负责。 高级的准入控制可以交给如 gatekeeper 这样的控制器。
功能概述¶
- Job 管理: 支持基于优先级的 Job 排队, 并提供不同的策略:
StrictFIFO和BestEffortFIFO。 - 资源管理: 支持资源的公平分享和抢占,在不同租户之间提供多种策略。
- 动态资源回收: 提供一种机制,当 Job 的 Pod 完成时,释放配额。
- 资源类型的可替代性: 在 ClusterQueue 和 Cohort 中实现配额的借用或抢占。
- 集成: 内置对流行 Job 的支持,例如 BatchJob、 Kubeflow 训练 Job 、 RayJob、 RayCluster、 JobSet、 普通 Pod。
- 系统洞察: 内置的 Prometheus 指标帮助监控系统状态,以及条件。
- AdmissionChecks: 提供一种机制,允许内部或外部组件影响 Job 是否可以被允许。
- 高级自动扩展支持: 通过 AdmissionChecks 与 cluster-autoscaler 的 provisioningRequest 集成。
- 顺序准入: 简单实现全有或全无调度。
- 部分准入: 如果应用支持,允许 Job 以较小的并行度运行,基于可用的配额。