开源项目
ray-project/kuberay avatar
ray-project/kuberay

KubeRay 评测:用三个 CRD 把 Ray 工作负载搬上 Kubernetes

项目速览:在 Kubernetes 上运行 Ray 应用程序的工具包。 Kubectl 插件(Beta):从 KubeRay v1.3.0 开始,您可以使用 kubectl ray 插件来简化在 Kubernetes 上部署 Ray 时的常见工作流程。

2,683 个 Star851 个 ForkGoApache-2.0
GitHub

秒懂

它是什么?
KubeRay 是 Ray 官方维护的 Kubernetes operator,通过 RayCluster、RayJob、RayService 三个自定义资源管理 Ray 应用的生命周期。本文基于仓库文档和发布信息,分析其机制、上手路径与适用边界。
适合谁用?
KubeRay 适合已经在用 Ray、并且希望把训练、批处理或 Serve 部署统一收编到 Kubernetes 的团队。它由 Ray 官方维护,CRD 设计直接对应 Ray 的核心概念,学习成本比自建调度器低。
能商用吗?
可以。Apache-2.0 是宽松许可证:你可以使用、修改并销售基于它的软件,只需保留版权和许可证声明。
还在维护吗?
在维护。仓库在最近一天内有新的提交。
用什么语言写的?
主要是 Go(依据 GitHub 的语言统计)。

以上回答依据项目的 GitHub 数据(最近同步于 2026年9月15日)和我们的分析,不构成法律意见。

开源项目深度解析

它解决的是 Ray 上云时的资源编排问题

Ray 是一个分布式计算框架,但 Ray 自身不负责在 Kubernetes 上创建和销毁 Pod。KubeRay 填补的正是这个空档:它是一个 Kubernetes operator,用自定义资源描述 Ray 集群的期望状态,然后由 controller 去调和实际状态。仓库 README 明确说,KubeRay 提供三个核心 CRD:RayCluster、RayJob、RayService。RayCluster 管理集群的创建、删除、自动扩缩容和故障恢复;RayJob 在集群就绪后自动提交作业,并可配置作业结束后自动删除集群;RayService 则把 RayCluster 和 Ray Serve 部署图组合在一起,提供零停机升级和高可用。如果你是平台工程师,负责给数据科学团队提供统一的 Kubernetes 环境,KubeRay 就是 Ray 官方给出的答案。它把 Ray 的部署细节封装成声明式资源,让 GitOps 流程可以直接管理训练和推理工作负载。

三个 CRD 的分工与数据流

从 README 的描述可以看出,三个 CRD 覆盖了 Ray 应用的三种典型生命周期。RayCluster 是最底层的基础,它定义 head 节点和 worker 节点的规格、副本数、自动扩缩容策略。RayJob 在 RayCluster 之上加了一层作业语义:你提交一个 RayJob,controller 会先创建 RayCluster,等集群 ready 再提交 job,完成后可以自动回收集群。RayService 则面向在线推理,它包含一个 RayCluster 和一个 Serve 部署图,升级时通过滚动方式保证服务不中断。数据流大概是:用户写一个 YAML 描述期望状态,KubeRay operator 监听 API server 的变化,然后创建或更新底层的 Deployment、Service、Pod 等 Kubernetes 资源。Ray 应用本身还是通过 Ray 的 GCS(Global Control Service)和 worker 进程通信,KubeRay 只负责把这些进程放到 Pod 里并维持其数量。

上手路径:从 Quickstart 到 kubectl ray 插件

KubeRay 的文档从 2023 年 9 月起迁移到了 Ray 官方文档站,仓库里只保留开发和维护相关的内容。Quickstart 分三个入口:RayCluster、RayJob、RayService,各自有独立的快速开始指南。安装方式没有在 README 里直接给出命令,但根据仓库结构和发布信息,典型的做法是用 Helm chart 或者直接 apply operator 的 manifest。从 v1.3.0 开始,KubeRay 提供了 kubectl ray 插件,目前是 Beta 状态。这个插件面向不熟悉 Kubernetes 的用户,它把常见的 Ray 部署工作流简化成 kubectl 子命令。比如你不需要手写完整的 RayCluster YAML,插件可以帮你生成和管理。不过 README 也明确说插件是 Beta,意味着 API 可能变化,生产环境要谨慎。

生态组件:APIServer 和 Dashboard 都还没成熟

除了核心 operator,KubeRay 还有三个可选组件。kubectl 插件是 Beta,APIServer 是 Alpha,Dashboard 是 Experimental。APIServer 提供一层简化的配置接口,README 说它被一些组织内部用来支撑 KubeRay 资源管理的 UI。这意味着如果你需要给非 K8s 专家提供图形界面,APIServer 是必经之路,但它还处于 Alpha,API 可能不稳定。Dashboard 从 v1.4.0 开始引入,可以查看和管理 KubeRay 资源,但 README 明确说 not yet production-ready。这三个组件的成熟度差异很大,选型时要分清主次。核心 CRD 是官方完全维护的,生态组件则是可选且实验性的。

与 Kubernetes 生态的集成面

README 列出了一系列集成对象:可观测性工具如 Prometheus、Grafana、py-spy,排队系统如 Volcano、Apache YuniKorn、Kueue,以及 Nginx 等 ingress controller。这说明 KubeRay 不是孤岛,它依赖 Kubernetes 的扩展机制来对接现有设施。比如你用 Kueue 做批量工作负载的排队,RayJob 可以配合它控制集群的创建时机。用 Prometheus 监控 Ray 集群时,KubeRay 负责暴露指标端点。这种集成方式意味着你不需要为 Ray 单独搭建一套监控或调度系统,而是复用 K8s 生态。但这也带来一个隐含成本:你需要同时理解 Ray 和 Kubernetes 两套系统的运维知识。

真实世界的采用案例与边界

README 里列出了多家公司的实践,包括 Workday 将 Ray 扩展到 1 万个模型,Klaviyo 用 Ray Serve 做模型服务,DoorDash 做时间序列集成学习,Spotify 和 Reddit 也出现在 Ray Summit 的分享列表中。这些案例说明 KubeRay 在大型互联网公司有实际落地,但要注意它们大多是 Ray 生态的推广材料,不能当作独立评测。KubeRay 的边界在于:它管理的是 Ray 集群的生命周期,不解决 Ray 应用层面的问题,比如 Python 依赖冲突、任务调度策略、内存溢出等。另外,自动扩缩容依赖 Ray 的 autoscaler 与 Kubernetes 的交互,配置不当可能导致资源抖动。如果你只需要在 K8s 上跑一个简单的单机 Ray 脚本,KubeRay 是过度设计。

维护成本与许可证

KubeRay 采用 Apache-2.0 许可证,对商业使用友好,没有 copyleft 约束。发布节奏看起来是每两个月左右一个 minor 版本,v1.6.2 到 v1.7.0 大约隔了两个月。这意味着你需要跟上版本更新,因为 operator 的 CRD 可能随版本演进。升级时要注意 CRD 的 schema 变化,以及 Ray 版本与 KubeRay 的兼容性。README 没有给出具体的升级步骤,但通常 operator 项目会提供 Helm chart 的升级命令。维护成本主要体现在三方面:一是跟踪 Ray 和 KubeRay 的版本匹配,二是管理自定义资源的大量 YAML 配置,三是排查 operator 与 Kubernetes 集群版本的兼容问题。如果你没有专门的平台团队,这些成本可能比想象中高。

替代方案:直接写 Deployment 还是用其他 operator

不用 KubeRay,你还有两条路。一条是手动把 Ray head 和 worker 写成 Kubernetes Deployment 和 Service,再用 CronJob 或 Argo Workflows 触发作业。这种方式灵活,但你要自己处理 head 发现、worker 注册、故障重启和扩缩容,相当于重复造轮子。另一条是使用其他通用工作负载编排器,比如 Volcano 或 Kueue,它们管理批处理任务的排队和调度,但不理解 Ray 的集群语义。KubeRay 的优势在于它专门为 Ray 设计,CRD 直接对应 Ray 的概念,比如 RayCluster 里的 workerGroupSpecs 对应 Ray 的 worker 组。代价是你被绑定在 Ray 生态内,如果未来不用 Ray,这套 CRD 就失去意义。

编辑结论

KubeRay 适合已经在用 Ray、并且希望把训练、批处理或 Serve 部署统一收编到 Kubernetes 的团队。它由 Ray 官方维护,CRD 设计直接对应 Ray 的核心概念,学习成本比自建调度器低。不适合以下情况:你的工作负载只是偶尔跑几个 Python 脚本,不需要集群级的弹性与故障恢复;或者你希望 operator 提供完整的 UI 和高级配置层,那要等 KubeRay Dashboard 和 APIServer 脱离 Alpha 阶段。采用前先验证三件事:确认你的 Kubernetes 版本与 KubeRay 的兼容矩阵,阅读 docs.ray.io 上关于 RayCluster 的快速入门,检查你用的 Ray 版本是否与 KubeRay v1.7.0 匹配。KubeRay 的边界很清楚:它管理 Ray 集群的生命周期,不替你解决 Ray 应用本身的调优问题。

官方来源

  1. Official README
  2. Project repository
  3. Release notes
社区笔记

社区笔记