节点作为集群的基础设施,其工作状态对用户来说至关重要。火山引擎容器团队自研节点检查和自愈功能,面向节点进行常见故障检测和故障自愈。本文为您介绍如何配置节点检查自愈功能。
容器服务支持节点检查自愈功能,系统会按照规则配置,定期进行节点检查。当节点故障时,会记录 Node Event 事件,并执行自愈动作。
节点检查自愈的工作流程,如下图所示。
说明
节点检查自愈功能为您提供了不同的故障处理流程,您可以根据实际需求进行选择。包括:
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 故障 | NodeFailure | ECS 发生故障时,快速摘除 ECS 上的节点,将业务受损时间从 5 分钟降低到 1分钟,并响应故障事件自动恢复。 | 冷迁节点 |
说明
节点故障主要监控 ECS 实例的 SystemMaintenance.Redeploy、InfrastructureUpgrade.Redeploy、SystemFailure.Redeploy 和 DiskErrorDetected 事件。事件发生后,不同事件需要您进行不同的运维操作。详情请参见 事件类型汇总、查询与响应“因系统维护实例重新部署”事件。
系统与组件故障场景支持 提示异常 和 自动修复 故障处理策略,不同检查项对应的 Event 和自动修复策略,如下表所示。
检查项 | Event | 描述 | 自动修复策略 |
---|---|---|---|
Kubelet 故障 | KubeletUnhealthy | Kubelet 运行状态异常导致节点不可用。 | 重启 Kubelet 服务 |
Runtime 故障 | RuntimeUnhealthy | Containerd/Docker 运行状态异常导致节点不可用。 | 重启 Containerd 服务 |
时间同步服务异常 | NTPProblem | 时钟同步服务(Chrony)异常。 | 重启 Chrony 服务 |
节点文件系统只读 | ReadonlyFilesystem | 节点文件系统变为只读,导致节点上业务运行异常。 | 重启节点 |
节点内核故障 | KernelOops | 节点存在内核错误,影响节点上的容器服务正常运行。 | 重启节点 |
节点内核死锁 | KernelHasDeadlock | 节点内核存在死锁。 | 重启节点 |
说明
在执行 Kubelet 故障 与 Runtime 故障 修复时,会同时判断 Kubelet 与 Containerd 服务是否正常,如果存在服务异常则会一起修复。
节点检查自愈功能支持将节点故障基于指标的形式暴露给监控系统,您可以基于指标和标签追溯故障时间并定位到具体的资源。如需使用,请在集群中开启云原生观测功能。详情请参见 步骤三:(可选)开启云原生观测。
节点故障指标说明,如下表所示。
项目 | 描述 |
---|---|
指标名称 | aiops_resource_status |
指标类型 | Gauge |
标签值 |
|
指标值 | Float64 形式,不同的数字代表不同的故障。 |
节点故障指标中,不同故障对应不同的取值,详情如下表所示。
故障 Event | 故障时的值 | 故障码(二进制) | 故障码(十进制) |
---|---|---|---|
GpuCardFallen | 1 | 10000000000000000000 | 524288 |
GpuMemoryErrorRecoverable | 1 | 01000000000000000000 | 262144 |
GpuMemoryErrorUnrecoverable | 1 | 00100000000000000000 | 131072 |
GpuLinkError | 1 | 00010000000000000000 | 65536 |
GpuLinkUnhealthy | 1 | 00001000000000000000 | 32768 |
GpuDriverError | 1 | 00000100000000000000 | 16384 |
GpuDriverWarning | 1 | 00000010000000000000 | 8192 |
GpuRuntimeWarning | 1 | 00000001000000000000 | 4096 |
GpuRuntimeError | 1 | 00000000100000000000 | 2048 |
GpuUnknownError | 1 | 00000000010000000000 | 1024 |
KubeletUnhealthy | 1 | 00000000001000000000 | 512 |
RuntimeUnhealthy | 1 | 00000000000100000000 | 256 |
NTPProblem | 1 | 00000000000010000000 | 128 |
FilesystemError | 1 | 00000000000001000000 | 64 |
KernelOops | 1 | 00000000000000100000 | 32 |
NodeResourceLeak | 1 | 00000000000000010000 | 16 |
NodeFailure | 1 | 00000000000000001000 | 8 |
NodeNotReady | 1 | 00000000000000000100 | 4 |
ReadonlyFilesystem | 1 | 00000000000000000010 | 2 |
KernelHasDeadlock | 1 | 00000000000000000001 | 1 |
无故障 | - | 00000000000000000000 | 0 |
说明
如果节点同时存在多种故障,则故障码进行组合处理。例如:当节点同时存在 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 | 将节点置为 NotReady | Warning | ||
Node {nodename} status is now: Eviting | 开始驱逐 Backend | Warning | ||
Node {nodename} status is now: RecreateStatfulsetPod_{Statefulset 名称} | 重建 Statefulset Pod | Normal | ||
NodeRepairActionFailed | 自动故障处理失败 | Node {nodename} status is now: NodeIngressControllerExist | 排干前检查节点运行了 ingress-controller Pod | Warning |
Node {nodename} status is now: NodeBindPodExist | 排干前检查节点存在强绑定节点的工作负载 | Warning | ||
Node {nodename} status is now: NodeSingleInstanceWorkloadExist | 排干前检查节点存在单副本工作负载 | Warning | ||
Node {nodename} status is now: NodeStaticPodExist | 排干前检查节点存在 Static Pod | Warning | ||
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 |
配置项 | 说明 |
---|---|
规则名称 | 配置检查自愈规则的名称。同一个集群下,规则名称必须唯一。 |
检测自愈规则 | |
故障类型 | 选择需要进行检测的故障类型,支持:GPU 故障、节点故障 和 系统与组件故障。 |
检查项 | 在指定故障类型下,选择需要进行检测的项目。不同类型的故障支持不同的检查项。详情请参见 自愈检查项。 |
故障处理方式 | 选择故障自动处理方式,包括:
|
配置项 | 说明 |
---|---|
禁止调度 | 配置从节点被封锁到开始进行 Pod 驱逐的时间。支持多种时间段选择,包括:立刻、15 分钟、30 分钟、1 小时、2 小时、3 小时、6 小时、12 小时、24 小时、36 小时、2 天、3 天、4 天、5 天、6 天、7 天等。 注意 节点排干前会检查节点是否运行了以下工作负载,您需要确保节点上不存在这些工作负载,否则将不会进行节点排干的操作:
节点排干不能完全保证终止/驱离节点上的工作负载,如果有工作负载无法被驱离,在不进行人工干预的前提下,将不会执行下一步自愈操作直至强制重启(若配置强制重启时间)。 |
配置项 | 说明 |
---|---|
必要时重启 ECS | 不同故障的自动修复操作不同,详情请参见 自愈检查项。勾选该配置时,除自动修复操作外,会自动重启节点。 |
注意
系统仅能确保的已有检测项无异常,若发生超出节点检测项范围的故障,仍有可能导致训练或推理任务运行异常,如果自愈流程完成后,仍然存在问题,请 提交工单 获取技术支持。
您可以在创建节点池时绑定检查自愈规则,也可以为存量节点池绑定检查自愈规则。本文以创建节点池时绑定检查自愈规则为例。
说明
当前仅托管节点池支持绑定检查自愈规则,如果您的节点池为普通节点池,可以将其开启托管后,再绑定检查自愈规则。
配置项 | 说明 |
---|---|
检查和自愈 | 配置是否开启节点检查自愈功能。
|
检查和自愈规则 | 配置检查自愈规则:
|
说明
节点池的其他配置详情,请参见 创建节点池。
如果您需要使用 节点故障指标 获取节点的状态,需要开启云原生观测功能,操作步骤如下:
当节点发生故障,并完成自愈后,您可以在节点详情页面中查看自愈任务列表和自愈详情。
您可以在云原生观测大盘中查看检查自愈观测的监控信息,并配置相应的告警。详情请参见 检查自愈观测。
配置检查自愈告警后,可以在 VMP 控制台查看对应的告警规则详情。
检查自愈任务执行过程中,您可以随时手动终止自愈流程。
注意
自愈任务流程被终止后,当前进行的步骤将继续执行结束,后续的步骤将不再执行,您必须手动解决遗留的问题。在节点解除封锁前,将不会对该节点再次执行故障处理操作。