K8s 中的 Docker + Fluentd 进行日志轮换:Docker 是不是需要知道 Fluentd 的存在?
Posted
技术标签:
【中文标题】K8s 中的 Docker + Fluentd 进行日志轮换:Docker 是不是需要知道 Fluentd 的存在?【英文标题】:Docker + Fluentd in K8s for log rotation: Does Docker need to know the existence of Fluentd?K8s 中的 Docker + Fluentd 进行日志轮换:Docker 是否需要知道 Fluentd 的存在? 【发布时间】:2021-01-04 02:10:12 【问题描述】:我试图了解 Docker 和 Fluentd 在 K8s 集群中的交互。我见过需要配置 Docker 输出到日志驱动的地方,而 Fluentd 可以用作日志驱动,比如here。
另一方面,我看到一些帖子(如 this 或 this),其中 Docker 不知道 Fluentd 作为 DaemonSet 的存在。
我的全部意图是进行日志轮换,但是我不确定是否使用 Fluentd 是否真的会轮换 Docker 写入的日志,所以我最终不会让日志占用节点中的整个存储空间随着时间的推移。在 Docker 不知道 Fluentd 存在的情况下使用 FluentD DaemonSet 是否足够?o 我还需要通过驱动程序以某种方式将 Docker 连接到 Fluentd?
【问题讨论】:
【参考方案1】:每个official k8s logging architecture docker(或任何其他运行时)不需要了解 FluentBit、Fluentd、Filebeat 或您使用的任何其他日志收集器。实际上,您一次可以使用多个日志收集器!
同一个文档说k8s不负责日志轮换,所以你自己设置了一个logrotate。另一端的 Fluentd/FluentBit 守护进程也不会轮换日志文件,但它确实能够跟踪日志轮换并相应地调整尾部光标(默认情况下)。
到目前为止,实现架构最简单的方法是
将 kubelet 和 docker 设置保留为默认值 确保应用记录标准输出/标准错误 确保有 logrotate:许多 k8s worker AMI,例如EKS 已经有了。 设置 FluentBit 日志收集器守护进程https://github.com/helm/charts/tree/master/stable/fluent-bit【讨论】:
"确保有 logrotate:许多 k8s worker AMI,例如 EKS 已经有它。"你能详细说明一下吗?这是关键部分。另一方面,您也可以使用 fluentd 配置日志轮换。该配置与您提出的此解决方案有何关系? docs.fluentd.org/deployment/logging#log-rotation-settingBy default, Fluentd does not rotate log files.
- 这是我一直依赖的。 1. 有时是系统 github.com/awslabs/amazon-eks-ami/blob/… 2. 有时是 docker 设置 github.com/kubernetes/kops/blob/… 。但我从未见过没有内置日志轮换的 k8s worker 发行版。
如果您自己构建 - 是的,您需要使用其中任何一种方式来旋转自己。不要为此使用 fluentd daemonset - worker 健康不应依赖于通过 API 创建的对象(例如 daemonsets)。如果 daemonset 的推出会以某种方式卡住 - 你不希望你的工作人员宕机。
“确保” - 检查它是否存在,如果不存在 - 添加它。
好吧,如果这是真的digitalocean.com/community/questions/… - 太糟糕了。在另一篇文章中,他们提到了 logrotate:digitalocean.com/community/tutorials/…。您应该能够 fork worker 映像(使用非托管),或者他们应该解决那里的所有系统级问题(托管)。以上是关于K8s 中的 Docker + Fluentd 进行日志轮换:Docker 是不是需要知道 Fluentd 的存在?的主要内容,如果未能解决你的问题,请参考以下文章
K8s集群Log的采集和展示-----ELK+Fluentd