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应用。