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)的权限。在RAM控制台左侧导航栏选择身份管理 > 角色,单击目标角色名称(如demo-historyServer),在角色详情页单击新增授权。在弹出的对话框中,将资源范围设置为账号级别,在权限策略搜索框输入
arms,勾选目标策略后单击确认新增授权。 -
为角色新增
AliyunOSSFullAccess管理对象存储服务(OSS)权限。操作步骤同上。重要本文中赋予了角色OSS的全部权限,但在实际使用中,建议采用精确授权以控制权限范围。
-
3. 创建OAuth应用
-
创建并配置OAuth企业应用。
重要若您需要使用公网连接到HistoryServer。具体配置公网访问操作,请参见配置公网访问。
在左侧导航栏选择集成管理 > OAuth 应用(公测),单击创建应用。在表单中填写应用名称(如
demo-historyserver)和显示名称,应用类型选择Web 应用,访问令牌有效期保持默认 3600 秒,刷新令牌有效期保持默认 2592000 秒,在回调地址中填入回调 URL,然后单击创建应用。说明回调地址为:
http://localhost:8080/auth/callback。其中localhost:8080是HistoryServer的域名,对应后续操作中的CallbackServiceName,需要在安装HistoryServer时指定;/auth/callback是固定的路径后缀。 -
配置OAuth应用。
-
添加OAuth范围。
-
aliuid
获取阿里云颁发的唯一用户标志符 UID(包括 RAM 用户 UID 和所属主账号 UID)。
-
profile
获取登录用户的 RAM 用户名称(主账号访问获取登录名称,RAM 用户访问获取登录名 UPN 名称和显示名称)。
在OAuth 应用详情页,单击添加授权范围,在弹出的面板中勾选aliuid和profile,然后单击确定。
-
-
创建并保存OAuth应用密钥。在应用详情页单击创建密钥,记录生成的AppSecretValue。
重要记录您的应用 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应用。在左侧导航栏选择网络 > 服务 Service,单击创建。在创建服务面板中,设置服务名称为 ray-hs-static,服务类型选择负载均衡(LoadBalancer),负载均衡类型选择网络型负载均衡 NLB,选择资源为新建资源,访问方式选择公网访问,计费方式为按量计费,IP版本选择IPv4。在虚拟交换机区域勾选至少两个可用区的虚拟交换机,然后单击确定。
将外部流量策略设置为Local。在服务关联区域设置标签名为k8s-app、标签值为ray-history-server。在端口映射区域添加两行映射:服务端口3000对应容器端口3000(协议 TCP),服务端口80对应容器端口8080(协议 TCP)。单击确定完成 Service 创建。