| 备注 | 修改日期 | 修改人 |
| 创建版本 | 2026-01-21 20:51:03[当前版本] | 文艺范儿 |
DaemonSet(简称 ds)是 Kubernetes 中的一种控制器,用于 确保集群中的每个(或部分)节点上都运行一个 Pod 副本。当有新节点加入集群时,DaemonSet 会自动在新节点上创建 Pod;当节点被移除时,对应的 Pod 也会被回收。
Deployment:管理无状态应用,控制 Pod 的副本数(如 3 个副本,可能分布在 3 个不同节点)。DaemonSet:管理节点级服务,控制 Pod 的 节点覆盖率(如每个节点 1 个副本)。核心字段
| 字段 | 作用 | 示例 |
|---|---|---|
|
Pod 模板,定义要运行的容器 |
与 Deployment 的 Pod 模板结构一致 |
|
标签选择器,匹配 Pod(必填) |
|
|
节点选择器,指定 Pod 运行在哪些节点 |
|
|
节点亲和性,更灵活地选择节点 |
见案例 |
|
更新策略(RollingUpdate/OnDelete) |
|
典型使用场景
| 场景 | 说明 | 示例 |
|---|---|---|
节点监控 |
在每个节点上运行监控 Agent,收集节点指标(CPU/内存/磁盘) |
Prometheus Node Exporter、Datadog Agent |
日志收集 |
在每个节点上运行日志收集器,收集容器日志 |
Fluentd、Filebeat、Logstash |
网络插件 |
实现容器网络(CNI),如 Calico、Flannel、Cilium |
每个节点运行 |
存储插件 |
提供存储服务(CSI),如 Ceph、GlusterFS |
每个节点运行 |
安全审计 |
在每个节点上运行安全扫描工具,检测漏洞 |
# 1. 创建 nginx-ds.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: nginx-every-node
namespace: default
labels:
app: nginx-every-node
spec:
selector:
matchLabels:
app: nginx-every-node
template:
metadata:
labels:
app: nginx-every-node
spec:
# 1️⃣ 容忍 Master/Control-Plane 污点,保证能在 Master 上也运行(可选:后面会讲污点容忍)
tolerations:
- key: "node-role.kubernetes.io/control-plane"
operator: "Exists"
effect: "NoSchedule"
- key: "node-role.kubernetes.io/master"
operator: "Exists"
effect: "NoSchedule"
# 2️⃣ 镜像配置
containers:
- name: nginx
image: harbor.wyasw.com/test/nginx:v1
ports:
- containerPort: 80
name: http
protocol: TCP
# 3️⃣ 资源限制(防止节点资源被占满)
resources:
requests:
memory: "64Mi"
cpu: "50m"
limits:
memory: "128Mi"
cpu: "100m"
# 4️⃣ 健康检查
livenessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 10
periodSeconds: 30
readinessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 5
periodSeconds: 10
# 2. 应用配置
kubectl apply -f nginx-ds.yaml
# 3. 查看 Pod 分布,可以看到master和worker节点各有一个nginx运行
kubectl get pods -l app=nginx-every-node -o wide
# 生产推荐通过 NodePort Service 访问使用