DaemonSet确保每个节点运行一个Pod副本,适合日志收集;通过挂载宿主机日志目录并部署Fluent Bit,实现自动采集、添加上下文信息并发送至Elasticsearch,构建全覆盖、透明化的日志系统。

Kubernetes 的 DaemonSet 是一种控制器,确保集群中的每个(或部分)节点都运行一个 Pod 的副本。每当有新节点加入集群,DaemonSet 会自动在该节点上启动一个对应的 Pod;当节点被移除时,这些 Pod 也会被清理。这种“一节点一Pod”的特性,使 DaemonSet 非常适合运行集群级别的后台服务,比如日志收集、监控代理或网络插件。
DaemonSet 的核心特点
DaemonSet 确保指定的 Pod 在所有符合条件的节点上运行,不会被调度器重新分配或分散。它通过以下机制工作:
- 每个节点只运行一个 Pod 副本
- 支持节点选择器(nodeSelector)和污点容忍(tolerations),可控制在哪些节点上部署
- 自动响应节点的增减,保持覆盖一致性
使用 DaemonSet 进行日志收集
在 Kubernetes 中,容器产生的日志默认写入节点的本地文件系统。为了集中管理和分析,需要从每个节点收集日志并发送到统一的日志后端(如 Elasticsearch、Fluentd、Kafka 或 Loki)。DaemonSet 是实现这一目标的理想方式。
以常见的日志收集组件 Fluent Bit 为例,部署流程如下:
- 定义一个 DaemonSet,其模板中包含运行 Fluent Bit 容器的 Pod
- 将节点上的日志目录(如 /var/log/containers)挂载到 Pod 中
- 配置 Fluent Bit 解析容器日志,并转发到 Elasticsearch 或其他目标
- 通过标签或污点控制是否在特定节点(如 master 节点)部署
这样,每个节点都会运行一个 Fluent Bit 实例,实时读取本节点上所有容器的日志,完成采集和上报,形成完整的日志管道。
实际应用场景示例
假设你使用 EFK(Elasticsearch + Fluentd/Fluent Bit + Kibana)架构做日志管理:- 通过 DaemonSet 部署 Fluent Bit,确保每台工作节点都有一个采集代理
- Fluent Bit 监听容器运行时生成的日志文件(通常软链接至 /var/log/pods)
- 添加上下文信息(如 Pod 名称、命名空间、标签)到日志条目
- 将结构化日志发送到 Elasticsearch 存储,供 Kibana 查询展示
这种方式无需修改应用代码,对业务透明,且具备良好的扩展性和容错性。
基本上就这些。DaemonSet 让日志收集变得自动化和全覆盖,是构建可观测性体系的基础组件之一。不复杂但容易忽略的是权限设置和路径挂载的准确性,需确保 Pod 能读取宿主机日志目录。










