kubernetes-sigs/kueue

GitHub: kubernetes-sigs/kueue

Kueue 是 Kubernetes 原生的作业排队管理系统,用于优化批处理和 AI 训练工作负载的资源分配与调度。

Stars: 2346 | Forks: 544

# Kueue [![GoReport Widget]][GoReport Status] [![Latest Release](https://img.shields.io/github/v/release/kubernetes-sigs/kueue?include_prereleases)](https://github.com/kubernetes-sigs/kueue/releases/latest) kueue logo Kueue 是一组用于 [job](https://kueue.sigs.k8s.io/docs/concepts/workload) [队列管理](https://kueue.sigs.k8s.io/docs/concepts#queueing) 的 API 和控制器。它是一个作业级管理器,决定何时[准入](https://kueue.sigs.k8s.io/docs/concepts#admission)(admitted)作业以启动(即可以创建 Pod),以及何时应该停止(即应删除活跃 Pod)。 阅读[概述](https://kueue.sigs.k8s.io/docs/overview/)并观看 Kueue 相关的[演讲与演示](https://kueue.sigs.k8s.io/docs/talks_and_presentations/)以了解更多信息。 ## 功能概述 - **作业管理:** 支持基于[优先级](https://kueue.sigs.k8s.io/docs/concepts/workload/#priority)的作业排队,并提供不同的[策略](https://kueue.sigs.k8s.io/docs/concepts/cluster_queue/#queueing-strategy):`StrictFIFO` 和 `BestEffortFIFO`。 - **高级资源管理:** 包括:[资源风味可替代性](https://kueue.sigs.k8s.io/docs/concepts/cluster_queue/#flavorfungibility)(resource flavor fungibility)、[公平共享](https://kueue.sigs.k8s.io/docs/concepts/preemption/#fair-sharing)(Fair Sharing)、[队列组](https://kueue.sigs.k8s.io/docs/concepts/cluster_queue/#cohort)(cohorts)以及不同租户之间具有多种策略的[抢占](https://kueue.sigs.k8s.io/docs/concepts/cluster_queue/#preemption)(preemption)。 - **集成:** 内置支持流行的作业类型,例如 [BatchJob](https://kueue.sigs.k8s.io/docs/tasks/run/jobs/)、[Kubeflow training jobs](https://kueue.sigs.k8s.io/docs/tasks/run/kubeflow/)、[RayJob](https://kueue.sigs.k8s.io/docs/tasks/run/rayjobs/)、[RayCluster](https://kueue.sigs.k8s.io/docs/tasks/run/rayclusters/)、[JobSet](https://kueue.sigs.k8s.io/docs/tasks/run/jobsets/)、[普通 Pod 和 Pod 组](https://kueue.sigs.k8s.io/docs/tasks/run/plain_pods/)。 - **系统洞察:** 内置 [prometheus 指标](https://kueue.sigs.k8s.io/docs/reference/metrics/)以帮助监控系统状态,以及用于[监控待处理工作负载](https://kueue.sigs.k8s.io/docs/tasks/manage/monitor_pending_workloads/pending_workloads_on_demand/)的按需可见性端点。 - **AdmissionChecks:** 一种允许内部或外部组件影响工作负载是否可以被[准入](https://kueue.sigs.k8s.io/docs/concepts/admission_check/)的机制。 - **高级自动扩缩容支持:** 通过 admissionChecks 与 cluster-autoscaler 的 [provisioningRequest](https://kueue.sigs.k8s.io/docs/concepts/admission_check/provisioning_request/#job-using-a-provisioningrequest) 集成。 - **全有或全无的 就绪 Pod:** 基于[All-or-nothing 调度](https://kueue.sigs.k8s.io/docs/tasks/manage/setup_wait_for_pods_ready/)的超时实现。 - **部分准入与动态回收:** 基于可用配额以[降低的并行度](https://kueue.sigs.k8s.io/docs/tasks/run/jobs/#partial-admission)运行作业,并在 Pod 完成后[释放](https://kueue.sigs.k8s.io/docs/concepts/workload/#dynamic-reclaim)配额的机制。 - **混合训练与推理:** 同时管理批处理工作负载和服务工作负载(例如 [Deployments](https://kueue.sigs.k8s.io/docs/tasks/run/deployment/) 或 [StatefulSets](https://kueue.sigs.k8s.io/docs/tasks/run/statefulset/))。 - **多集群作业调度:** 称为 [MultiKueue](https://kueue.sigs.k8s.io/docs/concepts/multikueue/),允许搜索容量并分担主集群负载。 - **拓扑感知调度:** 通过[感知数据中心拓扑的调度](https://kueue.sigs.k8s.io/docs/concepts/topology_aware_scheduling/)来优化 Pod 间通信吞吐量。 ## 生产就绪状态 - ✔️ API 版本:v1beta2,遵守 [Kubernetes 弃用策略](https://kubernetes.io/docs/reference/using-api/deprecation-policy/) - ✔️ 最新的[文档](https://kueue.sigs.k8s.io/docs)。 - ✔️ 测试覆盖率: - ✔️ 单元测试 [testgrid](https://testgrid.k8s.io/sig-scheduling#periodic-kueue-test-unit-main)。 - ✔️ 集成测试 [testgrid](https://testgrid.k8s.io/sig-scheduling#periodic-kueue-test-integration-main) - ✔️ MultiKueue 集成测试 [testgrid](https://testgrid.k8s.io/sig-scheduling#periodic-kueue-test-integration-multikueue-main) - ✔️ Kubernetes E2E 测试 [1.32](https://testgrid.k8s.io/sig-scheduling#periodic-kueue-test-e2e-main-1-32), [1.33](https://testgrid.k8s.io/sig-scheduling#periodic-kueue-test-e2e-main-1-33), [1.34](https://testgrid.k8s.io/sig-scheduling#periodic-kueue-test-e2e-main-1-34), [1.35](https://testgrid.k8s.io/sig-scheduling#periodic-kueue-test-e2e-main-1-35), 基于 Kind。 - ✔️ E2E TAS 测试 [testgrid](https://testgrid.k8s.io/sig-scheduling#periodic-kueue-test-e2e-tas-main) - ✔️ E2E 自定义配置测试 [testgrid](https://testgrid.k8s.io/sig-scheduling#periodic-kueue-test-e2e-customconfigs-main) - ✔️ E2E Cert Manager 测试 [testgrid](https://testgrid.k8s.io/sig-scheduling#periodic-kueue-test-e2e-certmanager-main) - ✔️ 性能测试 [testgrid](https://testgrid.k8s.io/sig-scheduling#periodic-kueue-test-scheduling-perf-main) - ✔️ 通过[性能测试](https://github.com/kubernetes-sigs/kueue/tree/main/test/performance)验证可扩展性。 - ✔️ 通过[指标](https://kueue.sigs.k8s.io/docs/reference/metrics)进行监控。 - ✔️ 安全性:基于 RBAC 的访问控制。 - ✔️ 稳定的[发布](RELEASE.md)周期(2-3 个月)。 - ✔️ [采用者](https://kueue.sigs.k8s.io/docs/adopters/)正在生产环境中运行。 _基于社区反馈,我们继续简化和演进 API 以解决新的用例_。 ## 安装 **需要 Kubernetes 1.29 或更新版本**。 要在集群中安装最新版本的 Kueue,请运行以下命令: ``` kubectl apply --server-side -f https://github.com/kubernetes-sigs/kueue/releases/download/v0.16.2/manifests.yaml ``` 控制器运行在 `kueue-system` 命名空间中。 阅读[安装指南](https://kueue.sigs.k8s.io/docs/installation/)以了解更多信息。 ## 用法 可以通过运行[示例](site/static/examples)来设置最小配置: ``` kubectl apply -f examples/admin/single-clusterqueue-setup.yaml ``` 然后你可以使用以下命令运行作业: ``` kubectl create -f examples/jobs/sample-job.yaml ``` 了解更多关于: - Kueue [概念](https://kueue.sigs.k8s.io/docs/concepts)。 - 常见和高级[任务](https://kueue.sigs.k8s.io/docs/tasks)。 ## 路线图 2026 年主要优先事项的高层概览: - 改善 [MultiKueue](https://kueue.sigs.k8s.io/docs/concepts/multikueue/) - 多集群作业调度的用户体验,特别是: * 支持 Elastic RayJob [#8712](https://github.com/kubernetes-sigs/kueue/issues/8712) * 工作负载级准入约束和偏好感知 MultiKueue 调度 [#8729](https://github.com/kubernetes-sigs/kueue/issues/8729) * 防止在多个 worker 集群中启动抢占 [#8303](https://github.com/kubernetes-sigs/kueue/issues/8303) * 支持长期运行的服务 [#8526](https://github.com/kubernetes-sigs/kueue/issues/8526) * 从 worker 集群获取日志 [#3526](https://github.com/kubernetes-sigs/kueue/issues/3526) - 改善 [拓扑感知调度](https://kueue.sigs.k8s.io/docs/concepts/topology_aware_scheduling/)的用户体验,特别是: * 支持 ResourceTransformations [#8860](https://github.com/kubernetes-sigs/kueue/issues/8860) * 支持 [Elastic Workloads](https://kueue.sigs.k8s.io/docs/concepts/elastic_workload/) [#8160](https://github.com/kubernetes-sigs/kueue/issues/8160) * 驱逐在变为污点的节点上运行的工作负载 [#8838](https://github.com/kubernetes-sigs/kueue/issues/8828) - 与 k8s 原生 Workload-Aware Scheduler (WAS) 和 Topology-Aware Scheduling 集成 [#8871](https://github.com/kubernetes-sigs/kueue/issues/8871) - 支持并发工作负载准入 [#8691](https://github.com/kubernetes-sigs/kueue/issues/8691) - 支持运行 hero workloads [#8826](https://github.com/kubernetes-sigs/kueue/issues/8826) - 在寻找抢占候选者时考虑抢占成本 [#7990](https://github.com/kubernetes-sigs/kueue/issues/7990) - 迈向 Dynamic Resource Allocation (DRA) 集成的 Beta 阶段 [#8243](https://github.com/kubernetes-sigs/kueue/issues/8243) 长期愿景目标: - 服务工作负载的部分抢占 [#3762](https://github.com/kubernetes-sigs/kueue/issues/3762) - 与工作流框架集成 [#74](https://github.com/kubernetes-sigs/kueue/issues/74) - 预算支持 [#28](https://github.com/kubernetes-sigs/kueue/issues/28) - Flavor 分配策略,例如 _最小化成本_ vs _最小化借用_ [#312](https://github.com/kubernetes-sigs/kueue/issues/312) * 对实现检查点的工作负载的协作抢占支持 [#477](https://github.com/kubernetes-sigs/kueue/issues/477) * 用于两阶段准入的延迟抢占 [#3758](https://github.com/kubernetes-sigs/kueue/issues/3758) * 在 Kueue 中支持 Structured Parameters (DRA) [#2941](https://github.com/kubernetes-sigs/kueue/issues/2941) * 将 API 升级至 v1 [#3476](https://github.com/kubernetes-sigs/kueue/issues/3476) ## 社区、讨论、贡献和支持 了解如何在[社区页面](http://kubernetes.io/community/)和[贡献者指南](CONTRIBUTING.md)上与 Kubernetes 社区互动。 你可以通过以下方式联系本项目的维护者: - [Slack](https://kubernetes.slack.com/messages/wg-batch) - [邮件列表](https://groups.google.com/a/kubernetes.io/g/wg-batch) ### 图形资产 - [Kueue](https://github.com/cncf/artwork/tree/main/projects/kubernetes/sub-projects/kueue) - [KueueViz](https://github.com/cncf/artwork/tree/main/projects/kubernetes/sub-projects/kueueviz) ### 行为准则 Kubernetes 社区的参与受 [Kubernetes 行为准则](code-of-conduct.md)管辖。
标签:AI基础设施, BatchJob, EVTX分析, EVTX分析, Go, Golang, HPC, Job-Queueing, Kubeflow, Kueue, Ray, Ruby工具, Volcano, 任务队列, 优先级调度, 安全编程, 容器编排, 工作负载管理, 批处理, 抢占机制, 提示注入, 日志审计, 自动化运维, 自定义请求头, 资源公平共享, 资源调度, 资源配额, 集群管理, 高性能计算