KubeRay 可观测性#

KubeRay / Kubernetes 可观测性#

检查 KubeRay operator 的日志以查找错误#

# Typically, the operator's Pod name is kuberay-operator-xxxxxxxxxx-yyyyy.
kubectl logs $KUBERAY_OPERATOR_POD -n $YOUR_NAMESPACE | tee operator-log

使用此命令将 operator 的日志重定向到一个名为 operator-log 的文件。然后在此文件中搜索错误。

检查自定义资源的 stateevents#

kubectl describe [raycluster|rayjob|rayservice] $CUSTOM_RESOURCE_NAME -n $YOUR_NAMESPACE

运行此命令后,请检查自定义资源的 stateconditions 字段以及 events,以查找任何错误和进度。

RayCluster .Status.State#

.Status.State 字段代表集群的状态,但其表示方式有限,限制了其可用性。请使用新的 Status.Conditions 字段进行替换。

State

描述

Ready

当集群中的所有 Pod 都准备就绪后,KubeRay 会将状态设置为 Ready。状态会一直保持为 Ready,直到 KubeRay 暂停集群。

Suspended

当 KubeRay 将 Spec.Suspend 设置为 true 并删除集群中的所有 Pod 时,会将状态设置为 Suspended

RayCluster .Status.Conditions#

虽然 Status.State 可以表示集群的状态,但它仍然只有一个字段。通过在 KubeRay v1.2.1 上启用 RayClusterStatusConditions 功能门,您可以访问新的 Status.Conditions,以获得更详细的集群历史和状态。

警告

RayClusterStatusConditions 仍为 Alpha 功能,未来可能会发生变化。

如果使用 Helm 部署 KubeRay,请在 Helm values 的 featureGates 中启用 RayClusterStatusConditions 门。

helm upgrade kuberay-operator kuberay/kuberay-operator --version 1.2.2 \
  --set featureGates\[0\].name=RayClusterStatusConditions \
  --set featureGates\[0\].enabled=true

或者,只需运行 KubeRay Operator 可执行文件,并附带 --feature-gates=RayClusterStatusConditions=true 参数。

类型

Status

Reason

描述

RayClusterProvisioned

True

AllPodRunningAndReadyFirstTime

当集群中的所有 Pod 都就绪时,系统会将此条件标记为 True。即使之后某些 Pod 失败,系统也会保持此 True 状态。

False

RayClusterPodsProvisioning

RayClusterReplicaFailure

True

FailedDeleteAllPods

当出现协调错误时,KubeRay 会将此条件设置为 True,否则 KubeRay 会清除该条件。

True

FailedDeleteHeadPod

有关更详细的调试信息,请参阅条件的 ReasonMessage

True

FailedCreateHeadPod

True

FailedDeleteWorkerPod

True

FailedCreateWorkerPod

HeadPodReady

True

HeadPodRunningAndReady

此条件仅当 Head Pod 当前就绪时才为 True;否则为 False

False

HeadPodNotFound

RayService .Status.Conditions#

从 KubeRay v1.3.0 开始,RayService 也支持 Status.Conditions 字段。

  • Ready:如果 Ready 为 true,则 RayService 已准备好处理请求。

  • UpgradeInProgress:如果 UpgradeInProgress 为 true,则 RayService 当前正在进行升级过程,并且存在活动的和待处理的 RayCluster。

kubectl describe rayservices.ray.io rayservice-sample

# [Example output]
# Conditions:
#   Last Transition Time:  2025-02-08T06:45:20Z
#   Message:               Number of serve endpoints is greater than 0
#   Observed Generation:   1
#   Reason:                NonZeroServeEndpoints
#   Status:                True
#   Type:                  Ready
#   Last Transition Time:  2025-02-08T06:44:28Z
#   Message:               Active Ray cluster exists and no pending Ray cluster
#   Observed Generation:   1
#   Reason:                NoPendingCluster
#   Status:                False
#   Type:                  UpgradeInProgress

Kubernetes Events#

KubeRay 会为 KubeRay operator 与 Kubernetes API 服务器之间的每一次交互创建 Kubernetes 事件,例如创建 Kubernetes Service、更新 RayCluster 和删除 RayCluster。此外,如果自定义资源的验证失败,KubeRay 也会创建 Kubernetes 事件。

# Example:
kubectl describe rayclusters.ray.io raycluster-kuberay

# Events:
#   Type    Reason            Age   From                   Message
#   ----    ------            ----  ----                   -------
#   Normal  CreatedService    37m   raycluster-controller  Created service default/raycluster-kuberay-head-svc
#   Normal  CreatedHeadPod    37m   raycluster-controller  Created head Pod default/raycluster-kuberay-head-l7v7q
#   Normal  CreatedWorkerPod  ...

Ray 可观测性#

Ray Dashboard#

检查 Ray Pod 的日志#

通过访问 Pod 上的日志文件直接检查 Ray 日志。有关更多详细信息,请参阅 Ray Logging

kubectl exec -it $RAY_POD -n $YOUR_NAMESPACE -- bash
# Check the logs under /tmp/ray/session_latest/logs/

检查 Dashboard#

export HEAD_POD=$(kubectl get pods --selector=ray.io/node-type=head -o custom-columns=POD:metadata.name --no-headers)
kubectl port-forward $HEAD_POD -n $YOUR_NAMESPACE 8265:8265
# Check $YOUR_IP:8265 in your browser to access the dashboard.
# For most cases, 127.0.0.1:8265 or localhost:8265 should work.

Ray State CLI#

您可以使用 head Pod 上的 Ray State CLI 来检查 Ray Serve 应用程序的状态。

# Log into the head Pod
export HEAD_POD=$(kubectl get pods --selector=ray.io/node-type=head -o custom-columns=POD:metadata.name --no-headers)
kubectl exec -it $HEAD_POD -- ray summary actors

# [Example output]:
# ======== Actors Summary: 2023-07-11 17:58:24.625032 ========
# Stats:
# ------------------------------------
# total_actors: 14


# Table (group by class):
# ------------------------------------
#     CLASS_NAME                          STATE_COUNTS
# 0   ...                                 ALIVE: 1
# 1   ...                                 ALIVE: 1
# 2   ...                                 ALIVE: 3
# 3   ...                                 ALIVE: 1
# 4   ...                                 ALIVE: 1
# 5   ...                                 ALIVE: 1
# 6   ...                                 ALIVE: 1
# 7   ...                                 ALIVE: 1
# 8   ...                                 ALIVE: 1
# 9   ...                                 ALIVE: 1
# 10  ...                                 ALIVE: 1
# 11  ...                                 ALIVE: 1