node-problem-detector

node-problem-detector是处理节点不同问题传递给集群管理栈的上层系统的服务。在每个节点运行的 node-problem-detector 会侦测节点故障,并报告给apiserver。这个 node-problem-detector 可以运行为 DaemonSet 或者独立运行。当前在GCE集群中,node-problem-detector默认作为Kubernetes Addon激活。

node-problem-detector (NPD) 开发的目标是为了解决node运行的大量问题:

  • 基础架构服务问题(Infrastructure daemon issues) 例如每个服务器上都需要运行ntp服务,基础服务监控和故障恢复决定了节点是否能够正常工作

  • 硬件故障(Hardware issues) 例如故障的cpu,内存或者硬盘

  • 内核异常(Kernel issues) 例如内核死锁,异常的文件系统

  • 容器运行时异常(Container runtime issues) 例如无响应的运行时daemon

node-problem-detector 从不同的daemon采集节点问题,然后把这些异常暴露给上层,这样上层 Remedy Systems(纠正系统) 就能感知这些问题。

异常API(Problem API)

node-problem-detector 使用 Event (事件) 和 NodeCondition (节点状况)来向apiserver报告问题:

  • NodeCondition : 导致pods无不可用都持久性错误会被报告为 NodeCondition

  • Event : 有限影响pod的临时性异常将被报告为 Event

异常Daemon(Problem Daemon)

Problem Daemon是一个 node-problem-detector 的子服务进程。这个Problem Daemon是用来监控特定类型节点异常以及报告给 node-problem-detector

一个problem daemon应该是:

  • 一个设计成采用用户案例方式的tiny daemon

  • 一个现有节点监考你孤独监控服务集成到 node-problem-detector

当前,problem daemon是作为 node-problem-detector 二进制程序的一个 goroutine 来运行,未来将分离 node-problem-detectorproblem daemon 到不同容器,然后将两个容器组合成特定pod。

每一类problem daemon可以设置相应的 build tags 在汇编时候禁用,。如果在汇编时禁用,则所有的编译依赖,全局变量以及后台goroutines将被从编译执行包中裁剪掉。

Remedy Systems(纠正系统)

remedy system是一个用于通过NPD检测出问题后自动实现纠正的进程。remedy system关注node-problem-detector发现的事件或节点状态,并采取行动将Kubernetes集群恢复到健康状态:

参考