K8S 之 DaemonSet

👨‍🎓博主简介

  🏅CSDN博客专家

  🏅云计算领域优质创作者

  🏅华为云开发者社区专家博主

  🏅阿里云开发者社区专家博主

💊交流社区: 运维交流社区 欢迎大家的加入!

🐋 希望大家多多支持,我们一起进步!😄

🎉如果文章对你有帮助的话,欢迎 点赞 👍🏻 评论 💬 收藏 ⭐️ 加关注+💗


文章目录

  • [一、DaemonSet 简介](#一、DaemonSet 简介)
    • [1.1 DaemonSet 是什么](#1.1 DaemonSet 是什么)
    • [1.2 DaemonSet 与 Deployment 的区别](#1.2 DaemonSet 与 Deployment 的区别)
    • [1.3 DaemonSet 的应用场景](#1.3 DaemonSet 的应用场景)
    • [1.4 节点污点 注意事项](#1.4 节点污点 注意事项)
  • [二、DaemonSet 举例](#二、DaemonSet 举例)
    • [2.1 写 nginx-daemonset.yaml](#2.1 写 nginx-daemonset.yaml)
    • [2.2 启动运行](#2.2 启动运行)
    • [2.3 验证](#2.3 验证)

一、DaemonSet 简介

1.1 DaemonSet 是什么

DaemonSet 是 Kubernetes 的一种控制器,缩写:DS,确保集群内每个节点上运行且仅运行一个 Pod 副本,当有节点加入集群时, 也会为他们新增一个 Pod 。当有节点从集群移除时,这些 Pod 也会被回收。删除 DaemonSet 将会删除它创建的所有 Pod。

官方文档:K8s中文官方文档 - DaemonSet

1.2 DaemonSet 与 Deployment 的区别

特性 DaemonSet Deployment
调度目标 每个节点强制一个 按副本数随机分布
适用场景 节点级守护进程 (监控、日志、网络) 无状态应用 无状态应用(Web、API、微服务)
扩缩容 自动随节点增减 手动调整 replicas

1.3 DaemonSet 的应用场景

  • 节点日志的收集:fluentdfilebeat
  • 节点监控指标采集:node_exportercadvisor
  • 网络代理/CNI 插件:calicoflannel
  • 存储守护进程:Ceph OSDGlusterFSOpenEBSLonghorn
  • 安全/审计代理:FalcoAuditdSysdig

1.4 节点污点 注意事项

从 Kubernetes 1.6 开始,Master 节点默认排斥 DaemonSet Pod

原因 :Master 节点带有 node-role.kubernetes.io/master:NoSchedule 污点,而 DaemonSet 创建的 Pod 默认无此容忍度,因此不会被调度。

建议 :如无特殊需求(如控制面监控、API Server 指标采集),不要将 DaemonSet Pod 调度到 Master 节点,避免占用控制面资源。


如需调度到 Master 节点

在 DaemonSet 的 Pod 模板中添加容忍度:

yaml 复制代码
tolerations:
  - key: node-role.kubernetes.io/master
    effect: NoSchedule
    operator: Exists
  # K8s 1.20+ 推荐使用 control-plane 标签
  - key: node-role.kubernetes.io/control-plane
    effect: NoSchedule
    operator: Exists

⚠️ 注意 :K8s 1.24+ 已废弃 master 标签,改用 control-plane,建议同时容忍两者以保证兼容性。

如何判断节点有没有污点

bash 复制代码
kubectl describe node <master-node> | grep Taints

返回:
<none> 节点无污点,任何 Pod 都可调度;
node-role.kubernetes.io/master:NoSchedulenode-role.kubernetes.io/control-plane:NoSchedule 有污点,Pod 需添加对应 容忍:tolerations 或 去除污点:taints Pod才能进行调度;

  • 去除污点
bash 复制代码
# 去除 master 污点(K8s 1.23 及以下)
kubectl taint node <master-node-name> node-role.kubernetes.io/master:NoSchedule-

# 去除 control-plane 污点(K8s 1.24+)
kubectl taint node <master-node-name> node-role.kubernetes.io/control-plane:NoSchedule-
  • 恢复污点
bash 复制代码
# 重新添加 Master 污点(K8s 1.23 及以下)
kubectl taint node <master-node> node-role.kubernetes.io/master:NoSchedule

# 或 control-plane 污点(K8s 1.24+)
kubectl taint node <master-node> node-role.kubernetes.io/control-plane:NoSchedule

二、DaemonSet 举例

需求:再每一个节点上部署一个nginx服务;

2.1 写 nginx-daemonset.yaml

  • nginx-daemonset.yaml
yaml 复制代码
apiVersion: v1
kind: Namespace
metadata: 
  name: nginx
---
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: nginx-daemonset
  namespace: nginx
  labels:
    app: nginx
spec:
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      hostNetwork: true
      tolerations:           # ← 添加容忍度,如果不添加,则不会再有污点的节点上部署
        - key: node-role.kubernetes.io/master
          effect: NoSchedule
          operator: Exists
        - key: node-role.kubernetes.io/control-plane
          effect: NoSchedule
          operator: Exists
      containers:
      - name: nginx
        image: nginx:1.24.0
        ports:
        - containerPort: 80
        resources:         
          requests:
            cpu: "100m"
            memory: "128Mi"
          limits:
            cpu: "500m"
            memory: "256Mi"
  • 注意事项
    • DaemonSet 不能有 replicas 字段

2.2 启动运行

bash 复制代码
kubectl apply -f nginx-daemonset.yaml

2.3 验证

bash 复制代码
# 查看nginx pod是否每个节点都部署了一个
kubectl get pods -n nginx -o wide

# 查看DaemonSet中有没有nginx
kubectl get ds -n nginx -o wide

如图:可以看到三个节点都部署了nginx,那么就没问题了

  • 页面访问测试;
    172.16.11.230
    172.16.11.231
    172.16.11.232

访问没问题,成功!!!

相关推荐
秋播5 小时前
国内本地WSL2编译rancher源码
云原生
小猿姐2 天前
MySQL Top 10 热点问题 AI 运维实战:从内核诊断到云原生运维
mysql·云原生·aiops
阿里云云原生3 天前
深入内核:拆解 OpenTelemetry eBPF 探针如何优雅地“透视”多语言微服务?
云原生
大树883 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠3 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质3 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
Inhand陈工3 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智3 天前
ARP代理--工作原理
运维·网络·arp·arp代理
shushangyun_3 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
施努卡机器视觉3 天前
SNK施努卡侧滑门锁上滑轮总成自动化装配线,从零件到组件,全流程精密制造方案
运维·自动化·制造