监控k8s deployment发布与异常

大家普遍使用deployment来部署业务,使用prometheus来监控k8s集群,这些没有什么好说的。

但是我们也知道pod有可能会故障挂掉,甚至也可能再也启动不起来。

我们也知道prometheus采用的scrape定时抓取机制,因此其监控是必然存在空挡导致遗漏的。

需求

因为deployment是我们日常最重要的资源对象,我特别在意如下几个事情:

  • 是否有人发布?
  • 本次发布花费了多久?是否超时?
  • 是否有pod异常?
  • 恢复异常用了多久?

这4件事情对于我们监控服务质量非常重要,如果可以实时的告警与通知到我们的手机上,那就可以第一时间发现问题并介入处理。

实现

网上并没有成熟的工具,为了实现这个效果,我采用python编写了一个简单的程序:

  • 通过apiserver的watch机制监听整个K8S集群所有deployment的变化,其实相当于在监听etcd的变化。
  • 在内存中维护所有deployment的状态机,在出现关键状态变更时触发回调,允许开发者自定义处理行为,例如:发送告警、网络回调到自己的发布平台等。

项目源代码在这里:https://github.com/owenliang/kubernetes-deployment-tracer

代码提供了默认的demo回调函数,对 发布、发布超时、发布成功、异常、异常恢复 几种核心状态进行了演示,方便大家结合到自己公司内的平台做自定义扩展。

希望大家可以基于该项目以及其灵感,帮助自己的公司得到一个更加透明与安全的kubernetes集群。

如果文章帮助您解决了工作难题,您可以帮我点击屏幕上的任意广告,或者赞助少量费用来支持我的持续创作,谢谢~