Kubernetes 节点问题可观测最佳实践

简介

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
  • KernelDeadlock (内核死锁)
  • ReadonlyFilesystem (文件系统只读)
  • FrequentKubeletRestart ( Kubelet 频繁重启)
  • FrequentDockerRestart ( Docker 频繁重启)
  • FrequentContainerdRestart ( Containerd 频繁重启)
根据预定义规则监控系统日志,报告问题和指标,可禁用。
SystemStatMonitor 根据预定义规则监控系统健康相关的状态,报告问题和指标,可禁用。
CustomPluginMonitor NTPProblem ( NTP 问题) 调用用户自定义的问题检测器,仅包含 NTP 检测器作为示例,可禁用。
HealthChecker
  • KubeletUnhealthy ( Kubelet 非健康状态)
  • ContainerRuntimeUnhealth
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值