部署并使用基础 RayCluster

本文介绍如何在 ACK 集群上通过 KubeRay 部署一个基础 RayCluster(1 个 head + 1 个 worker),并运行一个简单的 Ray Actor 示例程序。

前提条件

1. 部署 RayCluster

kubectl apply -f ray-cluster.yaml

预期输出:

raycluster.ray.io/demo-ray-cluster created

等待 Pod 就绪:

kubectl get pods

预期输出(1 个 head Pod 和 1 个 worker Pod 均为 Running):

NAME                                          READY   STATUS    RESTARTS   AGE
demo-ray-cluster-head-mgdnb                   1/1     Running   0          2m16s
demo-ray-cluster-worker-group-worker-lvbr2    1/1     Running   0          2m16s

2. 查看 Ray 集群状态

登录 head Pod,通过 ray status 查看集群状态:

HEAD_POD=$(kubectl get pod -l ray.io/node-type=head -o jsonpath='{.items[0].metadata.name}')
kubectl exec -it $HEAD_POD -- ray status

预期输出(head 节点 num-cpus 设为 0 不承担计算任务,集群共 2 个可用 CPU):

======== Autoscaler status: 2026-08-10 06:08:43.387414 ========
Node status
---------------------------------------------------------------
Active:
 (no active nodes)
Idle:
 1 worker-group
 1 headgroup
Pending:
 (no pending nodes)
Recent failures:
 (no failures)

Resources
---------------------------------------------------------------
Total Usage:
 0.0/2.0 CPU
 0B/6.00GiB memory
 0B/1.52GiB object_store_memory

From request_resources:
 (none)
Pending Demands:
 (no resource demands)

3. 运行 Ray 程序示例

脚本通过 ray.init(address="auto") 自动连接本机 Ray 集群,由 RandIntActor 产生一个 1~100 的随机数,再由 AddActor 将其加 5 返回。先把脚本拷贝到 head Pod 中:

kubectl cp ray_actor_rand_and_sum.py $HEAD_POD:/tmp/ray_actor_rand_and_sum.py

方法一:在 head Pod 中直接运行

kubectl exec -it $HEAD_POD -- python /tmp/ray_actor_rand_and_sum.py

预期输出(随机数每次运行不同):

Random number: 61
Final result: 66

方法二:通过 ray job CLI 提交

ray job submit 将程序作为 Ray Job 提交到集群运行,适合提交需要后台调度执行的任务。提交并等待运行完成:

kubectl exec -it $HEAD_POD -- ray job submit -- python /tmp/ray_actor_rand_and_sum.py

预期输出(Job ID 每次运行不同):

Random number: 1
Final result: 6
Job 'raysubmit_phQgB2Qrh6VKFYd9' succeeded

查看 Job 列表:

kubectl exec -it $HEAD_POD -- ray job list

预期输出(节选,提交的 Job 状态为 SUCCEEDED):

Job submission server address: http://10.246.1.67:8265
[JobDetails(..., submission_id='raysubmit_phQgB2Qrh6VKFYd9', status=<JobStatus.SUCCEEDED: 'SUCCEEDED'>, entrypoint='python /tmp/ray_actor_rand_and_sum.py', ...)]

查看 Job 日志:

kubectl exec -it $HEAD_POD -- ray job logs raysubmit_phQgB2Qrh6VKFYd9

预期输出:

Job submission server address: http://10.246.1.67:8265
...
Random number: 1
Final result: 6

清理

kubectl delete -f raycluster.yaml