You need to enable JavaScript to run this app.
导航
节点检查自愈
最近更新时间:2025.04.27 15:59:20首次发布时间:2023.09.27 17:21:19
我的收藏
有用
有用
无用
无用

节点作为集群的基础设施,其工作状态对用户来说至关重要。火山引擎容器团队自研节点检查和自愈功能,面向节点进行常见故障检测和故障自愈。本文为您介绍如何配置节点检查自愈功能。

背景信息

检查自愈流程

容器服务支持节点检查自愈功能,系统会按照规则配置,定期进行节点检查。当节点故障时,会记录 Node Event 事件,并执行自愈动作。

  • 故障检测:系统通过主动探测节点故障和监听 ECS 运维事件来感知节点故障的产生,支持基于节点状态生成 Kubernetes 日志,并向监控系统上报故障,方便用户第一时间了解故障信息。
  • 止血流程:系统会进行业务止血操作,包括:封锁节点排干节点,缩小故障影响面,并支持在完成对应操作后进行流程干预,为故障节点添加指定标签,方便用户对故障节点进行查找和处理。
  • 自愈流程:系统会重启故障进程或故障节点,尝试解决故障。完成后进行自愈结果检查。如果故障已恢复,则解除节点封锁,恢复节点的正常调度。

节点检查自愈的工作流程,如下图所示。
alt

说明

节点检查自愈功能为您提供了不同的故障处理流程,您可以根据实际需求进行选择。包括:

  • 提示异常:仅包含 提示异常 流程。
  • 封锁节点:包含 提示异常(可选)流程干预 和 封锁节点 流程。
  • 排干节点:包含 提示异常(可选)流程干预封锁节点 和 排干节点 流程。
  • 自动修复:包含 提示异常(可选)流程干预封锁节点排干节点自动恢复 和 (可选)解除封锁 流程。

自愈检查项

GPU 故障

GPU 故障场景支持 提示异常封锁节点排干节点自动修复 故障处理策略,不同检查项对应的 Event 和自动修复策略,如下表所示。

检查项Event描述自动修复策略
GPU 掉卡故障GpuCardFallen节点发生 GPU 掉卡故障。重启节点
GPU 内部故障GpuUnknownError节点 GPU 发生内部故障。重启节点
GPU 可恢复的内存故障GpuMemoryErrorRecoverable节点发生 GPU 可恢复的内存故障。重启节点
GPU 不可恢复的内存故障GpuMemoryErrorUnrecoverable节点发生 GPU 不可恢复的内存故障。重启节点
GPU 运行时故障GpuRuntimeError节点 GPU 运行时相关组件故障。重启节点
GPU 运行时警告GpuRuntimeWarning节点 GPU 运行时相关组件有警告信息, 用户进程不一定受损。重启节点
GPU 链路故障GpuLinkError节点 GPU 链路故障或带宽使用不足。重启节点
GPU 链路性能下降GpuLinkUnhealthy节点 GPU 链路可用但发生掉速。重启节点
GPU 驱动故障GpuDriverError节点发生 GPU 驱动硬件故障。重启节点
GPU 驱动警告GpuDriverWarning节点 GPU 驱动有警告信息,用户进程不一定受损。重启节点

节点故障

节点故障场景支持 提示异常封锁节点排干节点自动修复 故障处理策略,不同检查项对应的 Event 和自动修复策略,如下表所示。

检查项Event描述自动修复策略
ECS 故障NodeFailureECS 发生故障时,快速摘除 ECS 上的节点,将业务受损时间从 5 分钟降低到 1分钟,并响应故障事件自动恢复。冷迁节点

说明

节点故障主要监控 ECS 实例的 SystemMaintenance.Redeploy、InfrastructureUpgrade.Redeploy、SystemFailure.Redeploy 和 DiskErrorDetected 事件。事件发生后,不同事件需要您进行不同的运维操作。详情请参见 事件类型汇总查询与响应“因系统维护实例重新部署”事件

系统与组件故障

系统与组件故障场景支持 提示异常自动修复 故障处理策略,不同检查项对应的 Event 和自动修复策略,如下表所示。

检查项Event描述自动修复策略
Kubelet 故障KubeletUnhealthyKubelet 运行状态异常导致节点不可用。重启 Kubelet 服务
Runtime 故障RuntimeUnhealthyContainerd/Docker 运行状态异常导致节点不可用。重启 Containerd 服务
时间同步服务异常NTPProblem时钟同步服务(Chrony)异常。重启 Chrony 服务
节点文件系统只读ReadonlyFilesystem节点文件系统变为只读,导致节点上业务运行异常。重启节点
节点内核故障KernelOops节点存在内核错误,影响节点上的容器服务正常运行。重启节点
节点内核死锁KernelHasDeadlock节点内核存在死锁。重启节点

说明

在执行 Kubelet 故障 与 Runtime 故障 修复时,会同时判断 Kubelet 与 Containerd 服务是否正常,如果存在服务异常则会一起修复。

节点故障指标

节点检查自愈功能支持将节点故障基于指标的形式暴露给监控系统,您可以基于指标和标签追溯故障时间并定位到具体的资源。如需使用,请在集群中开启云原生观测功能。详情请参见 步骤三:(可选)开启云原生观测

节点故障指标说明,如下表所示。

项目描述
指标名称aiops_resource_status
指标类型Gauge

标签值

  • resource_name:资源名称,例如ncmj2h***,用于定位到具体的资源。
  • resource_kind:取值为 VkeNode,表示资源类型为 VKE 节点。
  • account_id:火山引擎账号 ID,例如21001***
  • cluster_id:集群 ID,例如cd03r***
指标值Float64 形式,不同的数字代表不同的故障。

节点故障指标中,不同故障对应不同的取值,详情如下表所示。

故障 Event故障时的值故障码(二进制)故障码(十进制)
GpuCardFallen110000000000000000000524288
GpuMemoryErrorRecoverable101000000000000000000262144
GpuMemoryErrorUnrecoverable100100000000000000000131072
GpuLinkError10001000000000000000065536
GpuLinkUnhealthy10000100000000000000032768
GpuDriverError10000010000000000000016384
GpuDriverWarning1000000100000000000008192
GpuRuntimeWarning1000000010000000000004096
GpuRuntimeError1000000001000000000002048
GpuUnknownError1000000000100000000001024
KubeletUnhealthy100000000001000000000512
RuntimeUnhealthy100000000000100000000256
NTPProblem100000000000010000000128
FilesystemError10000000000000100000064
KernelOops10000000000000010000032
NodeResourceLeak10000000000000001000016
NodeFailure1000000000000000010008
NodeNotReady1000000000000000001004
ReadonlyFilesystem1000000000000000000102
KernelHasDeadlock1000000000000000000011
无故障-000000000000000000000

说明

如果节点同时存在多种故障,则故障码进行组合处理。例如:当节点同时存在 GpuCardFallen 和 KernelHasDeadlock 故障时,故障码为 10000000000000000001,即十进制为524289

检查自愈事件

节点池绑定检查自愈规则后,系统会按照规则配置,定期进行节点检查。当节点故障时,会记录 Node Event 事件。您可以在 事件中心 查看对应的事件。检查项和事件的对应关系,如下表所示。

事件事件描述消息消息描述事件类别
NodeRepair开始自动故障处理Node {nodename} begin to repair开始执行故障处理Normal
NodeRepairAction自动故障处理Node {nodename} status is now: NodeCordon异常时禁止调度Warning
Node {nodename} status is now: NodeDrainStart开始排干节点Warning
Node {nodename} status is now: NodeDrainCompleted排干节点完成Normal
Node {nodename} status is now: InstanceReboot排干后重启节点Normal
Node {nodename} status is now: InstanceForceReboot未排干强制重启节点Warning
Node {nodename} status is now: NotReady将节点置为 NotReadyWarning
Node {nodename} status is now: Eviting开始驱逐 BackendWarning
Node {nodename} status is now: RecreateStatfulsetPod_{Statefulset 名称}重建 Statefulset PodNormal
NodeRepairActionFailed自动故障处理失败Node {nodename} status is now: NodeIngressControllerExist排干前检查节点运行了 ingress-controller PodWarning
Node {nodename} status is now: NodeBindPodExist排干前检查节点存在强绑定节点的工作负载Warning
Node {nodename} status is now: NodeSingleInstanceWorkloadExist排干前检查节点存在单副本工作负载Warning
Node {nodename} status is now: NodeStaticPodExist排干前检查节点存在 Static PodWarning
Node {nodename} status is now: {Gpu 故障事件}AfterRepairAction故障自愈后再检测故障仍然异常Warning
Node {nodename} status is now: EvitionFailed驱逐 Backend 失败Warning
Node {nodename} status is now: RecreateStatfulsetPodFailed_{Statefulset 名称}重建 Statefulset Pod 失败Warning
Node {nodename} status is now: NodeRepairActionTerminated自愈动作被终止Normal
NodeRepairActionSucceeded自动故障处理成功{Gpu 故障事件}RecoveredAfterRepairAction故障自愈后再检测故障恢复Normal

前提条件

  • 已在集群中安装 node-problem-detector 组件,并升级至 v0.8.19-vke.3 及以上版本。详情请参见 安装组件
  • (可选)已创建托管 Prometheus 工作区,详情请参见 创建通用工作区

操作步骤

步骤一:配置检查自愈规则

  1. 登录 容器服务控制台
  2. 单击左侧导航栏中的 集群
  3. 在集群列表页面,单击目标集群,进入集群管理页面。
  4. 在集群管理页面的左侧导航栏中选择 检查自愈,单击 创建检查和自愈规则,创建检查自愈规则。
    alt
    配置项说明
    规则名称配置检查自愈规则的名称。同一个集群下,规则名称必须唯一。
    检测自愈规则
    故障类型选择需要进行检测的故障类型,支持:GPU 故障节点故障系统与组件故障
    检查项在指定故障类型下,选择需要进行检测的项目。不同类型的故障支持不同的检查项。详情请参见 自愈检查项

    故障处理方式

    选择故障自动处理方式,包括:

    • 提示异常:仅包含 提示异常 流程。
    • 封锁节点:包含 提示异常(可选)流程干预封锁节点 流程。
    • 排干节点:包含 提示异常(可选)流程干预封锁节点排干节点 流程。
    • 自动修复:包含 提示异常(可选)流程干预封锁节点排干节点自动恢复(可选)解除封锁 流程。
  5. 配置故障处理流程。
    • 提示异常:节点发生故障时,系统会将故障信息转化为监控指标,您可以使用云原生观测功能获取指标信息,并在托管 Prometheus 产品中查看对应的指标。详情请参见 节点故障指标
    • 流程干预:开启该功能后,系统会在前置步骤完成后,为节点添加指定的标签,用于标识发生故障的节点。您可以基于标签筛选指定的节点,进行人工干预和故障处理。
      alt
    • 封锁节点:节点发生故障时,为节点添加 NoSchedule 污点,禁止调度新的 Pod 到该节点。
    • 排干节点:节点发生故障时,为节点添加 NoExecute 污点,并驱逐节点上的所有 Pod。
      配置项说明

      禁止调度

      配置从节点被封锁到开始进行 Pod 驱逐的时间。支持多种时间段选择,包括:立刻、15 分钟、30 分钟、1 小时、2 小时、3 小时、6 小时、12 小时、24 小时、36 小时、2 天、3 天、4 天、5 天、6 天、7 天等。

      注意

      节点排干前会检查节点是否运行了以下工作负载,您需要确保节点上不存在这些工作负载,否则将不会进行节点排干的操作:

      • ingress-controller Pod。
      • 强绑定节点的工作负载。
      • 单副本的工作负载。
      • Static Pod。

      节点排干不能完全保证终止/驱离节点上的工作负载,如果有工作负载无法被驱离,在不进行人工干预的前提下,将不会执行下一步自愈操作直至强制重启(若配置强制重启时间)。

    • 自动恢复:当开启该功能时。系统在节点排干后会尝试修复节点故障,完成自愈。
      配置项说明

      必要时重启 ECS

      不同故障的自动修复操作不同,详情请参见 自愈检查项。勾选该配置时,除自动修复操作外,会自动重启节点。
      配置从节点排干到重启节点的等待时间,包括:立即、30 分钟、1 小时、2 小时、3 小时、6 小时等。

    • 解除封锁:节点重启并修复故障后,是否自动解除封锁。当开启该功能时,节点重启后系统会再次进行健康检查,当所有检测项均无异常时,将解除节点封锁。

      注意

      系统仅能确保的已有检测项无异常,若发生超出节点检测项范围的故障,仍有可能导致训练或推理任务运行异常,如果自愈流程完成后,仍然存在问题,请 提交工单 获取技术支持。

  6. 配置完成后,仔细阅读 注意事项,并勾选 我已知晓并同意,单击 确定,完成配置。

步骤二:节点池绑定检查自愈规则

您可以在创建节点池时绑定检查自愈规则,也可以为存量节点池绑定检查自愈规则。本文以创建节点池时绑定检查自愈规则为例。

说明

当前仅托管节点池支持绑定检查自愈规则,如果您的节点池为普通节点池,可以将其开启托管后,再绑定检查自愈规则。

  1. 在集群管理页面的左侧导航栏,选择 节点管理 > 节点池,单击 创建节点池,创建新的节点池。
  2. 在弹出的对话框内选择 托管节点池
    alt
  3. 配置节点池详情,在 运维配置 处启用 检查和自愈 功能,并绑定检查自愈规则。
    alt
    配置项说明

    检查和自愈

    配置是否开启节点检查自愈功能。

    • 开启:通过配置节点自愈规则,系统会自动检查节点状态,当节点故障时及时进行处理和自愈。
    • 关闭:(默认)不开启节点检查自愈功能。

    检查和自愈规则

    配置检查自愈规则:

    • 推荐规则:使用系统默认的推荐规则,详情请参见 推荐规则
    • 自定义规则:使用用户的自定义规则,请在下拉菜单中选择已配置的检查自愈规则。

    说明

    节点池的其他配置详情,请参见 创建节点池

  4. 单击 确定,完成绑定。

步骤三:(可选)开启云原生观测

如果您需要使用 节点故障指标 获取节点的状态,需要开启云原生观测功能,操作步骤如下:

  1. 为集群绑定托管 Prometheus 工作区,安装 Prometheus-agnet 组件,并开启云原生观测。详情请参见 开启观测
  2. 开启检查自愈观测,详情请参见 检查自愈观测

结果验证

查看检查自愈规则

  1. 在集群管理页面的左侧导航栏中,单击 检查自愈
  2. 在自愈规则列表中,单击检查自愈规则名称,即可查看规则的详情。
    alt

查看自愈任务详情

当节点发生故障,并完成自愈后,您可以在节点详情页面中查看自愈任务列表和自愈详情。

  1. 在集群管理页面的左侧导航栏,选择 节点
  2. 单击目标节点名称,进入节点详情页面。
  3. 选择 故障自愈 页签,即可查看当前节点的故障自愈任务列表。
    alt
  4. 单击自愈任务名称,支持查看当前节点的自愈详情。
    alt

查看检查自愈观测

您可以在云原生观测大盘中查看检查自愈观测的监控信息,并配置相应的告警。详情请参见 检查自愈观测

查看告警规则详情

配置检查自愈告警后,可以在 VMP 控制台查看对应的告警规则详情。

  1. 登录 VMP 服务控制台
  2. 单击左侧导航栏的 告警中心 > 告警规则。在 告警规则组 页签中,查看配置的检查自愈告警规则组。
    alt
  3. 单击告警规则组名称,进入告警规则组详情页面,选择 告警规则列表 页签,查看告警规则详情。
    alt

其他操作

终止检查自愈流程

检查自愈任务执行过程中,您可以随时手动终止自愈流程。

注意

自愈任务流程被终止后,当前进行的步骤将继续执行结束,后续的步骤将不再执行,您必须手动解决遗留的问题。在节点解除封锁前,将不会对该节点再次执行故障处理操作。

  1. 在集群管理页面的左侧导航栏,选择 节点
  2. 单击目标节点名称,进入节点详情页面。
  3. 选择 故障自愈 页签,并在故障自愈任务列表中选择目标自愈任务。
  4. 单击自愈任务名称,进入自愈详情页。单击 终止故障处理,即可终止当前自愈任务。
    alt