标签:原生 容器 架构 伴生 模式 DaemonSet 日志 节点
日志作为一种特殊的数据,对处理历史数据、诊断问题以及了解系统活动等有着非常重要的作用。数据分析人员、开发人员和运维人员都需要对日志进行分析。在云原生架构下,Kubernetes并不保存日志,也不提供日志存储解决方案,而是依赖第三方解决方案。云原生架构下的日志收集是实现数据收集主要方式。
一、日志收集的模式
日志收集有两种模式∶伴生模式和DaemonSet模式。
(一)伴生模式
伴生模式的弊端是伴生容器数量随主容器数量的增加而增加。如图1所示,一般一个节点上会有数十数百个主容器,这样一来,假设一个节点可承载容器的数量是n,若一个主容器有k个伴生容器,则这个节点可承载主容器的数量就降低到n/(k+1)个。这就影响了节点上的容器承载量。
图1伴生模式
(二)DaemonSet模式
由于伴生容器是基于同一个镜像产生的,且功能具有重复性,因此可以考虑在一个node上只部署一个容器,然后通过代理或其他机制把本应伴生容器做的工作中继给这个容器。这样,一个节点上若有m个主服务容器,则只需要mx(k-1)+1个容器。资源节省了很多,而且管理方便。这就是DaemonSet模式,如图2所示。
图2DaemonSet模式
由于部署模式有两种,也就出现了两种收集日志的方式。如果空间足够,建议采用DaemonSet模式,因为这种模式默认情况下会收集所有容器的日志(不包括DaemonSet)。如果只关注部分容器的日志,则可以采用伴生模式。
二、如何通过伴生模式和DaemonSet模式进行日志收集。
(一)具有日志代理功能的伴生容器
在使用Kubernetes 集群的初始阶段,部署一整套EFK日志系统可能不是很迫切。如果部署了一整套EFK系统,从中选择某个Pod的日志也需要进一步筛选过滤才能得到需要的日志,因此企业需要部署更灵活的日志代理服务。基于伴生容器模式的日志代理服务可以很好地满足该需求,企业可以在伴生容器中创建一个独立的专门为该应用服务的日志代理。
注意在伴生容器中使用日志代理会导致资源损耗。如图3所示。在伴生容器模式下,Pod内部有主业务容器,同时有一个日志代理功能的伴生容器,两个容器共享同一个卷。有一个varlog 卷,两个容器共享这个卷,主业务容器在该卷上写日志,日志代理容器则读取该日志。
图3通过伴生日志代理容器收集日志
(二)DaemonSet 模式下配置Fluentd
在DaemonSet模式下,每个节点上只有一个Fluentd容器。如图4所示。
图4 DaemonSet模式下的日志收集
节点上的业务容器都会写日志到节点的/var/log 目录下,每个节点上的Fluentd容器加载该目录并读取其中的内容,然后推送到Elasticsearch,Elasticsearch将日志存储在后端。通过该种模式,kubectllogs命令依然可以查看每个Pod的日志。此外,一个节点一个Fluentd容器也提高了资源利用率。所以这是最佳实践的一种方式。
标签:原生,
容器,
架构,
伴生,
模式,
DaemonSet,
日志,
节点
From: https://www.cnblogs.com/tiduyun/p/16845286.html