本文由 网易云 发布
1 什么是 Kubernetes?
Kubernetes 是 Google 开源的容器集群管理系统,其管理操作包括部署,调度和节点集群间扩展等。
如下图所示为目前 Kubernetes 的架构图,由 master 和 node 端构成,调度部署和扩展由 master 发起,node 协助 master 实现这些功能。
针对 Kubernetes master 端,如何评估各个组件的性能呢?目前社区提供一种搭建便捷、实用性强的监控方案:Prometheus + Grafana。
Prometheus 是使用 Golang 开发的开源监控系统,被人称为下一代监控系统,是为数不多的适合 Docker、Mesos 、Kubernetes 环境的监控系统之一 。
Grafana 是一个开源的图表可视化系统,简言之,其特点在于图表配置比较方便、生成的图表漂亮。
Prometheus + Grafana 监控系统的组合中,前者负责采样数据并存储这些数据;后者则侧重于形象生动的展示数据。
搭建好的这两个长(下面)这个样子,是不是感觉 grafana 的图形化展示能力很强大呢?
概念
Prometheus 是源于 Google Borgmon 的一个系统监控和报警工具,用 Golang 语言开发。基本原理是通过 HTTP 协议周期性地抓取被监控组件的状态(pull 方式),这样做的好处是任意组件只要提供 HTTP 接口就可以接入监控系统,不需要任何 SDK 或者其他的集成过程。
这样做非常适合虚拟化环境比如 VM 或者 Docker ,故其为为数不多的适合 Docker、Mesos 、Kubernetes 环境的监控系统之一,被很多人称为下一代监控系统。
pull 方式
Prometheus 采集数据用的是 pull 也就是拉模型,通过 HTTP 协议去采集指标,只要应用系统能够提供 HTTP 接口就可以接入监控系统,相比于私有协议或二进制协议来说开发简单。
push 方式
对于定时任务这种短周期的指标采集,如果采用 pull 模式,可能造成任务结束了 Prometheus 还没有来得及采集的情况,这个时候可以使用加一个中转层,客户端推数据到 Push Gateway 缓存一下,由 Prometheus 从 push gateway pull 指标过来。
组成及架构
○ Prometheus server:主要负责数据采集和存储,提供 PromQL 查询语言的支持;
○ Push Gateway:支持临时性 Job 主动推送指标的中间网关;
○ exporters:提供被监控组件信息的 HTTP 接口被叫做 exporter ,目前互联网公司常用的组件大部分都有 exporter 可以直接使用,比如 Varnish、Haproxy、Nginx、MySQL、Linux 系统信息 (包括磁盘、内存、CPU、网络等等);
○ PromDash:使用 rails 开发的 dashboard,用于可视化指标数据;
○ WebUI:9090 端口提供的图形化功能;
○ alertmanager:实验性组件、用来进行报警;
○ APIclients:提供 HTTPAPI 接口
– job_name: ‘apiserver’# Override the global default and scrape targets from this job every 5 seconds.
scrape_interval: 10s
#metrics_path defaults to ‘/metrics’# scheme defaults to ‘http’.
static_configs:
– targets: [‘{apiserver_ip}:{apiserver_port}’]
启动方式
源码启动——当前采用这个方式:直接启动。 参数里面指定配置文件路径、监听端口号。
nohup ./prometheus -config.file=prometheus.yml -web.listen-address “:9090” -log.level=debug 2>&1 >> run.log &
启动成功后的效果
○ 访问监控页面: http://{host_ip}:9090/(WebUI——9090 端口提供图形化功能), status–>targets 可以看到 job 下面各个 metric 的状态信息。
Grafana 是一个开源的图表可视化系统,与 Kibana 类似,能够对后端的数据进行实时展示,简单地说图表配置比较方便、生成的图表比较漂亮。它一般和一些时间序列数据库进行配合来展示数据,例如:Graphite、OpenTSDB、InfluxDB 和 Elasticsearch 等。
安装与配置
下载 Grafana:
在官网 http://grafana.org/download/ 选择合适版本下载、解压。
启动方式:
○ 源码启动(当前采用这个方式)
配置文件在 ./conf/defaults.ini, 比如默认的监听端口是 3000,data、log 之类的路径等,我们这边均使用默认配置。
nohup ./bin/grafana-server -homepath ./ 2>&1 >> run.log &
○ docker 启动
docker run –name grafana \ -d \
-p 3000:3000
-v $DATAPATH:/var/lib/grafana
grafana/grafana
启动成功后效果
访问页面 http://{host_ip}:3000/ ,默认情况下管理员的账号和密码均为 admin,登录即可。
使用指南
○ 添加数据源 datasource
添加 prometheus 地址,作为一个数据源,数据源类型选择的是 prometheus。当前 prometheus 内包含了3个 job(一个 Kubernetes、一个 etcd、一个 prometheus 自身), 其中 etcd 的 job 里面又有四个 target,在 grafana 中称其为 instance。
○ prometheus 的查询语法基础:https://prometheus.io/docs/querying/basics/
○ prometheus 查询语法的操作符:https://prometheus.io/docs/querying/operators/
○ prometheus 的函数:https://prometheus.io/docs/querying/functions
○ prometheus 官方最佳实践:https://prometheus.io/docs/practices/histograms/ ,其中有个例子和 Kubernetes 计算平均延迟时间比较类似。
感兴趣的朋友可以点击这里了解网易云计算基础服务,包括容器服务、对象存储等。
了解 网易云 :
网易云官网:https://www.163yun.com/
新用户大礼包:https://www.163yun.com/gift
网易云社区:https://sq.163yun.com/