智能
助手
最大化  清空记录 停止  历史记录
翻译选中文本
选中一段文本后进行翻译
名词解释
选中一段文本后进行名词解释
知识图谱生成
通过图谱展示知识信息
登录用户在知识浏览页面可用
答案生成
AI自动回答一个问答功能中的问题
登录用户在问答浏览页面,且问题开放回答中可用
知识摘要
自动为当前知识生成摘要
知识浏览页面可用
知识问答
针对当前知识进行智能问答
知识浏览面可用
2026-01-21 20:51:03 版本 : 6.8.10 ds(daemonsets)确保集群中的每个(或部分)节点上都运行一个 Pod 副本 案例
作者: 文艺范儿 于 2026年01月21日 发布在分类 / Docker & K8S / K8S基础 下,并于 2026年01月21日 编辑
 历史版本

备注 修改日期 修改人
创建版本 2026-01-21 20:51:03[当前版本] 文艺范儿

6.8.10 ds(daemonsets)确保集群中的每个(或部分)节点上都运行一个 Pod 副本 案例

简介

DaemonSet(简称 ds)是 Kubernetes 中的一种控制器,用于 确保集群中的每个(或部分)节点上都运行一个 Pod 副本。当有新节点加入集群时,DaemonSet 会自动在新节点上创建 Pod;当节点被移除时,对应的 Pod 也会被回收。

  • 核心作用
    • 部署 节点级服务(如网络插件、存储插件、监控 Agent、日志收集器)。
    • 确保服务在 所有节点(或特定节点) 上持续运行,无需手动干预。
  • 与 Deployment 的区别
    • Deployment:管理无状态应用,控制 Pod 的副本数(如 3 个副本,可能分布在 3 个不同节点)。
    • DaemonSet:管理节点级服务,控制 Pod 的 节点覆盖率(如每个节点 1 个副本)。

核心字段

字段 作用 示例

spec.template

Pod 模板,定义要运行的容器

与 Deployment 的 Pod 模板结构一致

spec.selector

标签选择器,匹配 Pod(必填)

matchLabels: { app: node-exporter }

spec.template.spec.nodeSelector

节点选择器,指定 Pod 运行在哪些节点

nodeSelector: { role: monitor }

spec.template.spec.affinity

节点亲和性,更灵活地选择节点

见案例

spec.updateStrategy

更新策略(RollingUpdate/OnDelete)

type: RollingUpdate

典型使用场景

场景 说明 示例

节点监控

在每个节点上运行监控 Agent,收集节点指标(CPU/内存/磁盘)

Prometheus Node Exporter、Datadog Agent

日志收集

在每个节点上运行日志收集器,收集容器日志

Fluentd、Filebeat、Logstash

网络插件

实现容器网络(CNI),如 Calico、Flannel、Cilium

每个节点运行 calico-nodePod

存储插件

提供存储服务(CSI),如 Ceph、GlusterFS

每个节点运行 ceph-csi-pluginPod

安全审计

在每个节点上运行安全扫描工具,检测漏洞

案例1:每个节点只运行1个nginx

# 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 访问使用
历史版本-目录  [回到顶端]
    文艺知识分享平台 -V 5.2.5 -wcp