Kubernetes容器集群中的日志系统集成实践
《Kubernetes容器集群中的日志系统集成实践》要点:
Kubernetes是原生的容器编排管理系统,对于负载均衡、服务发现、高可用、滚动升级、自动伸缩等容器云平台的功能要求有原生支持.今天我分享一下我们在Kubernetes集群中日志管理的实践方案.在这个方案中,除了Docker和Kubernetes,主要还涉及的技术包括:Fluentd、Elasticsearch、Kibana和Swift. Fig00-Kubernetes日志系统中涉及的技术 评估容器云平台日志系统的标准:
Fluentd是一个实时日志收集系统,它把JSON作为日志的中间处理格式,通过灵活的插件机制,可以支持丰富多样的日志输入应用、输出应用、以及多种日志解析、缓存、过滤和格式化输出机制. Fluentd的架构Fluentd将JSON作为数据处理的中间格式,通过插件式的架构可扩展地支持不同种应用或系统作为日志源和日志输出端.假设有M种输入源Wordpress、MySQL、Tomcat……;N种输出端MySQL、MongoDB、ElasticSearch……那么处理日志的代码模块由MxN减少为M+N.我们在Kubernetes集群中收集日志主要用到https://hub.docker.com/r/fabric8/fluentd-kubernetes/这个镜像和https://github.com/fabric8io/docker-fluentd-kubernetes这个Plugins. Fig01-Fluend架构 Fig02-Fluentd功能 Fluentd的特点:
Fluentd在Kubernetes集群中的部署架构每个Node节点上都要有Fluentd-Elasticsearch这个Pod,有两种方式支持:1. 放在/etc/kubernetes/manifest下,用脚本自动启动;2. 用DaemonSet启动.这两种模式都是为了保证在每一个Kubernetes集群节点上都有一个Fluentd的驻留Pod运行来收集日志.Kubernetes中DaemonSet这个API对象就是为了驻留Pod而设计的. Fig03-Fluentd在Kubernetes集群中的部署架构 在Kubenetes中的部署案例YAML在Kubernetes集群中部署Fluentd时,可以采用类似下面的YAML文件,将使用Docker镜像Fluentd-Elasticsearch的Pod部署到每一个Kubernetes节点上. Fig04-Fluentd在Kubernetes集群中的部署YAML Fluentd pod的运行时状态: Fig05-Fluentd在Kubernetes集群中的运行状态 选用Fluentd的理由:
Elasticsearch是一个实时的分布式搜索和分析引擎.它可以用于文档存储,全文搜索,结构化搜索以及实时分析,与常见的互联网应用最典型的应用场景是日志分析查询和全文搜索. ElasticSearch的架构在ElasticSearch中有三类节点:第一类是Data Node,用来存储数据,ElasticSearch中对于一份数据可以有多个副本,以提供数据高可用能力;第二类是Client Node,或者叫查询节点,提供对查询的负载均衡;第三类是Master Eligible node,或者叫索引节点,这些节点可以被选举为Master Node,而Master Node会控制整个ElasticSearch集群的状态. Fig06-Elasticsearch的架构 ElasticSearch在Kubernetes中的部署架构我们在Kubernetes中,三类节点都是一个包含同一个镜像Pod (编辑:ASP站长网) |