heapster+influxdb收集kubernetes集群中的event

容器小白一枚,前些日子导师让我去调研如何处理集群中的event,虽然在master结点可以通过kubectl describe资源来查看其中的event解决容器遇到的一些问题,但要想收集到整个集群的event数据去分析问题还是要借助强大的开源社区,在调研过程中发现heapster可以简单高效收集event,heapster主要有两大功能,metrics和eventer,metrics用来收集kubernetes集群中的一些性能指标,eventer收集集群中的事件。
heapster工具目前已经被弃用,kubernetes从1.8版本开始,CPU、内存等资源的metrics信息可以通过 Metrics API来获取,用户还可以通过kubectl top直接获取这些metrics信息。Metrics API需要部署Metrics-Server。Metrics-Server是Kubernetes1.9版本以上的首选方法,但不支持集群event信息采集。
先简单介绍一下这几个概念:

Event

要收集event,首先得了解kubernetes集群中event得来龙去脉。
event的来源:
在kubernetes的源码中可以发现event实例是由EventsRecorder成员的方法Event()、Eventf()、PastEventf()构造出来的,而且含有EventsRecorder成员的组件只有Kubelet和ControllerManager,则可以认定集群中的事件都是由这两个组件生成。比如,负责管理注册、注销等的NodeController,会将Node的状态变化信息记录为Events。DeploymentController会记录回滚、扩容等的Events。他们都在ControllerManager启动时被初始化并运行。与此同时Kubelet除了会记录它本身运行时的Events,比如:无法为Pod挂载卷、无法带宽整型等,还包含了一系列像docker_manager这样的小单元,它们各司其职,并记录相关Events。
event的去向:
Kubelet和ControllerManager组件中都会有一个EventBroadcaster的实例,EventBroadcaster用来接收t各自组件中产生Even并且把它们转交给EventSink、Watcher和Log。在写入EventSink前,会对所有的Events进行聚合等操作。将Events分为相同和相似两类,分别使用EventLogger和EventAggregator进行操作。EventLogger将相同的Event去重为1个,并通过计数表示它出现的次数。EventAggregator将对10分钟内出现10次的Event进行分组,依据是Event的Source、InvolvedObject、Type和Reason域。这样可以避免系统长时间运行时产生的大量Event冲击etcd,或占用大量内存。EventAggregator和EventLogger采用大小为4096的LRU Cache,存放先前已产生的不重复Events。超出Cache范围的Events会被压缩。

heapster

Heapster是开源的容器集群监控和性能分析工具,最后一个版本的heapster主要有两个功能,收集集群的metrics和events。
Kubernetes有个出名的监控cAdvisor。在每个kubernetes Node上都会运行cAdvisor,它会收集本机以及容器的监控数据(cpu,memory,filesystem,network,uptime)。在较新的版本中,K8S已经将cAdvisor功能集成到kubelet组件中。每个Node节点可以直接进行web访问。Heapster是一个收集者,将每个Node上的cAdvisor的数据进行汇总,然后导到第三方工具(如InfluxDB),heapster现在已经被弃用,取而代之的是kubernetes自带的metrics-server,但是metrics-server目前不支持集群事件收集。
工作流程:heapster首先从kubernetes Master获取集群中所有Node的信息,然后通过这些Node上的kubelet获取有用数据,而kubelet本身的数据则是从cAdvisor得到。所有获取到的数据都被推到heapster配置的后端存储中,并还支持数据的可视化。现在后端存储 + 可视化的方法,如InfluxDB + grafana。

influxdb

influxdb是一个开源分布式时序、事件和指标数据库,一般用来存储实时数据。它提供了http接口的api来操作数据,而且提供了类似sql的数据库语句。
它有三大特性:
时间序列:你可以使用与时间有关的相关函数(如最大,最小,求和等)
度量:你可以实时对大量数据进行计算events
事件:它支持任意的事件数据

通过heapster+influxdb收集和存储event

有了以上了解,下面就是安装部署heapster和influxdb来分别收集和存储集群中的event。
heapster官方git库推荐的部署方法是通过部署pod来使用heapster和influxdb,如果想实现图形化界面展示可以再增加一个garafna。官方安装命令很简单,通过自带的yaml文件分别启动一系列pod、service等,但是我在实际部署的过程中遇到了各种坑,第一个是镜像问题,官网给的那几个yaml文件中,指定了需要使用到的镜像文件,但是从gcr拉镜像几乎是拉不动的,可以提前通过时速云那边把镜像拉到了本地仓库中然后tag操作,也可以使用docker hub中的官方heapster镜像。第二个是heapster和influxdb通信要经过DNS,集群要配置DNS,但是公司的测试集群没有配置DNS,初来乍到也不敢瞎折腾怕搞坏大家的测试环境,所以我就在其中一个主节点的宿主机上编译了一个eventer二进制文件来执行,安装了一个influxdb来存储收集到的数据,网上关于heapster+influxdb—+grafana组合部署的文章很多,都是基于官网的方法,
下面是在宿主机的部署过程,
在宿主机上部署:
1. Heapster部署
(1) 从github上下载或者克隆项目到gopath的src目录下
git clone https://github.com/kubernetes/heapster.git
(2) 编译eventer二进制可执行文件
2. Influxdb部署
(1) 从yum源安装influxdb
(2) 安装后,在/usr/bin下面会有如下文件:
Influxdb influxdb服务器
Influx influxdb命令行客户端
influx_inspect 查看工具
influx_stress 压力测试工具
influx_tsm 数据库转换工具(将数据库从b1或bz1格式转换为tsm1格式)
在/var/lib/influxdb目录下会有如下文件:
data 存放最终存储的数据,文件以.tsm结尾
meta 存放数据库元数据
wal 存放预写日志文件
(3) 配置
配置文件路径 :/etc/influxdb/influxdb.conf
其中有很多配置选项,其中只用配置

[meta]   dir = "/var/lib/influxdb/meta"
[data]    dir = "/var/lib/influxdb/data"
         wal-dir = "/var/lib/influxdb/wal"

客户端通过influx 启动,进入后命令行操作基本和SQL语句操作一样
使用:进入eventer二进制文件所在目录,执行eventer,利用heapster收集event到influxdb会创建一个后台进程持续收集event并存储到influxdb
启动命令:

./eventer
--source=kubernetes:http://master_ip:8080inClusterConfig=false&useServiceAccount=false
--sink=influxdb:http://master_ip:8086

其中–source表示event数据输入源,此处从master节点的8080端口(apiserver)获取,–sink表示event存储的influxdb所在地址和端口号

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值