使用Daemonset部署日志收集守护进程
实验七 使用Daemonset部署日志收集守护进程
一、DaemonSet简介
在Kubernetes(简称k8s)中,DaemonSet是一种控制器,用于确保集群中的每个(或部分)节点最多运行一个指定的Pod副本。DaemonSet非常适合需要全局部署、节点级运行的服务,如日志收集、监控代理、网络插件等。

DaemonSet的核心机制是通过节点监听和Pod调度实现:
(1)节点监听:DaemonSet控制器持续监控集群中的节点状态,当新节点加入时,自动创建对应的Pod;当节点移除时,清理相关Pod。
(2)Pod调度:每个节点上仅运行一个Pod副本,且Pod的生命周期与节点绑定。
DaemonSet的调度逻辑包括:
(1)默认调度:所有符合条件的节点均会运行Pod。
(2)节点选择器(NodeSelector):通过标签匹配限制Pod仅在特定节点上运行。
(3)节点亲和性(NodeAffinity):支持更复杂的调度规则,如基于节点角色、硬件特性等。
(4)污点容忍(Taints and Tolerations):允许Pod在具有污点的节点上运行,例如在Master节点或专用GPU节点上部署。
DaemonSet的典型应用场景包括:
(1)日志收集:在每个节点上运行日志代理(如Fluentd、Filebeat),集中收集容器日志。
(2)监控代理:部署监控工具(如Prometheus Node Exporter、cAdvisor),采集节点和容器的性能指标。
(3)网络插件:运行CNI插件(如Calico、Flannel),管理容器网络。
(4)安全工具:部署安全扫描工具(如Clair、Trivy),定期检查镜像漏洞。
(5)存储插件:运行存储守护进程(如GlusterFS、Ceph),提供共享存储服务。
二、Elasticsearch 和Fluentd 简介
1、Elasticsearch简介
Elasticsearch 是一个基于 Lucene 的开源分布式搜索和分析引擎,主要用于实时分布式搜索、数据分析以及日志处理。它具有以下特点:
(1)分布式架构:
支持水平扩展,能够轻松处理 PB 级数据。
数据自动分片和复制,确保高可用性和容错性。
(2)全文搜索与分析:
提供强大的全文搜索功能,支持复杂查询和聚合操作。
支持地理位置搜索、图形化搜索等高级功能。
(3)实时数据处理:
具备近实时搜索能力,数据写入后几乎立即可被搜索。
支持实时数据流处理和分析。
(4)生态系统:
是 ELK Stack(Elasticsearch、Logstash、Kibana)的核心组件,常用于日志管理和分析。
与 Beats、Logstash 等工具集成,实现数据采集、处理和可视化。
(5)应用场景:
日志和事件数据分析。
企业搜索应用。
安全信息和事件管理(SIEM)。
业务指标监控和实时分析。
2、Fluentd 简介
Fluentd 是一个开源的日志收集器,专注于统一日志管理和数据收集。它具有以下特点:
(1)插件化架构:
提供丰富的输入(Input)、过滤(Filter)和输出(Output)插件,支持多种数据源和目标。
社区贡献了 500 多个插件,覆盖了常见的数据源和存储系统。
(2)统一日志格式:
使用 JSON 格式作为数据交换标准,便于日志的解析和处理。
支持结构化和非结构化数据的统一处理。
(3)高可靠性和性能:
支持内存和文件缓冲,防止数据丢失。
提供故障转移和容错机制,确保系统稳定性。
(4)轻量级和高效:
用 C 和 Ruby 编写,资源占用少,性能高。
每秒可处理数万条消息,适合大规模日志处理。
(5)应用场景:
日志聚合和管理。
数据流处理和转发。
实时日志分析和监控。
云服务中的日志管理。
3 总结
Elasticsearch 专注于分布式搜索和数据分析,适合需要实时搜索和复杂查询的场景。
Fluentd 专注于日志收集和管理,适合需要统一日志处理和转发的场景。
两者可以结合使用,例如:
Fluentd 收集日志并转发到 Elasticsearch。
另外,Kibana 可视化 Elasticsearch 中的日志数据,实现完整的日志管理和分析解决方案。
三、实验基础和前置条件
本实验中,master01、worker01和worker02主机,都以《实验四 初识Kubernetes对象》中“实验4.1 完成干净实验环境的准备”的快照为基础。
四、部署Daemonset
1、创建定义Daemonset的配置文件
如图4-1所示,在master01主机的/root/work/ex07目录中,创建定义Daemonset的配置文件fluentd-daemonset.yaml。
图4-1(a)
图4-1(b)
(1)tolerations配置
在 Kubernetes 中,DaemonSet 的 tolerations 配置允许你指定 Pod 可以容忍某些节点上的污点(Taints),从而使得这些 Pod 能够被调度到带有相应污点的节点上运行。在如图4-1的fluentd-daemonset.yaml配置中,通过设置 tolerations,允许 DaemonSet 的 Pod 在控制平面节点(即 Master 节点)上运行。
参数key:
node-role.kubernetes.io/control-plane 和 node-role.kubernetes.io/master 是 Kubernetes 默认的控制平面节点污点键。这些键用于标识控制平面节点(Master 节点)。
参数operator
Exists 表示只要存在该键的污点,无需匹配具体的值,即可容忍该污点。
参数effect
NoSchedule 表示如果节点存在该污点,普通 Pod 将不会被调度到该节点上。
通过设置 tolerations,DaemonSet 的 Pod 可以忽略这个限制,从而被调度到带有该污点的节点上。
(2)terminationGracePeriodSeconds配置
在如图4-1的fluentd-daemonset.yaml配置中,terminationGracePeriodSeconds: 30 是 Kubernetes 中 Pod 配置的一个字段,用于定义在 Pod 被终止时,Kubernetes 给容器留出的优雅关闭时间(以秒为单位)。优雅关闭,即允许容器在接收到终止信号后,有足够的时间执行清理操作,避免数据丢失或状态不一致。如果未指定 terminationGracePeriodSeconds,Kubernetes 会使用默认值(通常为 30 秒)。
如果在指定的优雅关闭时间内,容器未完成关闭,Kubernetes 会发送 SIGKILL 信号强制终止容器。通过合理设置 terminationGracePeriodSeconds,可以确保应用在关闭时能够优雅地处理未完成的操作,提高系统的稳定性和可靠性。
2、基于配置文件创建Daemonset
基于上述配置文件fluentd-daemonset.yaml创建Daemenset对象,具体命令如下所示。
kubectl apply -f ex07/fluentd-daemonset.yaml
具体运行结果,如图4-2所示。
图4-2
3、查看Daemonset所创建的Pod对象
执行以下命令,查看我们Daemonset所创建的Pod对象。
kubectl get pods --namespace=kube-system -l name=fluentd-elasticsearch -o wide
具体执行结果,如下图4-3所示。
图4-3
如果图4-3中,有pod状态一直处于ContainerCreating,那么建议重启master01,worker01和worker02。
4、进一步查看该DaemonSet对象的详细信息
执行以下命令,查看我们DaemonSet部署对象的详细信息。
kubectl describe daemonset fluentd-elasticsearch --namespace=kube-system
具体执行结果,如下图4-4所示。
图4-4
五、滚动更新Daemonset部署应用
1、检查Daemonset部署更新策略
执行以下命令,查看我们检查DaemonSet部署对象的更新策略。
kubectl get ds/fluentd-elasticsearch -o go-template='{{.spec.updateStrategy.type}}{{"\n"}}' -n kube-system
具体执行结果,如下图5-1示。
图5-1
滚动更新(RollingUpdate) 是 Kubernetes 中 DaemonSet 的默认更新策略。
行为特点:
①逐步替换 Pod:当 DaemonSet 需要更新时,Kubernetes 会逐个替换节点上的旧 Pod。
②零停机:新 Pod 启动后才会终止旧 Pod,确保服务不中断。
③节点顺序:按节点名称的字母顺序(或自定义排序)更新 Pod。
④并行度控制:可通过 maxUnavailable 或 maxSurge 调整同时更新的 Pod 数量(默认无限制,但受节点资源约束)。
2、更新Daemonset模版中的容器镜像
执行以下命令,查看我们更新Daemonset模版中的容器镜像。
kubectl set image ds/fluentd-elasticsearch fluentd-elasticsearch=quay.io/fluentd_elasticsearch/fluentd:v2.6.0 -n kube-system
具体执行结果,如下图5-2示。
图5-2
3、监视Daemonset的更新状态和进度
执行以下命令,监视Daemonset的更新状态和进度。
kubectl rollout status ds/fluentd-elasticsearch -n kube-system
具体执行结果,如下图5-3示。
图5-3
- 回滚Daemonset部署应用更新
1、查看Daemonset部署应用的历史版本
执行以下命令,查看Daemonset部署应用的历史版本。
kubectl rollout history ds/fluentd-elasticsearch -n kube-system
具体执行结果,如下图6-1示。
图6-1
- 直接回滚到Daemonset部署应用的上一个版本
执行以下命令,回滚到Daemonset部署应用的上一个版本。
kubectl rollout undo ds/fluentd-elasticsearch -n kube-system daemonset.apps/fluentd-elasticsearch
具体执行结果,如下图6-2示。
图6-2
- 监测Daemonset部署应用的回滚进度
执行以下命令,监测Daemonset部署应用的回滚进度。
kubectl rollout status ds/fluentd-elasticsearch -n kube-system
具体执行结果,如下图6-3示。
图6-3
- 删除Daemonset部署应用
执行以下命令,删除Daemonset部署应用,以清理实验环境。
kubectl delete ds fluentd-elasticsearch -n kube-system
具体执行结果,如下图7-1示。
图7-1
进一步执行以下命令,确认Daemonset的Pod已经被删除。
kubectl get pods -n kube-system -l name=fluentd-elasticsearch -o wide
具体执行结果,如下图7-2示。
图7-2
本实验到此结束!
六、实验结果与说明
- DaemonSet:保证集群每个节点只跑一个 Pod。
- tolerations:让 Pod 能跑在 Master 节点。
- hostPath 卷:挂载主机日志目录,实现节点级日志收集。


AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)