Skip to content

1. 背景:为什么 Ray 需要 KubeRay

一句话理解:Ray 解决“分布式计算怎么写”,KubeRay 解决“分布式计算集群在 Kubernetes 上怎么管”。

1.1 Ray 的强大与部署痛点

Ray 是一个统一的分布式计算框架,提供:

  • Tasks:无状态分布式函数。
  • Actors:有状态分布式对象。
  • Objects:Plasma 对象存储。
  • Train/Serve/Data/Tune/RLlib:高层库覆盖训练、服务、数据、超参、强化学习。

在单台机器或几台 VM 上启动 Ray 很简单:

bash
ray start --head
ray start --address="head-ip:6379"

但当场景进入生产环境,问题迅速复杂化:

痛点手工方案的问题
Pod 管理需要手动创建/维护 head Pod、worker Pod、Service、Ingress。
扩缩容需要监听 Ray 资源需求,再手动改 Deployment/StatefulSet 副本数。
故障恢复Head Pod 重启后 GCS 状态丢失,worker 无法重连。
作业提交用户需要知道 head 地址、Dashboard 端口、认证方式。
Serve 升级升级 Ray Serve 应用时无法做到零停机。
GPU/TPU 调度需要把 K8s 资源限制正确映射到 Ray 资源。
多租户Namespace、RBAC、网络隔离、资源配额需要自行拼装。

1.2 Kubernetes 为什么是 Ray 的最佳底座

Kubernetes 已经解决了大规模集群管理的大部分问题:

  • 调度:CPU/内存/GPU/TPU 资源调度、节点亲和、拓扑感知。
  • 生命周期:Pod 创建、删除、滚动升级、健康检查。
  • 网络:Service、DNS、Ingress、NetworkPolicy。
  • 存储:PVC、ConfigMap、Secret。
  • 可观测性:Metrics、Logs、Tracing。
  • 多租户:Namespace、RBAC、ResourceQuota、LimitRange。

把 Ray 放在 K8s 上,本质上是把 Ray 的“计算语义”嫁接到 K8s 的“基础设施语义”。

1.3 KubeRay 的出现

KubeRay 是 Ray 官方维护的 Kubernetes Operator,提供三个核心 CRD:

  • RayCluster:描述一个 Ray 集群的 desired state。
  • RayJob:描述一个提交到 Ray 集群的作业。
  • RayService:描述一个长期运行的 Ray Serve 服务。

用户写 YAML,KubeRay Operator 负责:

  1. 创建 Head Pod、Worker Pod、Service、Ingress。
  2. 注入 Autoscaler sidecar,根据 Ray 资源需求自动扩缩容。
  3. 支持 GCS Fault Tolerance,让 Head 重启后集群状态可恢复。
  4. 管理 RayJob 的提交、运行、完成、清理。
  5. 为 RayService 实现蓝绿升级与零停机切换。

1.4 KubeRay 与相关项目对比

项目定位与 KubeRay 的关系
Ray分布式计算框架KubeRay 是 Ray 在 K8s 上的部署形态
KubeRayK8s Operator for Ray官方推荐方式
Volcano / YuniKorn / scheduler-pluginsK8s 批调度器KubeRay 可集成以实现 Gang Scheduling
KueueK8s 作业队列与配额可与 KubeRay 结合实现弹性训练队列
KServeK8s 模型服务平台可加载 Ray Serve 端点
MLflow实验追踪与模型注册训练作业跑在 KubeRay 上,模型注册到 MLflow

1.5 典型使用场景

场景 1:分布式训练

yaml
apiVersion: ray.io/v1
kind: RayJob
metadata:
  name: llm-finetune
spec:
  entrypoint: python train.py --model llama3 --data s3://bucket/dataset
  rayClusterSpec:
    headGroupSpec:
      rayStartParams:
        num-cpus: "0"
    workerGroupSpecs:
      - groupName: gpu-workers
        replicas: 2
        minReplicas: 0
        maxReplicas: 8
        template:
          spec:
            containers:
              - resources:
                  limits:
                    nvidia.com/gpu: "4"

场景 2:在线推理服务

yaml
apiVersion: ray.io/v1
kind: RayService
metadata:
  name: llm-serve
spec:
  serveConfigV2: |
    applications:
      - name: llm
        import_path: serve_model:app
  rayClusterConfig:
    gcsFaultToleranceOptions:
      redisAddress: redis:6379

场景 3:弹性数据处理

yaml
apiVersion: ray.io/v1
kind: RayCluster
metadata:
  name: etl-cluster
spec:
  enableInTreeAutoscaling: true
  autoscalerOptions:
    idleTimeoutSeconds: 120
  workerGroupSpecs:
    - groupName: cpu-workers
      minReplicas: 0
      maxReplicas: 50

1.6 发展历程

  • 2021:KubeRay 项目启动,作为社区 Operator。
  • 2022:成为 Ray 官方项目,CRD 稳定到 ray.io/v1
  • 2023-2024:加入 RayJob、RayService、GCS FT、Batch Scheduler 集成。
  • 2025-2026:推出 Autoscaler V2、Incremental Upgrade、Kubernetes RBAC 认证、RayCronJob、Ray History Server。

本章小结

  • Ray 解决分布式计算,KubeRay 解决 Ray 在 K8s 上的生命周期管理。
  • KubeRay 让 Ray Cluster、Job、Serve 全部变成声明式 YAML。
  • 它与 K8s、Operator、Ray、KServe、MLflow、Kueue 等紧密协作。

参考来源

Released under CC-BY-SA-4.0 License.