Ray原生Dashboard仅在集群运行时可用,集群终止后用户无法获取历史日志与监控数据。为解决此问题,本文介绍了RayCluster HistoryServer功能,其在集群运行期间实时采集节点日志并持久化存储至OSS,支持集群回收后仍可查询历史记录。
前提条件
- 开启HistoryServer后,RayCluster创建的Pod的PostStartHook会被覆盖。如果需要使用PostStartHook,请将以下脚本添加到其中。该脚本会将Ray的 - nodeid写入- /tmp/ray/init.log文件,供HistoryServer Collector的Sidecar读取和使用。- 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创建的Pod的ServiceAccount会被替换。新的ServiceAccount名称生成规则为: - ServiceAccountPrefix-RayClusterName。如果需要使用自定义的ServiceAccount,请确保其配置与生成规则一致。
- 安装的Kuberay组件版本需不低于 - 1.2.1.5。具体操作,请参见在ACK中安装KubeRay组件。
1. 打开集群RRSA功能
- 登录容器服务管理控制台,在左侧导航栏选择集群列表。 
- 在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择集群信息。 
- 启用集群的RRSA OIDC功能。在集群页面,集群信息 > 基本信息 > 安全与审计,单击开启RRSA OIDC。如果您想了解更详细的操作,请参见启用RRSA OIDC功能。 

2. 创建RRSA角色
- 创建RRSA角色。 - 使用RAM管理员登录RAM控制台。在左侧导航栏,选择,在角色页面,单击创建角色,选择可信的实体类型为身份提供商。 - 添加主体。 - 身份提供商:选择已开启RRSA OIDC的集群。  
- 添加条件。 - 关联特定ServiceAccount,RRSA角色创建完成后,将RRSA角色关联集群中的特定ServiceAccount。  - 条件名称 - 选择值 - 条件键 - 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是可自定义部分。
 
- 为RRSA角色新增授权。 - 为角色新增 - AliyunARMSReadOnlyAccess只读访问业务实时监控服务(ARMS)的权限。 
- 为角色新增 - AliyunOSSFullAccess管理对象存储服务(OSS)权限。操作步骤同上。重要- 本文中赋予了角色OSS的全部权限,但在实际使用中,建议采用精确授权以控制权限范围。 
 
3. 创建OAuth应用
- 创建并配置OAuth企业应用。 重要- 若您需要使用公网连接到HistoryServer。具体配置公网访问操作,请参见配置公网访问。  说明 说明- 回调地址为: - http://localhost:8080/auth/callback。其中- localhost:8080是HistoryServer的域名,对应后续操作中的- CallbackServiceName,需要在安装HistoryServer时指定;- /auth/callback是固定的路径后缀。
- 配置OAuth应用。 - 添加OAuth范围。 - aliuid - 获取阿里云颁发的唯一用户标志符 UID(包括 RAM 用户 UID 和所属主账号 UID)。 
- profile - 获取登录用户的 RAM 用户名称(主账号访问获取登录名称,RAM 用户访问获取登录名 UPN 名称和显示名称)。 
  
- 创建并保存OAuth应用密钥。  重要 重要- 记录您的应用 ID、AppSecretValue,后续在Kuberay命名空间下创建Secret操作中使用。 
 
- 连接集群,在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组件参数
- 安装kuberay组件。 - 更多详细操作,请参见安装KubeRay组件。 
- 对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配置示例。
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应用。
