基于之前我们已经把kubelet的master跟几个node基础环境搭建好了,也都join起来了.再来把k8的东西完善起来. 比如heapster 仪表盘. harbor本地镜像仓库. ELK/EFK 日志收集系统. 以及开始实践使用. 最后关键.如何把这个过程自动化,并批量分发.
0x00. K8S集群监控
之前搭建完k8基本集群之后,第二步必须的一般就是需要监控了,高级特性可以后面慢慢研究添加,但是最基本的运维系统的需要及时加入. 首先映入眼帘的就是 cAdvisor 开源监控.从docker时期就是很经典的监控软件了.
在k8中被默认已经添加到了kubelet组件中, kubelet 服务启动后就会自动启动cAdvisor ,然后cA会实时采集node和pod和container的数据. kubelet启动参数--cadvisor-port 可以暴露对外访问cA.(默认端口4194). 比如nodeIP:4194 去浏览器查看CPU/内存/网络/存储等情况.
这里待补充.因为默认没有暴露端口.有空再来补几个图
不过由于cA是在每台node单独运行,记录的都是本机性能数据,对于大规模的集群,当然需要专业的解决方案.也就引出了下面推荐的heapster+influxdb+grafana 监控平台.
补充: 因为默认的token会过期,之后加入的node需要重新用新的token. 官方:kubeadmのtoken相关
0x01.heapster平台
HIG组合是k8官方提供的推荐监控平台,heapster是k8官方旗下的dashboard仪表盘.其中功能分别如下:
- heapster : 通过kubelet调用cA的api对集群各node的数据采集进行汇总. (本质还是cA在采集). 把性能数据进行聚合,然后把结果保存到存储系统中(influxdb),当然也支持保存到内存中.
- influxdb : 分布式时序数据库(每条数据会自带时间戳).并且针对图表,数据分析,事件记录存储做了专门优化
- grafana : 这个才是把数据库中的时序数据转化为图表展示的组件~ 之前误以为是heapster了.所以要想修改dashboard中的图表参数,就需要进grafana修改.
虽然不知为什么没有默认跟dashboard内嵌. 但是还是先上手吧. 去官网页面heapster release 下最新稳定版本.
1 | $ wget https://github.com/kubernetes/heapster/archive/v1.5.0.zip |
看到一些重要的关键字influxdb , RBAC, google/heapster.yaml. 并且会发现k8中大量使用yaml文件. 再就是注意如果参考老的heapster的文章. 可能会发现目录层次并不一样,之前比较集中. 所以这里我特意用tree展现出来.也是避免以后版本再升级发生变化好对比.
这里如果当前服务器不能上google,最好修改一下 /influxdb下的三个yaml文件,修改其中google字眼的image为
- index.tenxcloud.com/jimmy/heapster-grafana-amd64:v4.0.2
- index.tenxcloud.com/jimmy/heapster-amd64:v1.4.3
- index.tenxcloud.com/jimmy/heapster-influxdb-amd64:v1.3.3
然后把我们从友好提供包的整合tar包下下来,大概200MB+. 传输给master.然后在node上 docker load -i heapster.tar , (不建议master跑工作任务) 然后用 kubectl crate -f 去应用上面三个/influxdb下的 yaml 以及 /rbac 下的yaml. (依次创建 kb create -f grafana.yaml -f heapster.yaml -f influxdb.yaml )
使用kubectl get pod -o wide --namespace=kube-system 查看网络情况和status . 这里初始化是需要一定时间的,不要着急,观察kube-system 的转态, 只要是正在创建都没事.
这里发现 heapster 跟 influxdb 跟grafana跟dashboard并不在一个节点上. 那么它们三内部是不是在一个pod呢? 根据如图显示显然不是的. 我们构建完之后还需要确认互相之间是否能跨节点通信.这个非常重要. 如下图:
构建完成之后效果就挺好了,仪表盘们都出来了. 不过这里遇到个问题,发现grafana的CPU使用是0….
0x02. 访问grafana
因为grafana跟heapster其实是不直接相关的. 影响数据生成的只有数据本身. 所以我们一般需要进入grafana来调整dashboard的显示内容和(效果?). 这里需要修改之前默认yaml没开放的api (kubectl常用命令)
不过注意的是grafana默认是用的Deployment生成。这个类型不同于之前用的RC/Pod



