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;']