监控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集群。
如果文章帮助您解决了工作难题,您可以帮我点击屏幕上的任意广告,或者赞助少量费用来支持我的持续创作,谢谢~
