当前位置: 首页 > news >正文

K8s DaemonSet 详解

🚀 K8s DaemonSet 详解:最强节点守护神!

在 Kubernetes(K8s)中,大多数 Pod 由 DeploymentStatefulSet 进行调度,但有些应用需要每个节点都运行一个 Pod,比如日志收集、监控代理等。这时候,DaemonSet 就是你的最佳选择!

💡 你是否有这些疑问?
什么是 DaemonSet?它有什么特点?
DaemonSet 适用于哪些场景?
如何使用 DaemonSet?

🔥 今天,这篇文章带你彻底掌握 K8s DaemonSet!


🎯 什么是 DaemonSet?

DaemonSet 是 Kubernetes 的一种控制器,它确保 每个(或部分)节点都运行一个特定的 Pod

📌 DaemonSet 适用于以下情况:

  • 系统级守护进程(Daemon):如监控代理、日志收集、网络插件
  • 需要直接访问宿主机的应用:如存储管理、硬件驱动

🔥 一句话总结:DaemonSet 让特定 Pod 在每个节点上自动运行,无需手动管理!

🎯 DaemonSet 适用场景

💡 哪些应用适合使用 DaemonSet?

场景示例
日志收集Fluentd、Filebeat
监控代理Prometheus Node Exporter、Datadog Agent
安全与网络Calico、Cilium(CNI 插件)
存储管理Ceph、GlusterFS、LocalPV
GPU 监控NVIDIA DCGM Exporter

🔥 DaemonSet 适合所有需要在每个节点上运行的任务!

🎯 DaemonSet vs Deployment:核心区别!

对比项DaemonSetDeployment
适用场景需要每个节点运行 Pod需要负载均衡弹性伸缩
Pod 运行数量取决于集群节点数(每个节点 1 个)取决于replicas数量
Pod 何时创建新节点加入时自动创建 Pod由调度器决定 Pod 运行在哪个节点
Pod 终止节点删除时,DaemonSet Pod 也会消失Pod 可能被调度到其他节点
典型应用监控、日志收集、存储管理Web 服务、数据库、微服务

🔥 总结:

  • 需要在每个节点都运行?👉 选 DaemonSet
  • 需要可扩展的负载均衡?👉 选 Deployment

🎯 DaemonSet 实战:如何创建?

1️⃣ 创建一个 DaemonSet

📌 下面是一个 Fluentd 日志收集 DaemonSet 的 YAML 配置

apiVersion: apps/v1
kind:DaemonSet
metadata:
name:fluentd
labels:app:fluentd
spec:
selector:matchLabels:app:fluentd
template:metadata:labels:app:fluentdspec:containers:-name:fluentdimage:fluent/fluentd:v1.14volumeMounts:-name:varlogmountPath:/var/logvolumes:-name:varloghostPath:path:/var/log  # 访问宿主机日志目录

🔥 注意:

    1. 每个节点都会运行一个 Fluentd 守护进程
    1. Pod 会自动挂载 /var/log 目录,以便收集宿主机日志
    1. 新加入的节点,也会自动运行 Fluentd Pod!

2️⃣ 查看 DaemonSet 运行情况

kubectl get daemonsets

示例输出:

NAME       DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
fluentd    3         3         3       3            3           <none>          10m

💡 “DESIRED” = “CURRENT” = 节点数,说明 DaemonSet 运行正常!


3️⃣ 只在特定节点运行 DaemonSet

📌 如果你不希望 DaemonSet 在所有节点运行,可以使用 nodeSelectoraffinity

spec:template:spec:nodeSelector:node-type: log-collector  # 只在标签为 log-collector 的节点运行

🔥 打标签后生效

kubectl label nodes worker-node-1 node-type=log-collector

4️⃣ DaemonSet 滚动更新

💡 DaemonSet 也支持滚动更新!

kubectl set image daemonset/fluentd fluentd=fluent/fluentd:v1.15

📌 更新策略

spec:updateStrategy:type: RollingUpdate  # 逐个节点更新

🔥 如果更新失败,如何回滚?

kubectl rollout undo daemonset/fluentd

💡 这样可以恢复到上一个版本!


🎯 DaemonSet 最佳实践!

1️⃣ 避免占用所有节点资源
📌 使用 nodeSelectortaints & tolerations,只让 DaemonSet 运行在特定节点!

2️⃣ 配合 HostPath 使用,访问宿主机数据
📌 例如,日志收集器挂载 /var/log,监控工具挂载 /proc/sys

3️⃣ 使用 RollingUpdate 确保安全更新
📌 逐个节点更新,避免影响整个集群!

4️⃣ 监控 DaemonSet 运行状态

kubectl get daemonsets -o wide
kubectl describe daemonset fluentd
kubectl logs -l app=fluentd

🎯 总结:DaemonSet 适合哪些情况?

🔥 你应该在这些情况下使用 DaemonSet
日志收集(Fluentd、Filebeat)
监控代理(Node Exporter、Datadog)
存储管理(Ceph、LocalPV)
网络插件(Calico、Cilium)
GPU 监控(NVIDIA DCGM)

💡 如果你的 Pod 需要每个节点都运行,DaemonSet 就是最好的选择!

http://www.dtcms.com/a/323830.html

相关文章:

  • K8s四层负载均衡-service
  • NLP学习开始-02逻辑回归
  • DevOps:从GitLab .gitlab-ci.yml 配置文件到CI/CD
  • LeetCode - 搜索插入位置 / 排序链表
  • win11(RTX5060)下进行nanodetplus训练
  • Kafka消费者相关原理
  • 第4章 程序段的反复执行4 多重循环练习(题及答案)
  • Audio Flamingo
  • 网站升级https地址方法
  • LeetCode每日一题,2025-8-10
  • jmeter常规压测【读取csv文件】
  • BGP HCIP
  • 繁花深处:花店建设的时代意义与多元应用—仙盟创梦IDE
  • 农经权二轮延包—已有软件与后续研究
  • 线性代数1000题学习笔记
  • 从街亭失守看管理
  • Datawhale AI 夏令营——全球AI攻防挑战赛(AIGC技术-图像方向)
  • LLaMA-Adapter V2 Parameter-Efficient Visual Instruction Model
  • 快速了解DBSCAN算法
  • 分布微服务电商订单系统Rust编码开发[下]
  • 数据结构:树
  • 分布微服务电商订单系统Rust编码开发[上]
  • 代码随想录算法训练营第六十天|图论part10
  • sqllabs——Less1
  • 【每天一个知识点】深度领域对抗神经网络
  • 医防融合中心-智慧化慢病全程管理医疗AI系统开发(下)
  • 零基础学Java第二讲---数据类型与变量
  • 什么是ABA问题?
  • Day 10: Transformer完整架构详解 - 从位置编码到编解码器的全面剖析
  • 【QT】常⽤控件详解(七)容器类控件 GroupBox TabWidget 布局管理器 Spacer