三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

保姆级教程:用Helm和Kuberay在K8s上快速部署Ray集群(含避坑指南)

保姆级教程:用Helm和Kuberay在K8s上快速部署Ray集群(含避坑指南)

从零到一:基于Kuberay的Ray集群高效部署实战手册

1. 环境准备与工具链配置

在开始部署Ray集群之前,确保您的本地开发环境已配备以下核心工具。这些组件将构成我们与Kubernetes集群交互的基础设施:

  • kubectl:Kubernetes命令行工具,版本需与目标集群兼容(推荐v1.24+)
  • Helm:Kubernetes包管理器(v3.8+),用于简化Kuberay Operator的安装
  • Ray客户端:Python库(建议2.4+),用于后续任务提交和集群交互

验证工具可用性的基本命令:

# 检查kubectl连通性 kubectl cluster-info # 验证Helm版本 helm version --short # 确认Ray客户端 python -c "import ray; print(ray.__version__)"

常见问题排查:

  • 若遇到Unable to connect to the server错误,检查kubeconfig文件路径是否正确
  • Helm报Error: INSTALLATION FAILED时,尝试先执行helm repo update

2. Kuberay Operator的安装与验证

2.1 Helm部署最佳实践

通过Helm安装Kuberay Operator是最推荐的方式,它能自动处理依赖关系和生命周期管理。执行以下命令完成部署:

# 添加官方仓库 helm repo add kuberay https://ray-project.github.io/kuberay-helm/ helm repo update # 创建专用命名空间 kubectl create ns ray-system # 安装Operator(指定稳定版本) helm install kuberay-operator kuberay/kuberay-operator \ --version 1.0.0 \ --namespace ray-system

部署完成后,通过以下命令验证Operator状态:

kubectl get pods -n ray-system -l app.kubernetes.io/component=kuberay-operator

预期应看到STATUS为Running且READY为1/1。

2.2 版本兼容性矩阵

不同Ray版本与Kuberay Operator的对应关系:

Ray版本推荐Operator版本备注
2.0-2.30.4.x基础功能支持
2.4+1.0.x支持最新Autoscaler特性

注意:生产环境建议锁定特定版本,避免自动升级导致意外行为

3. Ray集群的定制化部署

3.1 集群定义文件解析

典型的RayCluster自定义资源(CR)包含以下核心部分:

apiVersion: ray.io/v1alpha1 kind: RayCluster metadata: name: ray-production-cluster spec: headGroupSpec: rayStartParams: dashboard-host: '0.0.0.0' template: spec: containers: - name: ray-head resources: limits: cpu: "4" memory: "16Gi" workerGroupSpecs: - replicas: 2 rayStartParams: {} template: spec: containers: - name: ray-worker resources: limits: cpu: "8" memory: "32Gi"

关键配置项说明:

  • headGroupSpec:定义主节点规格和启动参数
  • workerGroupSpecs:工作节点组配置数组
  • rayStartParams:可覆盖Ray的默认启动参数

3.2 实战部署流程

  1. 保存上述YAML为ray-cluster.yaml
  2. 应用配置到集群:
    kubectl apply -f ray-cluster.yaml -n ray-system
  3. 监控部署进度:
    watch kubectl get pods -n ray-system
  4. 验证服务暴露:
    kubectl get svc -n ray-system

性能优化技巧:

  • 主节点CPU建议不少于4核,避免成为瓶颈
  • 工作节点内存配置应预留20%给系统进程
  • 对于GPU任务,需添加nvidia.com/gpu资源声明

4. 集群操作与任务管理

4.1 三种任务提交方式对比

方式适用场景优点缺点
kubectl exec快速调试无需额外配置不适合生产环境
Ray Job API正式任务提交支持工作目录和依赖管理需要端口转发
Ray Client交互式开发实时反馈网络延迟可能影响体验

4.2 Job API标准操作流程

  1. 启动端口转发:
    kubectl port-forward svc/ray-production-cluster-head-svc 8265:8265 -n ray-system
  2. 提交Python任务:
    ray job submit --address http://localhost:8265 \ --working-dir ./src \ -- python train.py
  3. 查看任务状态:
    ray job status --address http://localhost:8265 <job-id>

故障排查要点:

  • 如果遇到连接拒绝,检查Operator日志:
    kubectl logs -l app.kubernetes.io/component=kuberay-operator -n ray-system
  • 任务卡在PENDING状态时,查看Autoscaler决策:
    kubectl exec ray-production-cluster-head-xxxxx -n ray-system -- cat /tmp/ray/session_latest/logs/monitor.out

5. 高级配置与优化策略

5.1 自动伸缩策略调优

在RayCluster CR中添加autoscaler配置:

spec: autoscalerOptions: upscalingMode: Conservative idleTimeoutSeconds: 300 resources: limits: cpu: "500m" requests: cpu: "200m"

伸缩模式对比:

  • Conservative:稳定但扩容慢,适合生产环境
  • Default:平衡模式,推荐大多数场景
  • Aggressive:快速响应但可能过度扩容

5.2 网络与存储集成

实现持久化存储的配置示例:

headGroupSpec: template: spec: volumes: - name: ray-logs persistentVolumeClaim: claimName: ray-log-pvc containers: - name: ray-head volumeMounts: - mountPath: /tmp/ray name: ray-logs

性能关键点:

  • 使用网络存储时,建议选择与K8s集群同区域的存储服务
  • 对于IO密集型任务,考虑本地临时卷(tmpfs)提升性能

6. 监控与日志收集方案

6.1 内置Dashboard访问

  1. 暴露Dashboard服务:
    kubectl port-forward svc/ray-production-cluster-head-svc 8265:8265 6379:6379 -n ray-system
  2. 浏览器访问http://localhost:8265

6.2 Prometheus监控集成

配置ServiceMonitor用于指标采集:

apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: ray-monitor spec: endpoints: - port: metrics interval: 15s selector: matchLabels: ray.io/cluster: ray-production-cluster

核心监控指标包括:

  • ray_nodes_count:集群节点总数
  • ray_resources_percentage:资源利用率
  • ray_tasks_count:运行中任务数

7. 资源清理与维护

7.1 安全删除流程

  1. 首先删除Ray集群:
    kubectl delete raycluster ray-production-cluster -n ray-system
  2. 确认所有Pod已终止:
    kubectl get pods -n ray-system
  3. 卸载Operator:
    helm uninstall kuberay-operator -n ray-system

重要注意事项:

  • 删除前确保没有运行中的关键任务
  • 长期不用的集群建议定期回收以节省资源
  • 生产环境建议配置资源配额(ResourceQuota)防止超额使用
← 返回列表