首页/新闻资讯/正文详情

RayCluster 快速入门:在 Kubernetes 上用 KubeRay 部署并运行 Ray 应用

发布时间:2026/9/21 2:46:51 来源:云帆数科 栏目:资讯中心
RayCluster 快速入门:在 Kubernetes 上用 KubeRay 部署并运行 Ray 应用
RayCluster 快速入门在 Kubernetes 上用 KubeRay 部署并运行 Ray 应用【免费下载链接】rayRay is an AI compute engine. Ray consists of a core distributed runtime and a set of AI Libraries for accelerating ML workloads.项目地址: https://gitcode.com/gh_mirrors/ra/ray导读本文是 Ray 官方《RayCluster Quickstart》中文深度指南核心教你如何在 Kubernetes 上通过 KubeRay operator 部署一个 RayCluster 自定义资源CR并掌握三种与集群交互的方式在 head Pod 内直接执行 Python 代码、通过 Ray Job 提交 SDK 从集群外部提交任务、以及访问 Ray dashboard 观察任务与集群状态。读完本文你将能够从零搭建 Kind 本地集群、安装 KubeRay operator、部署并验证 RayCluster、提交并管理 Ray Job最后干净地清理环境——整个过程不依赖任何云厂商。适用前提本指南基于当前仓库对应版本的 KubeRay 1.7.0 与 Ray 2.x 镜像需要本地已安装kubectl 1.23、Helm v3.4、Kind与Docker。准备工作环境依赖与资源要求在动手之前请确认本地环境满足以下条件工具版本要求用途kubectl 1.23与 Kubernetes API 交互管理 Pod、Service、CR 等资源Helm v3.4从 Helm 仓库安装 KubeRay operator 与 RayCluster 示例Kind最新稳定版在本地 Docker 中创建单机 Kubernetes 集群Docker最新稳定版提供 Kind 节点容器运行环境与 Ray 镜像此外请确保你的 Kubernetes 集群至少有 4 核 CPU 和 4 GB 内存。这一步非常关键Ray head/worker Pod 默认带有资源 request/limit资源不足会导致 Pod 长时间停留在Pending状态下文 Step 3 会给出排查方法。如果使用 Kind Docker还需要确认 Docker Desktop 的资源配额不低于上述下限。Step 1创建 Kubernetes 集群如果你还没有可用的 Kubernetes 集群最简单的做法是用 Kind 在本地创建一个单节点集群kind create cluster --imagekindest/node:v1.26.0指定--imagekindest/node:v1.26.0可以固定 Kubernetes 节点镜像版本保证与后续验证流程兼容。创建完成后可用kubectl get nodes确认集群就绪。如果你已有云上或现有的 Kubernetes 集群可以跳过本步骤。Step 2部署 KubeRay operatorKubeRay 是 Ray 官方的开源 Kubernetes operator它将每个 Ray 节点映射为一个 Kubernetes Podhead 节点对应 head Podworker 节点对应 worker Pod。KubeRay 提供了 4 种自定义资源CRD本文使用的是其中的RayCluster由 KubeRay 全权管理其生命周期包括集群的创建/删除、自动扩缩容autoscaling与容错保障。完整安装步骤见 KubeRay Operator 安装指南核心操作如下推荐 Helm 方式helm repo add kuberay https://ray-project.github.io/kuberay-helm/ helm repo update kubectl create namespace ray-system helm install kuberay-operator kuberay/kuberay-operator --version 1.7.0 -n ray-system官方建议把 operator 安装在独立的ray-system命名空间而不是default目的是将 operator 的 ServiceAccount 与业务负载 Pod 隔离。若你更偏好 Kustomize 方式可执行kubectl create -k github.com/ray-project/kuberay/ray-operator/config/default?refv1.7.0 -n ray-system。安装后验证 operator 是否正常运行kubectl get pods -n ray-systemNAME READY STATUS RESTARTS AGE kuberay-operator-6bc45dd644-gwtqv 1/1 Running 0 24s看到kuberay-operator-*Pod 处于Running状态即说明 operator 已就绪它会持续 watch RayCluster 等 CR 的变化并执行调和reconcile逻辑。Step 3部署 RayCluster 自定义资源3.1 通过 Helm 安装示例 RayClusteroperator 运行起来后即可在default命名空间部署一个 RayCluster CR。最简单的方式是直接使用 KubeRay Helm 仓库中自带的示例 charthelm install raycluster kuberay/ray-cluster --version 1.7.0该 chart 会创建一个名为raycluster-kuberay的 RayCluster CR包含 1 个 head Pod 和 1 个 worker Pod镜像为rayproject/ray。创建完成后通过以下命令查看kubectl get rayclustersNAME DESIRED WORKERS AVAILABLE WORKERS CPUS MEMORY GPUS STATUS AGE raycluster-kuberay 1 1 2 3G 0 ready 55s输出中的CPUS2、MEMORY3G表示整个集群head worker向 Ray 暴露的总资源量这与下文提交任务时ray.cluster_resources()打印的结果一致。STATUSready表明 operator 已完成调和集群可用。3.2 理解 RayCluster CR 的核心结构除了 Helm 示例你也可以直接编写 YAML 自定义集群。仓库中的 raycluster_test.yaml 展示了最小可用的 RayCluster 结构apiVersion: ray.io/v1、kind: RayCluster、spec.headGroupSpechead 组配置包括serviceType与容器模板。一个功能完整的 RayCluster 通常还包含rayVersion、workerGroupSpecs可定义多个 worker 组每组可独立设置replicas/minReplicas/maxReplicas与资源以及可选的enableInTreeAutoscaling/autoscalerOptions。仓库测试模板 ray-cluster.autoscaler-template.yaml 是一个很好的参考其中关键字段如下spec.rayVersion声明 Ray 版本所有 Ray 容器必须使用与此一致的镜像spec.headGroupSpec.template.spec.containershead 容器需要暴露三个端口——6379GCS、8265dashboard、10001Ray client并建议配置lifecycle.preStop执行ray stop以便优雅退出spec.workerGroupSpecs[].groupName与replicas/minReplicas/maxReplicas定义 worker 组名与副本数量maxReplicas replicas时配合enableInTreeAutoscaling: true即可启用内置自动扩缩容KubeRay 0.3.0 与 Ray 2.0.0 中为 Beta 特性autoscalerOptions中可配置upscalingMode、idleTimeoutSeconds、imagePullPolicy与 sidecar 的资源 request/limit。3.3 查看集群 Pod 并等待就绪KubeRay operator 检测到 RayCluster 对象后会自动创建 head Pod 和 worker Pod。用 label selector 查看集群的所有 Podkubectl get pods --selectorray.io/clusterraycluster-kuberayNAME READY STATUS RESTARTS AGE raycluster-kuberay-head 1/1 Running 0 XXs raycluster-kuberay-worker-workergroup-xvfkr 1/1 Running 0 XXs请等待所有 Pod 进入Running状态这个过程可能需要几分钟——大部分时间花在拉取 Ray 镜像上。如果 Pod 一直卡在Pending状态通常是因为节点资源不足或镜像拉取受限可用下面的命令查看具体报错kubectl describe pod raycluster-kuberay-xxxx-xxxxx同时确认 Docker 的资源配额满足上文要求的 4 CPU / 4 GB 内存。Step 4在 RayCluster 上运行应用集群就绪后就可以与它交互了。官方提供两种推荐方式各有适用场景。Method 1在 head Pod 内直接执行适合快速实验最直接的实验方式是kubectl exec进入 head Pod 执行命令。首先定位 head Podexport HEAD_POD$(kubectl get pods --selectorray.io/node-typehead -o custom-columnsPOD:metadata.name --no-headers) echo $HEAD_PODraycluster-kuberay-head然后打印集群资源验证 Ray 集群已正确组网kubectl exec -it $HEAD_POD -- python -c import ray; ray.init(); print(ray.cluster_resources())2023-04-07 10:57:46,472 INFO worker.py:1243 -- Using address 127.0.0.1:6379 set in the environment variable RAY_ADDRESS 2023-04-07 10:57:46,472 INFO worker.py:1364 -- Connecting to existing Ray cluster at address: 10.244.0.6:6379... 2023-04-07 10:57:46,482 INFO worker.py:1550 -- Connected to Ray cluster. View the dashboard at http://10.244.0.6:8265 {CPU: 2.0, memory: 3000000000.0, node:10.244.0.6: 1.0, node:10.244.0.7: 1.0, node:__internal_head__: 1.0, object_store_memory: 749467238.0}从输出可以看到head Pod 内的 Ray 进程通过环境变量RAY_ADDRESS指向本地127.0.0.1:6379并连接上 GCS 地址10.244.0.6:6379CPU: 2.0与memory: 3e9正是 Step 3 中kubectl get rayclusters显示的集群总资源node:10.244.0.6与node:10.244.0.7分别是 head 与 worker 两个节点的资源条目。这种方式适合在 head Pod 里做开发调试缺点是你需要能够exec进 Pod且任务生命周期与交互式会话绑定。Method 2通过 Ray Job 提交 SDK 提交任务适合生产与远程提交与方法 1 不同本方式无需进入 head Pod而是在集群外部通过 Ray dashboard 端口默认8265向 Ray 提交任务。KubeRay operator 会自动创建一个指向 head Pod 的 Kubernetes Service先确认它存在kubectl get service raycluster-kuberay-head-svcNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE raycluster-kuberay-head-svc ClusterIP None none 10001/TCP,8265/TCP,6379/TCP,8080/TCP,8000/TCP 57s该 Service 是ClusterIP类型CLUSTER-IPNone为 headless暴露了 head Pod 的多个端口10001Ray client、8265dashboard / Job 提交、6379GCS、8080serve、8000dashboard metrics。因为它是集群内部 IP需要先做端口转发才能从本机访问# 在单独的 shell 中执行 kubectl port-forward service/raycluster-kuberay-head-svc 8265:8265 /dev/null 端口转发就绪后即可在本地提交 Job。下面这个 Job 的日志会打印 Ray 集群的总资源容量包括 2 个 CPUray job submit --address http://localhost:8265 -- python -c import ray; ray.init(); print(ray.cluster_resources())Job submission server address: http://localhost:8265 ------------------------------------------------------- Job raysubmit_8vJ7dKqYrWKbd17i submitted successfully ------------------------------------------------------- Next steps Query the logs of the job: ray job logs raysubmit_8vJ7dKqYrWKbd17i Query the status of the job: ray job status raysubmit_8vJ7dKqYrWKbd17i Request the job to be stopped: ray job stop raysubmit_8vJ7dKqYrWKbd17i Tailing logs until the job exits (disable with --no-wait): 2025-03-18 01:27:51,014 INFO job_manager.py:530 -- Runtime env is setting up. 2025-03-18 01:27:51,744 INFO worker.py:1514 -- Using address 10.244.0.6:6379 set in the environment variable RAY_ADDRESS 2025-03-18 01:27:51,750 INFO worker.py:1832 -- Connected to Ray cluster. View the dashboard at 10.244.0.6:8265 {CPU: 2.0, memory: 3000000000.0, node:10.244.0.6: 1.0, node:10.244.0.7: 1.0, node:__internal_head__: 1.0, object_store_memory: 749467238.0} ------------------------------------------ Job raysubmit_8vJ7dKqYrWKbd17i succeeded ------------------------------------------提交成功后CLI 会输出管理该 Job 的三条命令ray job logs job_id查询日志、ray job status job_id查询状态、ray job stop job_id停止任务。关于 Ray Job 提交的完整概念runtime env、Job 驱动进程、提交 API可参考官方 Ray Jobs 快速入门若希望在 Python 代码中使用 SDK 而非 CLI可参考 Job 提交 SDK 文档 中ray.job_submission.JobSubmissionClient的用法——仓库中的 job_submission 模块 即其实现支持submit_job、get_job_status、get_job_logs、stop_job等核心方法。两种方式如何选择Method 1 适合在 head Pod 内快速验证脚本Method 2 通过 dashboard 端口提交 Job与 Pod 运行时解耦更适合 CI/CD 与远程管理。底层上两者最终都经由 head 上的 GCS6379与 Job 管理器协同调度到集群节点执行。Step 5访问 Ray dashboard在浏览器中访问${YOUR_IP}:8265本机即127.0.0.1:8265即可打开 Ray dashboard。在Recent jobs面板中可以看到 Step 4 中提交的 Job 及其运行状态。由于上面已执行kubectl port-forward service/raycluster-kuberay-head-svc 8265:8265本机访问127.0.0.1:8265即会转发到 head Pod 的 dashboard 端口。dashboard 是排查集群与任务问题的第一入口除了 Recent jobs还可以查看集群资源视图、节点列表与日志仓库 dashboard 前端 基于 React 实现相关逻辑见 dashboard 模块。Step 6清理环境实验结束后按顺序执行清理# 杀掉前面后台运行的 kubectl port-forward killall kubectl # 删除整个 Kind 集群会一并删除其中的 RayCluster 与 operator kind delete cluster若你在真实集群非 Kind上实验可改为helm uninstall raycluster与helm uninstall kuberay-operator -n ray-system分别清理 RayCluster 与 operator。延伸RayCluster 与其它 KubeRay CRD 的选型本文聚焦 RayCluster但在真实场景中你可能还需要了解 KubeRay 的其它 CRD 以便选型详见 KubeRay 快速入门总览RayCluster适合需要长期存活、多次复用、开发调试的场景集群创建一次即可反复提交任务没有每次拉起集群的延迟RayJob适合批处理任务KubeRay 会自动创建集群并在任务结束后按配置删除集群便于节省云上成本升级 Ray 版本时可接受短暂停机RayService适合模型在线服务由 RayCluster Ray Serve 部署图组成支持零停机升级与高可用RayCronJob适合按 cron 表达式周期性运行的任务如定时批处理。如果你的场景是「集群可长期运行、允许手动升级、关注首任务延迟」RayCluster 是最合适的选择——这也是本指南的核心对象。下一站可以继续阅读 RayJob 快速入门 或 RayService 快速入门 深化 KubeRay 的使用。【免费下载链接】rayRay is an AI compute engine. Ray consists of a core distributed runtime and a set of AI Libraries for accelerating ML workloads.项目地址: https://gitcode.com/gh_mirrors/ra/ray创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

Roc 语言 `if` 表达式缺失 `else` 分支的编译诊断深度解析:基于 `expr_if_missing_else` 快照测试
Roc 语言 `if` 表达式缺失 `else` 分支的编译诊断深度解析:基于 `expr_if_missing_else` 快照测试

【免费下载链接】roc A fast, friendly, functional language. 项目地址: https://gitcode.com/GitHub_Trending/ro/roc 点击查看 免费下载 Roc(A fast, friendly, functional language)是一门函数式语言,其 if 是表达式而非语句… · 2026/9/21 2:46:51

Boss直聘岗位数据抓取实战:requests+代理IP池搭建与反爬应对
Boss直聘岗位数据抓取实战:requests+代理IP池搭建与反爬应对

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/21 2:46:51

伺服电机通信协议选型指南:Modbus、CANopen与EtherCAT对比
伺服电机通信协议选型指南:Modbus、CANopen与EtherCAT对比

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/21 2:46:51

RxJS 4 `partition` 操作符深度解析:按谓词将一条 Observable 流一分为二
RxJS 4 `partition` 操作符深度解析:按谓词将一条 Observable 流一分为二

后端 【免费下载链接】RxJS The Reactive Extensions for JavaScript 项目地址: https://gitcode.com/gh_mirrors/rxj/RxJS 点击查看 免费下载 本文基于 RxJS v4(The Reactive Extensions for JavaScript)官方 API 文档与仓库源码&#xff0… · 2026/9/21 3:27:00

sentence-transformers CrossEncoder 模型卡模板全解析:为 Reranker 自动生成专业 README 的完整机制
sentence-transformers CrossEncoder 模型卡模板全解析:为 Reranker 自动生成专业 README 的完整机制

sentence-transformers CrossEncoder 模型卡模板全解析:为 Reranker 自动生成专业 README 的完整机制 【免费下载链接】sentence-transformers State-of-the-Art Embeddings, Retrieval, and Reranking 项目地址: https://gitcode.com/gh_mirrors/se/sentence-tra… · 2026/9/21 3:27:00

BrowserSkill错误码速查手册:cdp_failed、timeout、cancelled常见错误一次看懂
BrowserSkill错误码速查手册:cdp_failed、timeout、cancelled常见错误一次看懂

BrowserSkill错误码速查手册:cdp_failed、timeout、cancelled常见错误一次看懂 【免费下载链接】BrowserSkill Let AI agents use your real, logged-in browser without interrupting your work. CLI extension for browser automation across any shell-capable … · 2026/9/21 3:27:00

为什么你的页面加载这么慢?高性能图片懒加载库lazysizes完全入门指南
为什么你的页面加载这么慢?高性能图片懒加载库lazysizes完全入门指南

为什么你的页面加载这么慢?高性能图片懒加载库lazysizes完全入门指南 【免费下载链接】lazysizes High performance and SEO friendly lazy loader for images (responsive and normal), iframes and more, that detects any visibility changes triggered through … · 2026/9/21 3:27:00

Ray Client 架构指南:深入解析 Ray 分布式运行时的 gRPC 客户端/服务器设计与实现
Ray Client 架构指南:深入解析 Ray 分布式运行时的 gRPC 客户端/服务器设计与实现

Ray Client 架构指南:深入解析 Ray 分布式运行时的 gRPC 客户端/服务器设计与实现 【免费下载链接】ray Ray is an AI compute engine. Ray consists of a core distributed runtime and a set of AI Libraries for accelerating ML workloads. 项目地址: https:/… · 2026/9/21 3:27:00

MXNet Profiler 性能剖析实战:官方示例逐行拆解与底层实现原理
MXNet Profiler 性能剖析实战:官方示例逐行拆解与底层实现原理

人工智能深度学习机器学习 【免费下载链接】mxnet Lightweight, Portable, Flexible Distributed/Mobile Deep Learning with Dynamic, Mutation-aware Dataflow Dep Scheduler; for Python, R, Julia, Scala, Go, Javascript and more 项目地址: https://gitcode.c… · 2026/9/21 3:25:59

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化
Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡… · 2026/9/21 0:02:39

Word表格编号全攻略:从列表编号到题注交叉引用
Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技… · 2026/9/21 0:02:39

从第一个站到第二个站:独立开发者的静态网站选型与落地实践
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&… · 2026/9/20 0:00:41

Claude Code 按智谱AI指南装完,ANTHROPIC_BASE_URL 改走 TaoToken 兼容通道行不行
Claude Code 按智谱AI指南装完,ANTHROPIC_BASE_URL 改走 TaoToken 兼容通道行不行

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/21 0:00:18

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程
agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程 【免费下载链接】agentic-awesome-skills AAS Core is the local, agent-first control plane for complete catalog discovery, agent-owned selection, stack validation, and … · 2026/9/21 0:00:18

gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析
gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析

gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析 【免费下载链接】gin-vue-admin 🚀ViteVue3Gin拥有AI辅助的基础开发平台,企业级业务AI开发解决方案,内置mcp辅助服务,内置skills管理,… · 2026/9/21 0:00:18

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码