使用Daemonset部署日志收集守护进程

发布于:2025-05-13 ⋅ 阅读:(17) ⋅ 点赞:(0)

1.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),提供共享存储服务。

2.Elasticsearch Fluentd 简介:

2.1Elasticsearch简介 

Elasticsearch 是一个基于 Lucene 的开源分布式搜索和分析引擎,主要用于实时分布式搜索、数据分析以及日志处理。它具有以下特点:

(1)分布式架构

支持水平扩展,能够轻松处理 PB 级数据。

数据自动分片和复制,确保高可用性和容错性。

(2)全文搜索与分析:

提供强大的全文搜索功能,支持复杂查询和聚合操作。

支持地理位置搜索、图形化搜索等高级功能。

(3)实时数据处理:

具备近实时搜索能力,数据写入后几乎立即可被搜索。

支持实时数据流处理和分析。

(4)生态系统:

是 ELK Stack(Elasticsearch、Logstash、Kibana)的核心组件,常用于日志管理和分析。

与 Beats、Logstash 等工具集成,实现数据采集、处理和可视化。

(5)应用场景:

日志和事件数据分析。

企业搜索应用。

安全信息和事件管理(SIEM)。

业务指标监控和实时分析。

2.2Fluentd 简介:

Fluentd 是一个开源的日志收集器,专注于统一日志管理和数据收集。它具有以下特点:

(1)插件化架构

提供丰富的输入(Input)、过滤(Filter)和输出(Output)插件,支持多种数据源和目标。

社区贡献了 500 多个插件,覆盖了常见的数据源和存储系统。

(2)统一日志格式:

使用 JSON 格式作为数据交换标准,便于日志的解析和处理。

支持结构化和非结构化数据的统一处理。

(3)高可靠性和性能:

支持内存和文件缓冲,防止数据丢失。

提供故障转移和容错机制,确保系统稳定性。

(4)轻量级和高效:

用 C 和 Ruby 编写,资源占用少,性能高。

每秒可处理数万条消息,适合大规模日志处理。

(5)应用场景:

日志聚合和管理。

数据流处理和转发。

实时日志分析和监控。

云服务中的日志管理。

2.3总结:

Elasticsearch 专注于分布式搜索和数据分析,适合需要实时搜索和复杂查询的场景。

Fluentd 专注于日志收集和管理,适合需要统一日志处理和转发的场景。

两者可以结合使用,例如:

Fluentd 收集日志并转发到 Elasticsearch。

另外,Kibana 可视化 Elasticsearch 中的日志数据,实现完整的日志管理和分析解决方案。

3.实验基础和前置条件:

本实验以Kubernetes集群环境搭建与初始化-CSDN博客为基础和前置条件。

4.部署Daemonset:

4.1创建定义Daemonset的配置文件:

创建定义Daemonset的配置文件fluentd-daemonset.yaml。

 

(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,可以确保应用在关闭时能够优雅地处理未完成的操作,提高系统的稳定性和可靠性。

4.2基于配置文件创建Daemonset:

基于上述配置文件fluentd-daemonset.yaml创建Daemenset对象,具体命令如下所示。

kubectl apply -f ch04/fluentd-daemonset.yaml

4.3 查看Daemonset所创建的Pod对象:

查看我们Daemonset所创建的Pod对象。

kubectl get pods --namespace=kube-system -l name=fluentd-elasticsearch -o wide

 有pod状态一直处于ContainerCreating,那么建议重启master01,node01和node02。

4.4进一步查看该DaemonSet对象的详细信息:

执行以下命令,查看我们DaemonSet部署对象的详细信息。

kubectl describe daemonset fluentd-elasticsearch --namespace=kube-system

5. 滚动更新Daemonset部署应用:

5.1检查Daemonset部署更新策略:

执行以下命令,查看我们检查DaemonSet部署对象的更新策略。

kubectl get ds/fluentd-elasticsearch -o go-template='{{.spec.updateStrategy.type}}{{"\n"}}' -n kube-system

5.2 更新Daemonset模版中的容器镜像:

执行以下命令,查看我们更新Daemonset模版中的容器镜像。

kubectl set image ds/fluentd-elasticsearch fluentd-elasticsearch=quay.io/fluentd_elasticsearch/fluentd:v2.6.0 -n kube-system

5.3 监视Daemonset的更新状态和进度:

执行以下命令,监视Daemonset的更新状态和进度。

kubectl rollout status ds/fluentd-elasticsearch -n kube-system

6. 回滚Daemonset部署应用更新:

6.1查看Daemonset部署应用的历史版本:

执行以下命令,查看Daemonset部署应用的历史版本。

kubectl rollout history ds/fluentd-elasticsearch -n kube-system

6.2 直接回滚到Daemonset部署应用的上一个版本:

执行以下命令,回滚到Daemonset部署应用的上一个版本。

kubectl rollout undo ds/fluentd-elasticsearch -n kube-system daemonset.apps/fluentd-elasticsearch

6.3 监测Daemonset部署应用的回滚进度:

执行以下命令,监测Daemonset部署应用的回滚进度。

kubectl rollout status ds/fluentd-elasticsearch -n kube-system

7. 删除Daemonset部署应用:

执行以下命令,删除Daemonset部署应用,以清理实验环境。

kubectl delete ds fluentd-elasticsearch -n kube-system

 进一步执行以下命令,确认Daemonset的Pod已经被删除。

kubectl get pods  -n kube-system -l name=fluentd-elasticsearch -o wide

本实验到此结束! 


网站公告

今日签到

点亮在社区的每一天
去签到