Ray 集群管理与批调度

从一次 RayJob 提交开始,追踪资源由谁创建、状态怎样传递、故障后根据什么恢复,再分析多个作业争用资源时的调度过程。

Ray 可以独立部署;Kubernetes 是本系列选择的研究场景,Volcano 按调度需求接入。初次接触这些项目,可以从第 0 篇开始;熟悉基础概念的读者可以从第 1 篇进入源码。

背景导引

  1. 源码阅读导引:Ray、Kubernetes、KubeRay 与 Volcano

    从一个 Python 程序的计算与部署需求出发,解释 Ray、Kubernetes、KubeRay 与 Volcano 的职责和采用条件,并给出全系列的源码阅读路线。

KubeRay:集群管理、协调与恢复

  1. KubeRay 源码阅读:从 RayJob 看组件分工与协作

    沿一次 RayJob 提交,追踪 RayCluster、head、worker 和 submitter 的创建、状态交接与清理,分清集群管理与用户计算。

  2. KubeRay 源码阅读:一次 Pod 变化怎样触发 Reconcile

    从 worker Pod 的状态变化进入监听、缓存和工作队列,跟踪一次 Reconcile,以及事件、延时和错误怎样触发下一轮协调。

  3. KubeRay 源码阅读:一个 Operator 如何管理 100 个 RayCluster

    以 100 个 RayCluster 为推演场景,分析协调协程、队列键锁、缓存滞后与 expectations,区分管理并发和 Ray 计算并发。

  4. KubeRay 源码阅读:Operator 重启后如何继续工作

    把中断放在资源创建与状态写回之间,沿持久化身份、对象查询和重试分支,分析 Operator 重启后的恢复依据与防重边界。

  5. KubeRay 源码阅读:从 Operator 主备切换到 Ray 服务恢复

    从 Operator 的 Lease 选主与接管,追到 Kubernetes 控制面、Ray head、GCS 和 RayService,分别核对管理恢复、计算恢复与请求可用性。

Volcano:批调度与 KubeRay 接入

  1. Volcano 源码阅读:从 Pod 到作业

    从几个 Pod 争用资源的问题进入 Volcano,区分 Job、PodGroup、Queue,以及 Scheduler、Controller Manager 和 Admission 的协作。

  2. Volcano 源码阅读:一次调度怎样满足 Gang 约束

    跟踪一个 PodGroup 在 Session 中的准入、试分配、Gang 检查、提交与绑定,解释分配撤销和部分绑定失败的处理边界。

  3. Volcano 源码阅读:多个作业怎样共享与竞争资源

    用有明确前提的数字例子分析 Queue 份额、DRF、优先级和资源回收,区分策略计算、节点放置与实际 Pod 占用。

  4. KubeRay 与 Volcano:从 RayJob 到 PodGroup

    沿 KubeRay 的 Volcano 适配器,核对 PodGroup、成员标记、submitter 启动依赖与资源记账,再分析完成、暂停和重试后的清理。

源码与推演范围

全系列使用固定源码基线:KubeRay 6bf05eb17a3e、Ray 3f785c0711b9、Volcano d8984501e4ad。完整提交和对应文件链接保留在各篇文末的“参考资料”。

容量、时间线与故障场景均为有明确前提的源码推演,没有集群压测、故障注入或两端部署兼容性实验结果。版本条件、配置变化和失败分支按各篇正文阅读。