简介
Node Problem Detector(NPD)是 Kubernetes 集群中一个重要的监控插件,它的作用是监控节点的健康状况并检测可能出现的问题。NPD 通过在每个节点上运行的检测器来工作,能够发现基础设施、容器运行时、硬件和内核等问题,并将这些问题报告给集群中的上层控制面。
NPD 只是作为一个问题检测和报告程序运行,需要配合自愈程序才能完成节点问题的自动处理,默认的集群控制面组件并不会响应 NPD 报告的问题。NPD 可以检测的问题如下:
- 基础设施问题: NTP 服务关闭;
- 硬件问题:损坏的处理器 、内存或者磁盘;
- 内核问题:内核死锁或者文件系统损坏;
- 容器运行时问题:CRI 守护进程无响应;
- ...
NPD 以 DaemoSet 或独立进程的方式运行,支持多个 exporter 作为通知渠道,其中 Kubernetes exporter 向 APIServer 报告以下两类节点问题:
- Event ,对 Pod 影响有限但值得关注的问题;
- NodeCondition , 可以导致 Pod 无法在节点运行的持久性问题;
实际上,两类问题都会产生 K8s Event ,只不过 NodeCondition 会作为一个不可自动恢复的状态持久存在于 Node 的描述信息中,除非主动重置或者重启 NPD Pod。考虑到 NodeCondition 需要作为自愈系统的输入,这是一种合理的设计,让自愈行为能够实现串行操作,有利于在自愈过程中保持一致性。
架构方面,目前, NPD 作为守护进程以 goroutine 方式运行各类问题检测器,支持用户以各种语言扩展,例如编写 check_xxx.sh 脚本并配置为 NPD 插件, temporary 和 permanent 类型的规则分别为 APIServer 上报 Event 和 NodeCondition ,未来, NPD 和 问题检测器的架构可能发生变更,部分问题检测器以主机进程的方式运行,以避免检测行为受到被检测对象干扰,导致事件丢失。
NPD 支持的检测器类型有:
| 问题检测器类型 | NodeCondition | 描述 |
|---|---|---|
| SystemLogMonitor |
|
根据预定义规则监控系统日志,报告问题和指标,可禁用。 |
| SystemStatMonitor | 无 | 根据预定义规则监控系统健康相关的状态,报告问题和指标,可禁用。 |
| CustomPluginMonitor | NTPProblem ( NTP 问题) | 调用用户自定义的问题检测器,仅包含 NTP 检测器作为示例,可禁用。 |
| HealthChecker |
|

最低0.47元/天 解锁文章
318

被折叠的 条评论
为什么被折叠?



