type
status
date
slug
summary
category
tags
create_time
Sep 24, 2025 12:43 PM
icon
password
my_create_time

📝 前言

在 Kubernetes 集群中,有些功能必须在每个(或特定)节点上运行一份 Pod,例如节点监控、日志采集、网络代理或宿主机级别的守护进程。
DaemonSet 是为这类场景设计的控制器,负责确保符合条件的每个节点都运行该 Pod 的副本。

🧭 背景介绍

以下为一个真实的使用场景介绍:
某公司在生产环境运行着一个多节点的 Kubernetes 集群,用于承载电商网站和内部业务。
运维团队需要对每台节点实时采集系统指标和日志,包括 CPU、内存、磁盘与网络流量,以便接入 Prometheus 监控体系,同时还要保证日志可以统一收集到 Elasticsearch 供排障与分析。
为此,团队选择:
  • 使用 Prometheus node-exporter 采集主机层指标。
  • 使用 Fluent Bit 将节点系统日志与容器日志统一收集并转发到集中式日志平台。
两者都必须在每一台节点上运行一份守护进程。
通过创建 DaemonSet,运维人员无需关心节点数量变化:
  • 新增节点 → 自动部署对应 Pod
  • 下线节点 → 自动清理 Pod 从而保证监控与日志管道的持续覆盖和稳定性。

🧠 本章知识卡片

notion image

🚀 本章小节

1️⃣ 什么是 DaemonSet?

DaemonSet 是一种工作负载资源,用来保证在符合调度规则的节点上运行 Pod 的副本。
核心目标:当节点加入、删除或标签/污点变更时,自动在目标节点上创建或删除 Pod。

2️⃣ 关键特性

  • 在每个(或被选中的)节点上保证至少一个 Pod 副本。
  • 支持通过 nodeSelector、nodeAffinity、taints/tolerations 精确控制运行节点。
  • 支持滚动更新策略(RollingUpdate)以平滑升级 DaemonSet。
  • 常用于宿主机级别收集或代理服务(例如 node-exporter、fluentd、calico等)。

3️⃣ 何时使用 DaemonSet?

  • 节点监控(Prometheus node-exporter)
  • 节点日志采集(fluentd/fluent-bit)
  • 网络插件(CNI Daemon)
  • 主机网络代理、流量采集或安全守护进程

4️⃣ 工作流程

以下为 DaemonSet 的大致工作流程图:
notion image

5️⃣ 实战示例:node-exporter

以下为一个采集节点监控数据的示例:
字段说明:
  • spec.selector.matchLabels必需,必须匹配 template.metadata.labels,用于控制器识别哪些 Pod 属于该 DaemonSet。
  • spec.template.metadata.labels:模板标签,必须与 selector 对应。
  • spec.updateStrategy
    • type: RollingUpdate(默认)或 OnDelete
    • rollingUpdate.maxUnavailable:同时不可用的节点数(可用整数或百分比,例:110%)。
  • hostNetwork / hostPID:当需要访问宿主网络或进程空间(例如 node-exporter)时开启,需评估权限与安全性。
  • tolerations:处理被污点节点(taints),例如 master 节点常被 taint,若希望在 master 上运行需添加对应 toleration。
  • nodeSelector / nodeAffinity:限制运行节点,例如按角色、可用区或硬件标签调度。
  • volumes(hostPath):常用于读取宿主机 /proc/sys、日志目录等;注意安全与权限。

6️⃣ 常见问题

  • 某些节点没有 Pod:检查节点是否 Ready、label/taint 是否匹配。
  • Pod Pending:查看事件、镜像拉取及 hostPath 权限。
  • 滚动更新过慢:检查 maxUnavailable。
  • 安全:评估 hostNetwork/hostPath 风险。

✅ 总结

DaemonSet 是在节点层面保证 Pod 覆盖的重要控制器,常用于节点监控、日志采集与网络插件。
正确使用 selector、template、tolerations 与 nodeAffinity 可实现精确控制。
💡
有关文章的任何疑问,欢迎您在底部评论区留言,一起交流~
 
上一篇
Nginx+ACME服务器搭建
下一篇
第四部分:StatefulSet 资源介绍

评论
Loading...