本章中将介绍K8S使用者必须考虑的重量级问题:日志与监控。
课程中会分析当下主流的日志处理方案并选择一种方案进行日志从采集到展示的完整实践;
会讲解主流k8s监控方案prometheus,包括它的实现原理,支持的各种指标等。
11-1 常见日志采集问题和解决方案分析
传统服务VSk8s中的服务
k8s的日志
k8s的日志处理方案
远端存储
远端可以选择kafka,ES,后面再做统一的处理,比如汇总到某个日志服务器
优点: 简单,使用于Docker和非Docker场景
缺点:应用需要改造,比如写入本地的应用,需要改成调用远端存储
sidecar
在每个podz中跑一个sidecar,sidecar会和主容器共享Volume,他可以访问到所有的日志文件,然后把日志文件转发到后端存储。
优点:简单,对应用没有侵入
缺点:侵入pod,消耗内存和CPU;社区不推荐
LogAgent
在每个Node节点上部署一个Agent, 相当于sidecar方案,把sidecar从pod放在了node上。
以Daemonset方式运行,采集docker对应的json.log目录。
对于写日志文件的服务,需要服务,把容器中的日志挂载到宿主机上。同时约定好挂载的目录,LogAgent采集这个目录
优点:每个节点部署一个Agent,资源消耗小,入侵性小,对pod和应用都没有侵入
缺点:
1. 约定所有程序挂载到一个特定主机目录,文件后缀名尽量统一,否则维护困难;
2. 挂载目录是预先约定好,导致没法判断日志来自于那个pod,需要定期清理残留的日志文件。
实践方案
Fluentd,FileBeat:静态的,需要事先配置好。而Docker容器是动态的,容易变化。
LogPilot : 采集标准输出、错误输出,文件输出;实现静态工具的动态配置,支持Fluentd,FileBea插件