美文网首页
Kubernetes日志收集(一)——Pod进程日志收集

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

作者: fengdidi | 来源:发表于2018-04-14 21:04 被阅读0次

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

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

    • Kubernetes本身日志的收集
    • Docker或者Pod进程日志收集
    • 应用日志收集

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

    节点日志收集架构

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


    logging-with-node-agent.png

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


    节点日志收集.png

    日志收集镜像

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

    • 在我们的镜像中,Elasticsearch的IP地址和端口号是通过环境变量注入到镜像容器中的。
    • 我们修改了官方镜像在构建时存在的权限问题。
    • 在官方的实现方案里,把elasticsearch也以StatefulSet的形式跑在了K8S集群上。但是我们公司已经有了自己的elasticsearch集群,并且没有部署在K8S集群上。我们认为没有必要将elasticsearch部署在K8S集群上,因为elasticsearch本身是一个有状态的应用,我们更倾向于在K8S上部署一些无状态的微服务。

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

    • containers log: /var/log/containers/*.log
    • docker log: /var/log/docker.log
    • kubelet log: /var/log/kubelet.log
    • kube-proxy log: /var/log/kube-proxy.log
    • kube-apiserver log: /var/log/kube-apiserver.log
    • kube-controller-manager log: /var/log/kube-controller-manager.log
    • kube-scheduler log: /var/log/kube-scheduler.log

    需要注意的是,我们的这个日志收集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中查询日志啦~

    相关文章

      网友评论

          本文标题:Kubernetes日志收集(一)——Pod进程日志收集

          本文链接:https://www.haomeiwen.com/subject/sjcrkftx.html