安装监控插件
在 Kubernetes 集群中,可以通过安装 Heapster 插件来统计整个集群的资源使用情况,并通过集成 InfluxDB 数据库来存储监控数据以及 Grafana 控制台来提供数据分析和可视化界面,通过这三者的搭配使用,则可以实现对集群的资源使用情况的监控。
⚠️ 需要注意的是,上面三个插件只是并不负责 数据的采集 工作,数据的采集是依靠 Kubelet 组件中的名为 cAdvisor 的 agent 来完成的,Heapster 会主动请求所有的 cAdvisor 来获取所需数据,如下图:

Heapster 以 Pod 的形式运行在某个 Node 中,通过 Service 暴露服务,使外部可以通过一个稳定的 IP 地址访问。它从集群中所有的 cAdvisor 汇集数据,然后通过一个单独的地址暴露。使用了 InfluxDB 后,它会将汇集的所有监控数据都存储在其中,然后 Grafana 会以该数据库为数据源,将数据可视化展出。
安装三个插件
首先从 Github 中下载相关源码,源码中有相关的 YAML 配置文件,这些配置文件需要进行相应的修改才可以正常使用:
上面的三个 YAML 文件分别对应了三个插件
安装 Heapster
在使用 YAML 配置文件安装前,需要对该配置文件进行相应的修改,主要有以下四处:
将 Deployment 的 apiVersion 改为
apps/v1;将 Deployment 的
spec.selector手动指定,否则创建会验证报错;为 Heapster 使用的 ServiceAccount 授权,否则会出现类似
403 Forbidden", response: "Forbidden (user=system:serviceaccount:kube-system:heapster, verb=create, resource=nodes, subresource=stats)"这类的无权限提示;修改 Heapster 应用的启动参数,否则会出现类似
Error in scraping containers from kubelet:192.168.10.77:10255: failed to get all container stats from Kubelet URL "http://192.168.10.77:10255/stats/container/": Post http://192.168.10.77:10255/stats/container/: dial tcp 192.168.10.77:10255: getsockopt: connection refused的错误;
修改后的 YAML 配置文件内容如下:
相对于原文件:
添加了 7 - 18 行;
修改了第 20 行;
添加了 27 - 30 行;
修改了第 44 行;
安装 Influxdb
在使用相应 YAML 配置文件安装之前,同样对配置文件进行了相应修改,主要有两处:
将 Deployment 的 apiVersion 改为
apps/v1;将 Deployment 的
spec.selector手动指定,否则创建会验证报错;
修改后的 YAML 配置文件如下:
相对于原文件:
修改了第 1 行;
添加了第 8 - 11 行;
安装 Grafana
在使用相应 YAML 配置文件安装之前,同样对配置文件进行了相应修改,主要有三处:
将 Deployment 的 apiVersion 改为
apps/v1;将 Deployment 的
spec.selector手动指定,否则创建会验证报错;将用于暴露其服务的 Service 的类型修改为
NodePort类型,便于用户从集群外部访问;
修改后的 YAML 配置文件如下:
相对于原文件:
修改了第 1 行;
添加了第 8 - 11 行;
修改了第 71 行;
打开 Grafana 界面
通过查看 Grafana 的 Service 监听的端口,就可以打开相应的 Web 界面:
如上述结果,则 Grafana 的地址为
http://<集群任意 Node 的 IP 地址>:31906
打开界面后,默认情况下的初始界面是没有任何数据的,需要用户手动排版并导入数据,如下:

幸运的是,Grafana 中有许多用户提供了丰富的预先配置好的 Dashboard,可以直接导入使用,这里我们使用下述的三个链接将相关配置先下载好:
下载完成后,得到下面三个文件:

然后可以在 Grafana 中将配置文件依次导入,并指定数据源为 InfluxDB 即可,下面展示一个导入 Pod 的 Dashboard 的例子:

然后点击右上方的绿色按钮 Upload .json file,选择 pods_rev1.json 文件,进入下一步。

点击 Import 后,就可以得到下面的展示图了:

其他两个 Dashboard 的导入过程与 Pod 的类似,这里就不再做详细解释。
Last updated
Was this helpful?