每节点守护进程是什么
这类控制器保证符合条件的每台节点上都运行一份实例:节点加入就自动创建,节点移除就随之清理。它适合那些必须与节点绑定的组件——日志采集、监控代理、网络与存储插件、节点级安全组件。它不需要声明副本数,副本数量由节点数量决定。
覆盖范围由调度规则决定
「每台节点」并不是字面意义上的全部节点:默认不会调度到带不可调度污点的节点上,因此控制面节点通常不会运行这类实例。要覆盖这些节点必须显式添加对应容忍。排查「某台节点上没有采集器」时,先看节点的污点与调度状态,再看控制器的容忍配置。
基本信息
| 适用环境 | 任何 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 # 节点污点排查覆盖范围核对顺序
| 检查项 | 含义 | 不一致时的表现 |
|---|---|---|
| 期望数量 | 符合条件的节点数 | 节点新增后数量未变说明不满足条件 |
| 就绪数量 | 实际运行起来的数量 | 小于期望说明部分节点上没有跑起来 |
| 节点污点 | 节点是否被标记不可调度 | 未加容忍时该节点上不会有实例 |
| 节点选择器 | 控制器限定的节点范围 | 范围外的节点不会被覆盖 |
| 节点状态 | 节点是否处于就绪状态 | 节点异常时实例也无法正常运行 |
默认不会调度到带不可调度污点的节点上,需要覆盖控制面等特殊节点时必须显式添加对应容忍。
这类实例常直接挂载宿主机目录,配置不当可能改写宿主机上的文件与日志,权限与挂载范围应严格控制。