demo地址git
https://github.com/cclient/kubernetes-filebeat-collectores6
高可用还谈不上,是对kubernete一种服务异常重启恢复的补充方案github
以前已经完成了kubernete的日志的收集,日志监控,没什么好说的 kibana grafana都是很成熟的ui产品,也都支持elasticsearch数据源golang
主要关注点是报警及报警信息的应用web
kibana基础版本不支持报警,es 产品x-pack支持报警,但这东西收费,因此不考虑redis
有es报警的部分产品 如ElastAlert,不知是否支持es6.3,暂时不考虑后端
而grafana自己也支持报警 alertingapi
结合grafana自己的ui,效果很不错,同时支持多种alert 规则,其中包含webhook,webhook的定制能力很强,能够在接收到报警日志后做一些自定义的事情app
因为grafana已经可用,这里选型grafana做测试运维
kubernetes 的 liveness probe 功能有限
如 kube的 liveness probe 如http 是监听端口是否可用,有时会有这样的状况,服务的状态还可用,但已经没法完成有效的业务处理
好比,web服务可用,端口正常监听,但web服务依赖的后端服务出问题了,实际全部请求处理都失败(日志状态会区别于正常服务),这种状况kube默认的liveness probe 规则是没法察觉的,须要做更进一步的定制。
而若是根据为每一个服务定制专用的liveness probe服务,成本比较高,也会对原项目有较高的侵入性
咱们能够采用基于日志来间接判断服务状态的方案,虽然不是100%准确,但侵入小,适用面广,能够做为一个基础的方案,对准确性有更高要求的再后续定制
结合kubernetes的liveness probe,能够实现基于日志情况,报警,并重启服务
实现起来并不复杂
deploy->filebeat日志收集->写入es->grafana ui->grafana alerting 日志触发报警规则(例,10分钟内count数为0)-> webhook接收报警 -> 记录当前服务状态为失效
另外部署一套服务,查询服务状态
liveness probe 检查服务状态,若返回当前服务失效,则k8会自动重启服务
这样的流程,做为对kube liveness的简单补充
功能已经实现完成
服务状态持久化,选择简单的redis
而服务状态的api实现,这里直接用webhook(golang 实现的运维工具),配置规则便可,不必另外开发
grafana 报警规则的配置,文字也很差说明,直接看图
启动服务时 kubernetes-init
del key
检查服务状态 kubernetes-liveness
exists key
webhook收到报警 grafana-redis-alert
set key 1
最后yml示例
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: consume
namespace: default
labels:
app: consume
spec:
replicas: 1
template:
metadata:
labels:
app: consume
spec:
containers:
- name: consume
imagePullPolicy: Always
image: cuidapeng/busybox-curl:v0.1
# del consume
command: ['sh', '-c', 'curl http://alert_hook_server:9000/hooks/kubernetes-init?contain=consume && echo The app is running! && sleep 3600']
livenessProbe:
exec:
command: ['sh', '-c', 'return $(curl -fsSL http://alert_hook_server:9000/hooks/kubernetes-liveness?contain=consume)']
initialDelaySeconds: 5
periodSeconds: 5
initContainers:
- name: init-myservice
image: cuidapeng/busybox-curl:v0.1
command: ['sh', '-c', 'curl http://alert_hook_server:9000/hooks/kubernetes-init?contain=consume;']