安装并使用HistoryServer组件

Ray原生Dashboard仅在集群运行时可用,集群终止后用户无法获取历史日志与监控数据。为解决此问题,本文介绍了RayCluster HistoryServer功能,其在集群运行期间实时采集节点日志并持久化存储至OSS,支持集群回收后仍可查询历史记录。

前提条件

  • 开启HistoryServer后,RayCluster创建的PodPostStartHook会被覆盖。如果需要使用PostStartHook,请将以下脚本添加到其中。该脚本会将Raynodeid写入/tmp/ray/init.log文件,供HistoryServer CollectorSidecar读取和使用。

    GetNodeId(){
      while true;
      do
        nodeid=$(ps -ef | grep raylet | grep node_id | grep -v grep | grep -oP '(?<=--node_id=)[^ ]*' | tr -d '\n')
        if [ -n "$nodeid" ]; then
          echo "$(date) raylet started: \"$(ps -ef | grep raylet | grep node_id | grep -v grep | grep -oP '(?<=--node_id=)[^ ]*')\" => ${nodeid}" >> /tmp/ray/init.log
          echo $nodeid > /tmp/ray/alibabacloud_raylet_node_id
          break
        else
          echo "$(date) raylet not start >> /tmp/ray/init.log"
          sleep 1
        fi
      done
    }
    GetNodeId
        
  • 开启HistoryServer后,RayCluster创建的PodServiceAccount会被替换。新的ServiceAccount名称生成规则为:ServiceAccountPrefix-RayClusterName。如果需要使用自定义的ServiceAccount,请确保其配置与生成规则一致。

  • 安装的Kuberay组件版本需不低于1.2.1.5。具体操作,请参见ACK中安装KubeRay组件

1. 打开集群RRSA功能

  1. 登录容器服务管理控制台,在左侧导航栏选择集群列表

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择集群信息

  3. 启用集群的RRSA OIDC功能。在集群页面,集群信息 > 基本信息 > 安全与审计,单击开启RRSA OIDC。如果您想了解更详细的操作,请参见启用RRSA OIDC功能

image

2. 创建RRSA角色

  1. 创建RRSA角色。

    使用RAM管理员登录RAM控制台在左侧导航栏,选择身份管理 > 角色角色页面,单击创建角色,选择可信的实体类型为身份提供商

    1. 添加主体。

      身份提供商:选择已开启RRSA OIDC的集群。

      image

    2. 添加条件。

      关联特定ServiceAccount,RRSA角色创建完成后,将RRSA角色关联集群中的特定ServiceAccount。image

      条件名称

      选择值

      条件键

      oidc:sub

      运算符

      StringLike

      条件值

      system:serviceaccount:*:ray-historyserver*

      说明
      • *代表通配符,<ray-historyserver>的部分对应后续操作中的serviceAccountPrefix。

      • ray-historyserver是可以自定义的部分,需要与安装Historyserver时的ServiceAccountPrefix相同。

      说明

      如果您使用的是自定义的SA,您需要单击添加语句,在同一个RRSA角色中添加两个主体,并分别为两个主体添加以下条件。

      • 主体1:身份提供商

        条件名称

        选择值

        条件键

        oidc:sub

        运算符

        StringEquals

        条件值

        system:serviceaccount:kuberay:ray-historyserver

      • 主体2:身份提供商

        条件名称

        选择值

        条件键

        oidc:sub

        运算符

        StringLike

        条件值

        system:serviceaccount:*:rhs*

      两个SA分别为system:serviceaccount:kuberay:ray-historyserver以及system:serviceaccount:*:rhs*,其中rhs是可自定义部分。

  2. RRSA角色新增授权。

    1. 为角色新增AliyunARMSReadOnlyAccess只读访问业务实时监控服务(ARMS)的权限。

      image

    2. 为角色新增AliyunOSSFullAccess管理对象存储服务(OSS)权限。操作步骤同上。

      重要

      本文中赋予了角色OSS的全部权限,但在实际使用中,建议采用精确授权以控制权限范围。

3. 创建OAuth应用

  1. 创建并配置OAuth企业应用。

    重要

    若您需要使用公网连接到HistoryServer。具体配置公网访问操作,请参见配置公网访问

    image

    说明

    回调地址为:http://localhost:8080/auth/callback。其中localhost:8080 是HistoryServer的域名,对应后续操作中的CallbackServiceName,需要在安装HistoryServer时指定;/auth/callback是固定的路径后缀。

  2. 配置OAuth应用。

    1. 添加OAuth范围。

      • aliuid

        获取阿里云颁发的唯一用户标志符 UID(包括 RAM 用户 UID 和所属主账号 UID)。

      • profile

        获取登录用户的 RAM 用户名称(主账号访问获取登录名称,RAM 用户访问获取登录名 UPN 名称和显示名称)。

      image

    2. 创建并保存OAuth应用密钥。

      image

      重要

      记录您的应用 IDAppSecretValue,后续在Kuberay命名空间下创建Secret操作中使用。

  3. 连接集群,在kuberay命名空间下创建Secret。

    关于如何连接ACK集群,更多详细操作,请参见连接集群

    kubectl create ns kuberay
    kubectl create secret -n kuberay generic webapp-secret --from-literal=webapp-id="yours-AppID" --from-literal=webapp-secret=yours-AppSecretValue

    参数

    参数说明

    webapp-secret

    创建Secret的名称,可自定义设置。

    webapp-id

    OAuth应用 ID。

    webapp-secret

    OAuth密钥AppSecretValue值。

4. 配置KubeRay组件参数

  1. 安装kuberay组件。

    更多详细操作,请参见安装KubeRay组件

  2. Kuberay-Operator参数配置。

    参数名称

    参数说明

    是否开启 HistoryServer

    勾选开启。

    CallbackServiceName

    HistoryServer OAuth认证时的回调域名,需要与OAuth应用中的回调地址的域名一致,如OAtuh配置http://xx.com/oauth/callback,则此处配置xx.com

    CloudRoleName

    HistoryServer关联的RRSA角色名。

    OSSBucket

    HistoryServer使用的OSS存储桶的名称

    OSSEndPoint

    HistoryServer使用的OSS存储桶的端点

    OSSHistoryServerRootDir

    HistoryServer存放日志和元信息的目录

    OSSRegion

    HistoryServer使用的OSS地域,例如cn-hangzhou,ap-southeast-1

5. 创建RayCluster

如果您需要在RayCluster中启用HistoryServer功能,您需要在提交RayCluster时,通过注解添加 ray.alibabacloud.com/enable-historyserver: "true"。以下是一个YAML配置示例。

展开查看YAML配置示例。

apiVersion: ray.io/v1
kind: RayCluster
metadata:
  annotations:
    ray.alibabacloud.com/enable-historyserver: "true"
  labels:
    ray.io/cluster: wukun
  generateName: wukun-ray240-
  namespace: default
spec:
  suspend: false
  autoscalerOptions:
    env: []
    envFrom: []
    idleTimeoutSeconds: 60
    imagePullPolicy: Always
    resources:
      limits:
        cpu: 200m
        memory: 200Mi
      requests:
        cpu: 200m
        memory: 200Mi
    securityContext: {}
    upscalingMode: Default
  enableInTreeAutoscaling: false
  headGroupSpec:
    rayStartParams:
      dashboard-host: 0.0.0.0
      num-cpus: "0"
    serviceType: ClusterIP
    template:
      metadata:
        labels:
          test: wukun
      spec:
        affinity:
        containers:
        - env:
          image: xxxx
          imagePullPolicy: Always
          name: ray-head
          resources:
            limits:
              cpu: "5"
              memory: 10G
            requests:
              cpu: "1"
              memory: 1G

        tolerations:
        - key: ray
          operator: Equal
          value: cpu
  workerGroupSpecs:
  - groupName: cpu
    maxReplicas: 1000
    minReplicas: 0
    numOfHosts: 1
    rayStartParams: {}
    replicas: 2
    template:
      metadata:
        labels:
          test: wukun
      spec:
        imagePullSecrets:
        containers:
        - env:

          image: xxxx
          imagePullPolicy: Always
          name: ray-worker
          resources:
            limits:
              cpu: "1"
              memory: 1G
            requests:
              cpu: "1"
              memory: 1G
          volumeMounts:
        tolerations:
        - key: ray
          operator: Equal
          value: cpu
        volumes:

6. 连接到HistoryServer

通过Localhost访问

默认情况下,HistoryServer需要通过port-forward的方式进行访问。启动终端窗口并执行以下指令。

kubectl -n kuberay port-forward svc/ray-history-server --address 0.0.0.0 8080:80

之后,在浏览器中访问localhost:8080即可访问HistoryServer。此时访问HistoryServer还无法查看监控数据。若要查看监控数据,需要额外执行一次port-forward命令。

kubectl -n kuberay port-forward svc/ray-history-server --address 0.0.0.0 3000:3000

配置公网访问

重要

本示例作为演示,为了您的应用数据安全,建议您在生产环境同时开启访问控制功能。

登录容器服务管理控制台,在左侧导航栏选择集群列表单击目标集群名称,进入集群详情页面,如下图所示,按照序号依次单击配置公网服务。设置OAuth应用的回调地址为已创建的公网服务,格式为http://${externalIP}/auth/callback。具体OAuth应用设置操作,请参见创建OAuth应用image

image