首页/云/Kubernetes 速查/DaemonSet 每节点守护进程

DaemonSet 每节点守护进程

保证(符合条件的)每个节点运行一个 Pod:日志收集、监控 agent、CNI/存储插件等基础设施组件的标准载体。

Kubernetes 速查云更新于 2026-10-13

每节点守护进程是什么

这类控制器保证符合条件的每台节点上都运行一份实例:节点加入就自动创建,节点移除就随之清理。它适合那些必须与节点绑定的组件——日志采集、监控代理、网络与存储插件、节点级安全组件。它不需要声明副本数,副本数量由节点数量决定。

覆盖范围由调度规则决定

「每台节点」并不是字面意义上的全部节点:默认不会调度到带不可调度污点的节点上,因此控制面节点通常不会运行这类实例。要覆盖这些节点必须显式添加对应容忍。排查「某台节点上没有采集器」时,先看节点的污点与调度状态,再看控制器的容忍配置。

基本信息

适用环境任何 Kubernetes 发行版,属于工作负载类资源
副本数量由符合条件的节点数决定,不手工声明
默认覆盖跳过带不可调度污点的节点
覆盖控制通过容忍与节点选择器决定范围
更新方式按节点滚动更新,可配置更新节奏
常见挂载直接挂载宿主机目录以读取日志或系统状态

典型使用场景

  • 日志采集:读取每台节点上的容器日志目录并转发到日志服务
  • 监控代理:采集节点与容器的指标,需要覆盖全部节点
  • 网络插件:为每台节点提供网络数据面的组件
  • 存储插件:提供本地卷或分布式存储的节点侧能力
  • 安全与合规:节点级审计与防护组件
  • 缓存清理:定期回收节点上的镜像与临时文件

DaemonSet 清单

DaemonSet 清单
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: node-agent
  namespace: kube-system
spec:
  selector:
    matchLabels:
      app: node-agent
  template:
    metadata:
      labels:
        app: node-agent
    spec:
      tolerations:
        - key: node-role.kubernetes.io/control-plane
          effect: NoSchedule          # 显式容忍才能覆盖控制面节点
      containers:
        - name: agent
          image: registry.example.com/agent:2.3.1
          volumeMounts:
            - name: varlog
              mountPath: /var/log
              readOnly: true
      volumes:
        - name: varlog
          hostPath:
            path: /var/log

查看覆盖情况

查看覆盖情况
kubectl get ds -n kube-system                       # 看期望与就绪数量
kubectl get pods -l app=node-agent -o wide           # 看覆盖到哪些节点
kubectl get ds node-agent -o jsonpath='desired={.status.desiredNumberScheduled} ready={.status.numberReady}'
kubectl get nodes                                     # 与节点总数对照
kubectl describe node node-1 | grep -i taints          # 节点污点排查

覆盖范围核对顺序

检查项含义不一致时的表现
期望数量符合条件的节点数节点新增后数量未变说明不满足条件
就绪数量实际运行起来的数量小于期望说明部分节点上没有跑起来
节点污点节点是否被标记不可调度未加容忍时该节点上不会有实例
节点选择器控制器限定的节点范围范围外的节点不会被覆盖
节点状态节点是否处于就绪状态节点异常时实例也无法正常运行
默认不会调度到带不可调度污点的节点上,需要覆盖控制面等特殊节点时必须显式添加对应容忍。
这类实例常直接挂载宿主机目录,配置不当可能改写宿主机上的文件与日志,权限与挂载范围应严格控制。

易错点

  • 某节点上没有采集器:多半是该节点带污点而控制器未加容忍,不是组件本身故障
  • 给宿主机目录挂载了可写权限:组件异常时可能破坏宿主机文件,应按需改为只读
  • 用副本数思路理解这类控制器:副本由节点数决定,手工调整副本没有意义
  • 节点新增后覆盖不全:先核对期望数量是否随节点数变化,判断是条件不满足还是调度失败

数据来源与参考

  • Kubernetes 官方文档 · DaemonSet
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌