Ray 集群管理与批调度
从一次 RayJob 提交开始,追踪资源由谁创建、状态怎样传递、故障后根据什么恢复,再分析多个作业争用资源时的调度过程。
Ray 可以独立部署;Kubernetes 是本系列选择的研究场景,Volcano 按调度需求接入。初次接触这些项目,可以从第 0 篇开始;熟悉基础概念的读者可以从第 1 篇进入源码。
背景导引
- 源码阅读导引:Ray、Kubernetes、KubeRay 与 Volcano
从一个 Python 程序的计算与部署需求出发,解释 Ray、Kubernetes、KubeRay 与 Volcano 的职责和采用条件,并给出全系列的源码阅读路线。
KubeRay:集群管理、协调与恢复
- KubeRay 源码阅读:从 RayJob 看组件分工与协作
沿一次 RayJob 提交,追踪 RayCluster、head、worker 和 submitter 的创建、状态交接与清理,分清集群管理与用户计算。
- KubeRay 源码阅读:一次 Pod 变化怎样触发 Reconcile
从 worker Pod 的状态变化进入监听、缓存和工作队列,跟踪一次 Reconcile,以及事件、延时和错误怎样触发下一轮协调。
- KubeRay 源码阅读:一个 Operator 如何管理 100 个 RayCluster
以 100 个 RayCluster 为推演场景,分析协调协程、队列键锁、缓存滞后与 expectations,区分管理并发和 Ray 计算并发。
- KubeRay 源码阅读:Operator 重启后如何继续工作
把中断放在资源创建与状态写回之间,沿持久化身份、对象查询和重试分支,分析 Operator 重启后的恢复依据与防重边界。
- KubeRay 源码阅读:从 Operator 主备切换到 Ray 服务恢复
从 Operator 的 Lease 选主与接管,追到 Kubernetes 控制面、Ray head、GCS 和 RayService,分别核对管理恢复、计算恢复与请求可用性。
Volcano:批调度与 KubeRay 接入
- Volcano 源码阅读:从 Pod 到作业
从几个 Pod 争用资源的问题进入 Volcano,区分 Job、PodGroup、Queue,以及 Scheduler、Controller Manager 和 Admission 的协作。
- Volcano 源码阅读:一次调度怎样满足 Gang 约束
跟踪一个 PodGroup 在 Session 中的准入、试分配、Gang 检查、提交与绑定,解释分配撤销和部分绑定失败的处理边界。
- Volcano 源码阅读:多个作业怎样共享与竞争资源
用有明确前提的数字例子分析 Queue 份额、DRF、优先级和资源回收,区分策略计算、节点放置与实际 Pod 占用。
- KubeRay 与 Volcano:从 RayJob 到 PodGroup
沿 KubeRay 的 Volcano 适配器,核对 PodGroup、成员标记、submitter 启动依赖与资源记账,再分析完成、暂停和重试后的清理。
源码与推演范围
全系列使用固定源码基线:KubeRay 6bf05eb17a3e、Ray 3f785c0711b9、Volcano d8984501e4ad。完整提交和对应文件链接保留在各篇文末的“参考资料”。
容量、时间线与故障场景均为有明确前提的源码推演,没有集群压测、故障注入或两端部署兼容性实验结果。版本条件、配置变化和失败分支按各篇正文阅读。