背景
当 Kubernetes 中节点发生如下问题时,在整个集群中,K8S 服务组件并不会感知这些问题,就会导致 Pod 仍会调度至问题节点。所以就需要一个检测机制来检测上述问题。
- 基础服务问题:NTP 服务挂了;
- 硬件问题:CPU,内存或磁盘损坏;
- 内核问题:内核死锁,文件系统损坏;
- 容器运行时问题:运行时守护程序无响应。
node-problem-detector
https://github.com/kubernetes/node-problem-detector
node-problem-detector是集群节点的健康监测组件。以 DaemonSet 方式运行,帮助用户实时检测节点上的各种异常情况,并将检测结果报告给上游的 Kube-apiserver。
故障种类
故障上报
node-problem-detector 通过设置 NodeCondition 或者创建 Event 对象来汇报问题。
- Nodecondition:针对永久性故障,会通过设置NodeCondition 来改变节点状态。
- Event:临时故障通过 Event 来提醒相关对象,比如通知当前节点运行的所有 Pod。