在ACK中安装KubeRay组件

本文将指导您在ACK托管集群Pro上部署KubeRay Operator组件,并集成阿里云日志服务SLSPrometheus监控,从而增强日志管理、系统可观测性及高可用性。通过Kubernetes自定义资源(CR),您可高效管理Ray集群与应用。

前提条件

关于如何创建集群,请参见创建ACK托管集群;如需升级集群版本,请参见手动升级集群。创建ACK托管集群Pro且符合以下要求。

  • 集群版本:v1.24及以上。

  • 节点规格:已配置一台8 CPU 32 GB规格及以上的节点。

  • 测试环境可使用推荐的最低规格:生产环境中需以实际情况为准,如需使用GPU节点,请配置GPU节点。

    关于ECS支持的实例规格,请参见实例规格族

  • 已开启日志服务SLS。

  • 已开启阿里云可观测监控Prometheus版。

  • 已通过kubectl连接Kubernetes集群,且已在本地安装kubectl。具体操作,请参见获取集群KubeConfig并通过kubectl工具连接集群

安装KubeRay组件

登录容器服务管理控制台,在左侧导航栏选择集群列表单击目标集群名称,进入集群详情页面,如下图所示按照序号依次单击运维管理 > 组件管理 > 应用管理 > 点击安装Kuberay-Operator,为目标集群安装Kuberay-Operator组件。

重要

ACK集群提供的Kuberay-Operator托管组件当前处于邀测阶段,如您有使用需求, 请提交工单申请。

image

KubeRay启用日志功能

  1. 进入对应集群,依次单击运维管理 > 日志中心 > 控制面组件日志 > 开启组件日志image.png

  2. 在下拉菜单中,选择kuberay-operator

    image.png

RayCluster启用日志收集查看功能

您可以在Ray Cluster中集成阿里云日志服务SLS,实现日志的持久化存储。

  1. 执行以下命令,创建一个全局的AliyunLogConfig资源对象,使集群中的Logtail组件自动收集Ray ClusterPod产生的日志,并将其存入对应的SLS Project中。

    展开查看完整命令代码

    cat <<EOF | kubectl apply -f -
    apiVersion: log.alibabacloud.com/v1alpha1
    kind: AliyunLogConfig
    metadata:
      name: rayclusters
      namespace: kube-system
    spec:
       # 设置Logstore名称。如果您所指定的Logstore不存在,日志服务会自动创建。
      logstore: rayclusters
      # 设置Logtail配置。
      logtailConfig:
        # 设置采集的数据源类型。采集文本日志时,需设置为file。
        inputType: file
        # 设置Logtail配置的名称,必须与资源名(metadata.name)相同。
        configName: rayclusters
        inputDetail:
          # 指定通过极简模式采集文本日志。
          logType: common_reg_log
          # 设置日志文件所在路径。
          logPath: /tmp/ray/session_*-*-*_*/logs
          # 设置日志文件的名称。支持通配符星号(*)和半角问号(?),例如log_*.log。
          filePattern: "*.*"
          # 采集容器的文本日志时,需设置dockerFiletrue。
          dockerFile: true
          #设置容器过滤条件。
          advanced:
            k8s:
              IncludeK8sLabel:
                ray.io/is-ray-node: "yes"
              ExternalK8sLabelTag:
                ray.io/cluster: "_raycluster_name_"
                ray.io/node-type : "_node_type_"
    EOF

    参数

    描述

    logPath

    收集Pod/tmp/ray/session_*-*-*_*/logs目录下的所有日志,可自定义路径。

    advanced.k8s.ExternalK8sLabelTag

    在收集的日志中增加Tag索引,便于查找日志。默认新增_raycluster_name__node_type_两个Tag。

    关于AliyunLogConfig参数配置的更多信息,请参见通过DaemonSet-CRD方式采集容器日志。该服务收费,具体费用,请参见计费概述

  2. 查看Ray Cluster日志信息流程。

    登录容器服务管理控制台,在左侧导航栏选择集群列表单击目标集群名称,进入集群详情页面,如下图所示按照序号依次单击集群信息 > 基本信息 > 集群资源,单击日志服务 Project右侧的链接进入对应的SLS Projectimage

  3. Project中选择rayclusters对应的Logstore并查看日志内容。

    您可以根据Tag,例如_raycluster_name_,查看不同Ray Cluster的日志。

    image

RayCluster启用监控功能

您可以在Ray Cluster中使用阿里云Prometheus监控能力,关于Prometheus监控功能的更多信息,请参见使用阿里云Prometheus监控。相关计费信息,请参见Prometheus 实例计费

您可执行以下命令部署Pod MonitorService Monitor资源,用于收集Ray Cluster 的Metric数据。

  1. 执行以下命令部署Pod Monitor资源。

    apiVersion: monitoring.coreos.com/v1
    kind: PodMonitor
    metadata:
      annotations:
        arms.prometheus.io/discovery: 'true'
        arms.prometheus.io/resource: arms
      name: ray-workers-monitor
      namespace: arms-prom
      labels:
        # `release: $HELM_RELEASE`: Prometheus can only detect PodMonitor with this label.
        release: prometheus
        #ray.io/cluster: raycluster-kuberay # $RAY_CLUSTER_NAME: "kubectl get rayclusters.ray.io"
    spec:
      namespaceSelector:
        any: true
      jobLabel: ray-workers
      # Only select Kubernetes Pods with "matchLabels".
      selector:
        matchLabels:
          ray.io/node-type: worker
      # A list of endpoints allowed as part of this PodMonitor.
      podMetricsEndpoints:
      - port: metrics
        relabelings:
        - action: replace
          regex: (.+)
          replacement: $1
          separator: ;
          sourceLabels:
            - __meta_kubernetes_pod_label_ray_io_cluster
          targetLabel: ray_io_cluster
          
    
  2. 执行以下命令部署Service Monitor资源。

    apiVersion: monitoring.coreos.com/v1
    kind: ServiceMonitor
    metadata:
      annotations:
        arms.prometheus.io/discovery: 'true'
        arms.prometheus.io/resource: arms
      name: ray-head-monitor
      namespace: arms-prom
      labels:
        # `release: $HELM_RELEASE`: Prometheus can only detect ServiceMonitor with this label.
        release: prometheus
    spec:
      namespaceSelector:
        any: true
      jobLabel: ray-head
      # Only select Kubernetes Services with "matchLabels".
      selector:
        matchLabels:
          ray.io/node-type: head
      # A list of endpoints allowed as part of this ServiceMonitor.
      endpoints:
        - port: metrics
          path: /metrics
      targetLabels:
      - ray.io/cluster
    
  3. 登录控制台查看资源部署接入情况。

    1. 登录ARMS控制台在左侧导航栏单击接入中心,在基础设置页面,如下图所示按照序号依次单击②搜索Ray > ③选中Ray,然后在Ray面板选择上文新建的集群,单击确定image

    2. 接入成功后,单击接入管理,跳转至ARMS接入管理页面。在组件管理页签,单击组件类型区域的大盘,选择Ray Clusterimage

    3. 在大盘中选择对应NamespaceRayClusterNameSessionName进行过滤,查看Ray Cluster运行中任务的监控数据。image.png