基本翻译了k8s官方doc中的监控模块 http://kubernetes.io/docs/user-guide/monitoring/
边翻译,边学习!
官方推荐的监控方案是 Heapster + cAdvisor + influxDB + Grafana
简单说来:cAdvisor 负责收集各个node上的容器资源使用数据,Heapster 收集各个node上的 cAdvisor 数据(实际是node上的kubelet收集cAdvisor数据,然后Heapster手机kubelet数据),InfluxDB 将 Heapster 数据做持久化,Grafana 负责数据展示。
Kubernetes监控方案
在kubernetes集群中,可以对应用提供多层次上的监控,容器级监控,pod级监控,service级监控,整个cluster级监控。监控作为k8s中很重要的一部分,我们想提供给用户关于他们运行的应用的所有层次的资源使用情况。这会给用户在了解应用运行状况的深度视角,这也更有助于发现应用瓶颈在哪里。Heapster就是一个这样的项目,能在k8s集群中提供一个基本监控的平台。
Heapster是集群视角下的监控和事件数据的聚合器。Heapster原生支持k8s。在k8s集群中,Heapster作为一个pod运行。Heapster的pod能够发现集群上的所有node,并且从每个node上的kubelet中查询资源使用情况。node上的kubelet本身从 cAdvisor 中获取数据,Heapster会根据pod和相关的labels聚集信息,这些数据会发送到后端,后端用来存储数据和可视化。目前支持的后端包括 InfluxDB (Grafana 提供可视化),Google Cloud Monitoring, 详细描述见这里。系统架构图如下:
下面我们详细地介绍一个各个组件:
cAdvisor
cAdvisor是一款开源的资源使用情况的agent工具,它可以直接作为docker container容器运行。在k8s中,cAdvisor已经集成到kubelet二进制文件中,cAdvisor能够自动发现node上所有containers,并且收集cpu,内存,文件系统,网络情况数据。cAdvisor也能通过分析root container提供整个机器资源使用情况。
cAdvisor的UI界面:
Kubelet
Kubelet扮演着kubernetes master和node之间的桥梁,它管理着node上运行着的pods和containers。Kubelet从node上的cAdvisor上获取数据,然后通过REST API将这些数据暴露给聚合的pod(通常就是Heapster)
InfluxDB and Grafana
InfluxDB+Grafana是一种非常流行的监控数据存储和展示方案。InfluxDB暴露了非常简单的API去获取和写入定时的监控数据。在大多数的k8s集群中,Heapster用InfluxDB作为后端存储。InfluxDB和Grafana也作为pods运行。这些pods暴露成一个service,让Heapster发现它。
Grafana提供了一个简单可配置的dashboard UI,默认的UI包含了监控整个集群资源使用情况和pods,containers资源使用情况。Grafana的dashboard是很容易地定制化。这里有详细地InfluxDB存储模式 https://github.com/kubernetes/heapster/blob/master/docs/storage-schema.md#metrics
Grafana UI:
Heapster详细使用配置情况见:https://github.com/kubernetes/heapster