当前位置:   article > 正文

大数据技术与实践实验报告总结_基于Kubernetes实现的大数据采集与存储实践总结...

大数据及其数据存储实验心得

一、前言

    近来我司部门内部搭建的电商大数据平台一期工程进入了尾声工作,不仅在技术上短期内从零到一搭建起属于团队的大数据平台,而且在业务上可以满足多方诉求。笔者很有幸参与到其中的建设,在给优秀的团队成员点赞的同时,也抽空整理了一下文档,那么今天就和大家来聊一下我们是如何结合Kubernetes实现数据采集与存储的,谈谈里面实现方案、原理和过程。这里笔者放一张我们前期设计时借鉴阿里的大数据架构图:

8b3e22b4a7bb3ce9429779d2e9b04e30.png

    本文重点讲述的是上图中『数据采集』部分,暂不涉及『数据计算』和『数据服务』的过程。在数据采集中,我们通过运行在Kubernetes中的清洗服务,不断地消费Kafka中由定时任务爬取的业务数据,并通过Fluentbit、Fluentd等日志采集工具对容器中打印到标准输出的数据压缩存储至AWS S3中。如果你对这块有兴趣的话,那就一起开始今天的内容吧。


二、基础篇

2.1 Docker日志管理

    我们的应用服务都运行在Docker容器中,Docker的日志有两种:dockerd运行时的引擎日志和容器内服务产生的容器日志。在这里我们不用关心引擎日志,容器日志是指到达标准输出(stdout)和标准错误输出(stderr)的日志,其他来源的日志不归Docker管理,而Docker将所有容器打到 stdout 和 stderr 的日志通过日志驱动统一重定向到某个地方。Docker支持的日志驱动有很多,比如 local、json-file、syslog、journald 等等,不同的日志驱动可以将日志重定向到不同的地方。Docker以热插拔的方式实现日志不同目的地的输出,体现了管理的灵活性。其中默认的日志驱动是json-file,该驱动将日志以json 的形式重定向存储到本地磁盘,其存储格式为:/var/lib/docker/containers//-json.log。笔者画了一张简易的流转图:

58d6845047574a0fa574e010a903234e.png

    官方支持的日志驱动很多,详情看可以自行查阅Docker Containers Logging(https://docs.docker.com/config/containers/logging/configure)。我们可以通过docker info | grep Loggin命令查看Docker的日志驱动配置,也可以通过--log-driver或者编写/etc/docker/daemon.json 文件配置Docker容器的驱动:

  1. {
  2. "log-driver": "syslog"}

    本实践使用的是Docker默认驱动,即json file,这里大家对Docker的日志流转有基本的认识即可。需要关注的是每种Docker日志驱动都有相应的配置项日志轮转,比如根据单个文件大小和日志文件数量配置轮转。json-file 日志驱动支持的配置选项如下:

  • max-size:切割之前日志的最大大小,可取值单位为(k,m,g), 默认为-1(表示无限制);

  • max-file:可以存在的最大日志文件数,如果切割日志会创建超过阈值的文件数,则会删除最旧的文件,仅在max-size设置时有效,默认为1;

  • labels:适用于启动Docker守护程序时,此守护程序接受的以逗号分隔的与日志记录相关的标签列表;

  • env:适用于启动Docker守护程序时,此守护程序接受的以逗号分隔的与日志记录相关的环境变量列表;

  • compress:切割的日志是否进行压缩,默认是disabled;

详见:https://docs.docker.com/config/containers/logging/json-file

2.2 Kubernetes日志管理

    在Kubernetes中日志种类也分为两种:

  • 在容器中运行kube-scheduler和kube-proxy;

  • 不运行在容器中运行时的kubelet和容器运行时(如Docker);

    在使用 systemd 机制的服务器上,kubelet 和容器运行时将日志写入到 journald;如果没有 systemd,他们将日志写到 /var/log 目录的 .log 文件中。容器中的系统组件通常将日志写到 /var/log 目录,在 kubeadm 安装的集群中它们以静态 Pod 的形式运行在集群中,因此日志一般在 /var/log/pods 目录下。

    需要强调的一点是,对于应用POD日志Kuberntes并不管理日志的轮转策略,且日志的存储都是基于Docker的日志管理策略进行。在默认的日志驱动中,kubelet 会为每个容器的日志创建一个软链接,软链接

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/70438
推荐阅读
相关标签
  

闽ICP备14008679号