Kubernetes 节点故障类型:硬件故障、软件故障、网络分区、资源耗尽、内核 Panic

在 Kubernetes 集群中,节点(Node)是承载 Pod 运行的基础单元。节点故障并非单一场景,而是由不同层面的异常触发。理解故障类型的本质差异,是制定精准迁移策略的前提。本章将五种核心故障类型拆解为可观测、可分类的模型,帮助运维人员快速定位根因并选择对应的 SLO 保障手段。

5.1 故障类型全景分类

根据故障发生的层次与影响范围,节点故障可分为以下五类。每一类在检测手段、恢复时间、对 Pod 的影响上均有显著差异。

故障类型 典型根因 检测信号 影响范围 恢复难度
硬件故障 磁盘损坏、内存 ECC 错误、电源失效、网卡故障 IPMI 告警、SMART 错误、硬件看门狗超时 单节点完全不可用 高(需换件)
软件故障 kubelet 崩溃、容器运行时挂死、操作系统服务异常 kubelet 心跳丢失、API Server 连接超时 单节点部分或全部不可用 中(可重启服务)
网络分区 交换机故障、链路中断、CNI 插件异常、DNS 解析失败 节点间 ICMP 不可达、etcd 心跳超时、Pod 间通信断裂 节点组或跨可用区隔离 中(依赖网络恢复)
资源耗尽 CPU 节流、内存 OOM、磁盘空间满、inode 耗尽、PID 耗尽 Node Condition 异常、Eviction 事件、系统 OOM Killer 单节点性能严重下降或部分 Pod 被驱逐 低(清理资源即可)
内核 Panic 内核 BUG、驱动崩溃、文件系统损坏、内存越界 系统完全无响应、kdump 生成、控制台 Kernel Panic 信息 单节点完全崩溃 高(需重启或重装)
运维提示: 在 SRE 实践中,资源耗尽 是最容易被误判为硬件故障的类型。建议在告警系统中优先区分 Node Condition 中的 MemoryPressure、DiskPressure、PIDPressure 状态,避免不必要的硬件换件流程。

5.2 故障类型与迁移触发逻辑

不同的故障类型决定了 Pod 迁移的紧急程度 和 迁移策略的选择。下图展示了从故障发生到迁移决策的核心判断链路。

节点故障类型 → 迁移决策链路 硬件故障 内核 Panic 网络分区 软件故障 资源耗尽 节点是否可调度?kubelet 心跳是否正常? Node Ready 状态 & Node Condition 综合判断 是 否 优雅驱逐 + 重调度 强制迁移 + 节点隔离 SLO 作业模板迁移策略输出 根据故障类型选择:优雅迁移 / 强制迁移 / 延迟迁移 / 跳过迁移 关键原则:可调度节点优先优雅驱逐;不可调度节点立即强制迁移,避免 SLO 违约

5.3 各故障类型的迁移策略要点

针对五种故障类型,SRE 团队需要制定差异化的迁移策略。下表总结了每种类型的推荐迁移方式、SLO 影响等级以及关键操作。

故障类型 推荐迁移策略 SLO 影响等级 关键操作
硬件故障 强制迁移 + 节点隔离 严重(P0) 立即 kubectl cordon + kubectl drain --force,触发 Pod 重新调度
内核 Panic 强制迁移 + 节点隔离 严重(P0) 节点完全失联,依赖 node-lifecycle-controller 超时驱逐(默认 5 分钟)
网络分区 延迟迁移 / 强制迁移 高(P1) 先尝试网络恢复,若超过容忍时间(如 3 分钟)则强制迁移
软件故障 优雅迁移 / 重启服务 中(P2) 尝试重启 kubelet 或容器运行时,失败后执行优雅驱逐
资源耗尽 优雅驱逐 + 资源清理 中(P2) 优先驱逐低优先级 Pod,触发 kubelet eviction 机制
关键风险: 对于 网络分区 类型的故障,如果集群中同时存在多个节点失联,etcd 集群可能面临脑裂风险。此时不应盲目执行 Pod 迁移,而应先确认 etcd 集群的法定人数是否仍然满足。建议在迁移策略中加入 --pod-selector 过滤,避免迁移 etcd 或控制面组件。

5.4 故障检测时间线对比

不同故障类型的检测时间差异巨大,直接影响 SLO 的恢复时间目标(RTO)。下图对比了五种故障从发生到被 Kubernetes 控制面感知的典型时间线。

故障检测时间线对比(秒级) 0s 10s 30s 60s 90s+ 硬件故障 IPMI 告警:5-15s Panic 立即失联 网络分区 心跳超时:40s 软件故障 kubelet 心跳丢失:60s 资源耗尽 Node Condition 更新:90s+ 检测时间越短,SLO 恢复窗口越充裕。内核 Panic 和硬件故障需要最快的迁移响应

5.5 故障类型与 SLO 指标映射

在 SLO 作业模板中,每种故障类型对应不同的 可用性指标 和 迁移容忍时间。下表给出了推荐的映射关系,供模板配置时参考。

故障类型 可用性指标 推荐迁移容忍时间 SLO 目标参考
硬件故障 节点可用性(Node Up) ≤ 30s 99.99%
内核 Panic 节点可用性(Node Up) ≤ 30s 99.99%
网络分区 Pod 间连通性 ≤ 120s 99.95%
软件故障 kubelet 可用性 ≤ 180s 99.9%
资源耗尽 节点资源压力 ≤ 300s 99.5%
实践要点: 在配置 SLO 作业模板时,建议将 迁移容忍时间 作为模板参数暴露给平台用户。对于硬件故障和内核 Panic,容忍时间应设置为集群中最短的 node-monitor-grace-period(默认 40s)的一半,即 20s 左右,以确保在控制面判定节点 NotReady 之前完成迁移决策。