kubernetes基于node-problem-detector实现异常节点检测
Kubernetes集群可能存在的问题基础架构守护程序问题: NTP服务关闭硬件问题:CPU,内存或磁盘损坏 内核问题:内核死锁,文件系统损坏容器运行时问题:运行时守护程序无响应…当Kubernetes中节点发生上述问题,在整个集群中,k8s服务组件并不会感知以上问题,就会导致pod仍会调度至问题节点。Node-problem-detector为了解决这个问题,社区引入了守护进程node-prob
·
Kubernetes集群可能存在的问题
- 基础架构守护程序问题: NTP服务关闭
- 硬件问题:CPU,内存或磁盘损坏 内核问题:内核死锁,文件系统损坏
- 容器运行时问题:运行时守护程序无响应
- …
当Kubernetes中节点发生上述问题,在整个集群中,k8s服务组件并不会感知以上问题,就会导致pod仍会调度至问题节点。
Node-problem-detector
为了解决这个问题,社区引入了守护进程node-problem-detector,从各个守护进程收集节点问题,并使它们对上游层可见。
Kubernetes节点诊断的工具,可以将节点的异常,例如:
- Runtime无响应;
- Linux kernel无响应;
- 网络异常 ;
- 文件描述符异常;
- 硬件问题如cpu,内存或者磁盘故障。
故障分类
问题汇报手段
Node-problem-detector通过设置NodeCondition或者创建event对象来汇报问题。
- NodeCondition: 针对永久性故障,会通过NodeCondition来改变节点状态
- Event:临时故障通过event来提醒相关对象,比如通过当前节点运行的所有pod。
动手实践
1、下载安装包
helm repo add deliveryhero https://charts.deliveryhero.io/
helm pull deliveryhero/node-problem-detector
tar -zxvf node-problem-detector-2.0.9.tgz
2、修改image
vi node-problem-detector/values.yaml
image:
repository: cncamp/node-problem-detector
tag: v0.8.10
pullPolicy: IfNotPresent
3、安装
helm install npd ./node-problem-detector
查看状态
4、制造异常
sudo sh -c "echo 'kernel: BUG: unable to handle kernel NULL pointer dereference at TESTING' >> /dev/kmsg"
#查看节点信息
kubectl describe nodes ops-node-1
可以看到通过KernelOops这样的一个event把消息通知到了Kubernetes,只是起到一个通知的作用,还需要集成监控告警系统来完善。
5、使用插件pod启用npd
如果你使用的是自定义集群引导解决方案,不需要覆盖默认配置,可以利用插件Pod进一步自动化部署。
创建node-strick-detector.yaml,并在控制平面节点上保存配置到插件Pod的目录 /etc/kubernetes/addons/node-problem-detector
6、npd的异常处理行为
- NPD只负责获取异常事件/并修改node condition,不会对节点状态和调度产生影响
lastHeartbeatTime: "2022-03-02T14:12:01Z"
lastTransitionTime: "2022-03-02T13:51:57Z"
message: kernel has no deadlock
reason: KernelHasNoDeadlock
status: "False"
type: KernelDeadlock
- 需要自定义控制器,监听NPD汇报的condition, taint node,阻止pod调度至故障节点
- 问题修复后,重启NPDPod来清理错误事件
更多推荐
已为社区贡献7条内容
所有评论(0)