Custom-Metrics及Prometheus监控系统
Custom Metrics概述
上篇文章中《K8s -- 通过自定义prometheus数据实现k8s hpa》讲到,自heapster被废弃以后,所有的指标数据都从API接口中获取,由此kubernetes将资源指标分为了两种:
Core metrics(核心指标):由metrics-server提供API metrics.k8s.io,仅提供Node和Pod的CPU和内存使用情况。
Custom Metrics(自定义指标):由Prometheus Adapter提供API custom.metrics.k8s.io,由此可支持任意Prometheus采集到的指标。
想让k8s一些核心组件,比如HPA,获取核心指标以外的其它自定义指标,则必须部署一套prometheus监控系统,让prometheus采集其它各种指标,但是prometheus采集到的metrics并不能直接给k8s用,因为两者数据格式不兼容,还需要另外一个组件(kube-state-metrics),将prometheus的metrics 数据格式转换成k8s API接口能识别的格式,转换以后,因为是自定义API,所以还需要用Kubernetes aggregator在主API服务器中注册,以便直接通过/apis/来访问。
Custom Metrics 的部署流程
node-exporter:prometheus的agent端,收集Node级别的监控数据。prometheus:监控服务端,从node-exporter拉数据并存储为时序数据。kube-state-metrics: 将prometheus中可以用PromQL查询到的指标数据转换成k8s对应的数据格式,即 转换成【Custerom Metrics API】接口格式的数据,但是它不能聚合进apiserver中的功能。k8s-prometheus-adpater:聚合apiserver,即提供了一个apiserver【cuester-metrics-api】, 自定义APIServer通常都要通过Kubernetes aggregator聚合到apiserver。grafana:展示prometheus获取到的metrics。导入grafana模板。
资源清单文件获取
从kubernetes源码树中的addons下获取 prometheus相关组件的资源清单文件:prometheus、node-exporter、kube-state-metrics。
从DirectXMan12项目获取 组件k8s-prometheus-adpater的清单文件。
grafana的配置在google一搜,很多项目都提供了,这里从heapster项目下载grafana资源清单文件。
下载之后,各组件归类存放到各目录:
规划所有组件部署的名称空间,默认是在kube-system,这里统一部署在monitoring
并手动将清单文件中,资源所属名称空间改为monitoring
开始部署各组件 现在按上面写的顺序一一部署
部署node-exporter
简单下看此组件部署的资源:
应用到集群之上:
部署prometheus 从github下载的清单文件,用statefulset部署的,prometheus本身是有状态的应用,这里只部署一个副本,所以将statefulset改为deployment了,
此组件部署的资源
应用:
对于prometheus,有几点说明:
简单将原清单文件中的stateful改为了deployment,部署起来相对简单此,且只部署一个副本。
prometheus自带的UI监听在9090端口,使用到了NodePort,以便集群外访问。
prometheus使用的volume"prometheus-storage-volume",存储所有它采集到的metrics,应该放于持久卷中。
等一会查看组件已正常运行:
部署kube-state-metrics
此组件部署的资源:
应用:
等一会查看:
部署组件k8s-prometheus-adapter 最后一个核心组件,也是部署最麻烦的一个组件。 它是一个API服务器,提供了一个APIServer服务,名为 custom-metrics-apiserver,提供的API组: custom.metrics.k8s.io,它是自定义指标API(custom.metrics.k8s.io)的实现
查看资源清单文件:
此组件部署的资源:
从上面该组件的deployment看出,它需要挂一个secret存储卷,secret名为"cm-adapter-serving-certs",这个secret是一个证书,因此这里需要创建相应的证书和key,这个证书必须由k8s的kube-apiserver信任的CA签发,因此直接用k8s的CA签发。
生成证书:
证书请求:
签署证书:
创建secret:
应用资源清单文件:
等一会查看:
最后查看所有的pod:四个组件的pod:
查看新创建的api群组:
有了自定义指标api了,过一会就可以从接口获取到数据了:
如此,说明自定义指标API已成功部署了,就可以借助于这些自定义指标的创建HPA了。
部署grafana
既然部署了Prometheus,那么当然要部署Grafana展示Prometheus采集到的metrics数据。
查看grafana清单文件:
它就一个清单文件,部署成一个deploy和service,因为从heapster项目中复制过来的,配置grafana连接的是influxdb,因此需要改下,完整的grafana.yaml如下
有三点要说明的是
挂载的volume grafana-storage应该为持久卷,这里测试为挂载为emptyDir
grafana的svc使用了NodePort,便于集群之外访问。
取消了环境变量INFLUXDB_HOST。
应用并查看:
grafana已成功部署完,接下来,就可以用NodeIP + NodePort 这里是31337 打开grafana界面,接入Prometheus数据源,并下载grafana适用于k8s的grafana来查看各种指标数据了。
Grafana使用
image.png
image.png
进入Dashboards:
image.png
在下面可以导入各种模板:
image.png
模板在哪找呢?在grafana官网https://grafana.com/dashboards 中搜索grafana模板,有很多适用于kubernetes prometheus的模板:
image.png
比如下面找到了1621号模板:
image.png
按下面的方法导入:
image.png
最终展示:
image.png
Grafana之所以能够发现k8s集群中各Node、各Pod的详细使用信息,主要是因为prometheus部署时使用的配置文件,它这个配置是经过改造后适用于运行k8s集群之中,配置了很多Job、Service Discovery功能,可以自动发现集群各资源。 作者:沉沦2014 链接:https://www.jianshu.com/p/d017fc44959e 來源:简书 简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
Last updated