首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

怎样监控kubernetes容器?

一、容器的运行方式与VM和HOST的差异

Kubernetes是现在最流行的容器编排系统,容器与VM和HOST有着显著不同。那么怎样对k8s平台上的容器进行监控呢?首先需要注意容器的运行方式与VM和HOST的不同:

1. 运行实例从宏观层面迁移到微观层面

容器运行在私有网络中,通常情况下与外部网络隔离。怎样从外部网络进入到容器私有网络、获取容器的监控数据?

2. 运行实例从静态、长生命周期转变成动态、短生命周期

HOST和VM一般是静态IP地址,一旦开机、长期运行。而容器的IP是动态分配的,其创建、销毁、扩容、缩容非常频繁。如何及时发现新创建的容器、获取到它们的监控数据、并在仪表盘上恰当的展现出来?

二、容器监控方案概述

为了解决上述问题,kubernetes、promethues、influxdata等开源组织相继发布了一些容器监控工具和方案。例如:kubernetes 的 heapster+influxdb+grafana,prometheus的prometheus+alertmanager,influxdata的telegraf+influxdb+kapacitor。

我采用的是第一种,即: heapster+influxdb+grafana,实现简单、效果较好。

其中,heapster是k8s容器状态的收集、导出工具,influxdb是一种时序数据库,grafana是一种数据展示和报警系统。

heapster能导出当前时间点的所有容器的状态信息,解决了容器监控信息的采集和导出问题;grafana是功能强大的数据展示和报警工具,它的展示系统支持变量、模板、正则匹配、标签等功能,能把瞬息万变的容器信息有效组织、展示出来,报警系统支持多种方式、还可以基于webhook自己开发,实现短信报警等功能。

三、容器监控部署概述

(由于字数限制,不详述,具体请参考官方文档;所有组件都基于容器部署)

1. 部署influxdb

https://github.com/influxdata/influxdb

2. 部署heapster

https://github.com/kubernetes/heapster/tree/master/deploy

command加sink参数,包含influxdb的地址、用户名、密码,例如:

--sink=influxdb:http://influxdb.default:8086?db=heapster&user=heapster&pw=1234

3. 部署grafana

https://github.com/grafana/grafana

部署后请设置数据源datasource,加入influxdb。

四、设置仪表盘

Grafana的仪表盘也就是监控数据的展示界面,可以自己设计,还可以导出共享给别人。我设计了一个容器监控的仪表盘,共享在grafana网站上,地址是:

https://grafana.com/dashboards/3649

在namespace下拉框可以选择k8s容器的命名空间,在pod_name下拉框可以选择容器的匹配名称(前面几个字符或者全名都可以)。

五、建立容器报警

我共享的仪表盘含有两个变量:namespace和pod_name,这样的仪表盘叫:模板。Grafana目前不支持在模板里创建报警。为了创建报警,我们需要再建一个不带变量的仪表盘,然后在时序图的Alert菜单里设置报警,设置报警阀值、通道、内容等信息:

六、建立报警一览图

Grafana自带一个报警管理页面:

我们可以设计一个更清楚的报警一览图,可参考我共享的模板,地址是:

https://grafana.com/dashboards/3489

欢迎一起交流。转载请注明出处:开普勒鑫球

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180117G0QC9N00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券