2019独角兽企业重金招聘Python工程师标准>>>
Kubernetes运行监控-使用Helm快速部署Prometheus和Grafana
使用Helm快速部署Pormetheus和Grafana非常方便,很多手工部署的方法不再需要了。
Kubernetes运行监控分为宿主机、容器以及Kubernetes集群的Node、Deployment、Replicaset、Storage、Pod、Service等数量和状态等方面,可以使用Heapster+Influxdb+Grafana的组合,或者使用Prometheus + Grafana的组合,传统的ELK方案无法穿透集群、而且集中于离线的方式不太适合Kubernetes中应用。
这里重点介绍KPG(Kubernetes+Prometheus+Grafana)的监控方案,功能全面、指标详细、模版丰富,更重要的是可以直接运行在Kubernetes集群之中。目前,Prometheus和Grafana部署都支持Helm了,安装非常方便。
简介
Prometheus主要用于度量指标的产生和收集,可以即时查询各种系统指标并以曲线图、表方式展示。Grafana提供图表化的监控面板,可以直接访问Prometheus产生的数据源并组装为可视化面板,支持监控面板的定制、保存和共享,需要与Prometheus配合起来使用。目前,已经有大量的Kubernetes监控面板面板模版可以使用,可以从https://grafana.com上下载或直接import进来使用,非常快捷。
- Prometheus的Helm Chart,https://github.com/openthings/helm-charts/tree/master/stable/prometheus
- Prometheus非官方中文手册,https://github.com/openthings/prometheus
- Grafana的Helm Chart,https://github.com/openthings/helm-charts/tree/master/stable/grafana
- 本文地址 https://my.oschina.net/u/2306127/blog/1828656,by openthings, 2018.06.12.
- 安装脚本(非自动化,需要自行修改参数后使用)
- https://github.com/openthings/kubernetes-tools/tree/master/monitor
1、准备存储卷
参考“基于Kubernetes的容器存储系统”(https://my.oschina.net/u/2306127/blog/1822634)中的方法创建虚拟存储系统,创建StorageClass或者PVC,为监控系统所用。
Prometheus支持StorageClass方式指定存储系统,安装时系统自动产生pv卷。或者指定现存的pvc进行重用。
2、安装Prometheus
可以从helm的远程chart库直接安装,或者将该chart拷贝到自己的目录,修改参数后安装。
直接安装
指定storageClass为nfs,自动产生pv:
helm install --namespace monitor --name prometheus stable/prometheus \
--set alertmanager.persistentVolume.storageClass="nfs" \
--set server.persistentVolume.storageClass="nfs"
更多的参数,可以参考:
- Prometheus的Helm Chart,https://github.com/openthings/helm-charts/tree/master/stable/prometheus
这里为了管理方面,我们将其安装在Kubernetes的命名空间monitor中,同时命名实例版本为prometheus,安装完毕后运行 helm list 即可列出。
本地安装
如果复制到本地,可以直接修改参数,进去目录将values.yaml里的参数修改后运行helm即可,如:
helm install --namespace monitor --name prometheus ./prometheus
- 注意
- 跟上面的网络安装一样,alertmanager和server的storageClass参数需要分别指定。
- storageClass或者pv的指定是必须的,如果没有指定,运行helm install会失败。
映射服务
缺省的服务安装为ClusterIP,端口9090。需要通过port-forward映射出来(grafana运行在集群上,可以直接访问的),集群外面才可以访问。如下所示:
export POD_NAME=$(kubectl get pods --namespace monitor -l "app=prometheus,component=server" -o jsonpath="{.items[0].metadata.name}")
kubectl --namespace monitor port-forward $POD_NAME 9090
然后浏览器打开 http://127.0.0.1:9090就可以访问Prometheus的主界面了。
3、安装Grafana
远程安装
方法与Prometeheus基本一样,我们将其安装到同一个命名空间monitor中。如下:
helm install --namespace monitor --name grafana stable/grafana \
--set persistence.storageClassName="nfs"
更多的参数,可以参考:
- Grafana的Helm Chart,https://github.com/openthings/helm-charts/tree/master/stable/grafana
获取admin密码:
kubectl get secret --namespace monitor grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo
本地安装
也可以复制chart到本地,修改参数后安装,如下:
helm install --namespace monitor --name grafana ./grafana
映射服务
export POD_NAME=$(kubectl get pods --namespace monitor -l "app=grafana" -o jsonpath="{.items[0].metadata.name}")
kubectl --namespace monitor port-forward $POD_NAME 3000
- 注意
- 我这里去掉了prometeus里的component筛选项,有的文档说要加上是有问题的,因为目前的这个版本chart并没有这个选项,会导致列表项为空而出错。
- 也可以修改service的网络类型为nodeip,集群外就可以直接访问了,不需要端口映射。或者使用其他的代理来访问,不过需要注意安全性问题,不要把服务地址暴露到因特网上。
4、使用监控面板
现在,可以使用浏览器打开 http://127.0.0.1:3000,看到Grafana的面板界面。首先创建prometheus的数据源,注意里面的ip地址为prometheus的service地址(ClusterIP),不是主机地址。然后创建Dashboard即可。
选取“+”图标,import进去kubernetes-tool/monitor/dashboard下的面板json文件,或者直接import一个 https://grafana.com上的模版,即可看到监控面板的情况(有的有一些问题,需要自行试验、选择)。也可以自己设计面板、然后保存起来,或者分享给别人使用。