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 迁移的紧急程度 和 迁移策略的选择。下图展示了从故障发生到迁移决策的核心判断链路。
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 控制面感知的典型时间线。
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 之前完成迁移决策。