DaemonSet 节点级守护
有些工作负载不属于某个应用,而是要覆盖整集群的每台节点——比如日志采集器、节点监控代理、网络插件。它们要做到「每台机器一个实例」,新增节点自动部署、移除节点自动回收。DaemonSet 正是为此设计。
1. 工作原理
DaemonSet 控制器会为每个匹配的节点调度一个 Pod 副本,并通过节点上的「污点容忍」与「节点选择器」控制覆盖范围。
# 查看集群中运行的 DaemonSet
kubectl get daemonset -A
# 常见系统 DaemonSet:kube-proxy、CNI 网络插件、fluentd2. 典型清单
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: fluentd
namespace: kube-system
spec:
selector:
matchLabels: { app: fluentd }
template:
metadata:
labels: { app: fluentd }
spec:
tolerations:
- operator: Exists # 容忍所有污点,连控制平面节点也采集
containers:
- name: fluentd
image: fluentd:v1.16
resources:
limits:
memory: 200Mi💡用 nodeSelector 限制范围
若只想在特定节点运行(如带 GPU 的机器跑 GPU 监控),加 nodeSelector 或 nodeAffinity 即可,不必每台都跑。
3. 滚动更新与回滚
DaemonSet 也支持滚动更新,但按顺序逐个节点替换,避免同一时间全部下线:
kubectl set image daemonset/fluentd fluentd=fluentd:v1.17
kubectl rollout status daemonset/fluentd
kubectl rollout undo daemonset/fluentd⚠️小心占用节点资源
DaemonSet 在每台节点都跑,资源请求会乘以节点数。务必设 resources.limits,否则可能挤占业务 Pod 导致节点资源紧张。
小结
- DaemonSet 在每(指定)节点跑一个实例,节点增删自动跟随
- 常用于日志、监控、网络插件;靠污点容忍覆盖所有节点
- 支持滚动更新与回滚,注意资源占用
- 下一章学习 Job 与 CronJob 处理一次性与定时任务 →