Kubernetes日志收集(一)——Pod进程日志收集

2018-04-14  本文已影响0人  fengdidi

在搭建Kubernetes集群的过程中,集群的日志收集架构是我们不得不考虑的问题。根据Kubernetes官方文档中提供的几种日志收集的架构,我们从中得到了很大的启发,并针对公司内部K8S集群的特殊状况,设计和实现了一套基于Fluentd、Elasticseach、Kibana的日志收集平台。我们认为这套架构存在一定的通用性,所以在这里分为几篇文章分享给大家,希望大家在搭建K8S日志收集架构的时候,可以在我的文章中得到一些启发。

Kubernetes的日志需求主要分为以下三个方面:

这篇文章主要针对的是上述列表中前两种日志的收集。对于第三种应用日志的收集,我们采用的是在应用Pod里面编排一个日志收集的sidecar镜像,将应用的日志文件以数据卷的方式挂载到sidecar镜像中,sidecar镜像监测到日志文件的变化,并推送到Elasticsearch里。

节点日志收集架构

Kubernetes官方对于Kubernetes本身日志的收集和Docker或者Pod进程日志收集的架构图如下:


logging-with-node-agent.png

根据这个架构图,我们设计了自己个性化的Kubernetes节点日志收集架构,并且基于官方的fluentd镜像,构建了自己个性化的日志收集镜像。


节点日志收集.png

日志收集镜像

我们构建的日志收集镜像与官方的主要有以下几个区别:

我们构建的带有elasticsearch插件的fluentd以DaemonSet的形式部署在每一个节点上,主要收集如下几种日志:

需要注意的是,我们的这个日志收集DaemonSet只会运行在标记有beta.kubernetes.io/fluentd-ds-ready=true标签的节点上,所以想要收集节点上的日志,您需要先将节点打上此标签。

kubectl label nodes 节点名 beta.kubernetes.io/fluentd-ds-ready=true

我们将日志收集镜像的Dockerfile以及对应的容器编排脚本开源在了Github上,请访问这里fork或者star吧:https://github.com/fengdidi/k8s-fluentd-elasticsearch,另外欢迎Pull Request~

使用方法

进入Image目录,执行如下命令:

docker build -t dockerhub.fengdidi:5000/fengdidi/fluentd-elasticsearch:1801 .
docker push dockerhub.fengdidi:5000/fengdidi/fluentd-elasticsearch:1801

dockerhub.fengdidi:5000/fengdidi/fluentd-elasticsearch:1801 是image的名字和标签, 在你构建的时候,请自己起一个新的名字和标签。
构建完镜像以后,进入yaml目录,创建一个ConfigMap:

kubectl create -f fluentd-es-configmap.yaml

修改fluentd-es-ds.yaml里面的镜像名、Elasticsearch地址和端口, Elasticsearch的IP地址和端口号通过环境变量注入到镜像容器中。配置完成后,将镜像部署为一个DaemonSet。

kubectl create -f fluentd-es-ds.yaml

如果一切正常的话,就可以去Kibana中查询日志啦~

上一篇下一篇

猜你喜欢

热点阅读