K8s DaemonSet的介绍

embedded/2024/12/28 11:51:10/

1. 什么是 DaemonSet?

DaemonSet 是 Kubernetes 中的一种控制器,用于确保每个(或某些指定的)节点上运行一个 Pod 副本。它是为部署守护进程设计的,例如需要在每个节点上运行的任务或工具。

  • 特点
    • Pod 会随着节点的加入或移除而动态创建或销毁。
    • 确保在集群中每个符合条件的节点上都有一个 Pod。
    • 可用来运行与节点级别功能相关的任务。

2. DaemonSet 的常见使用场景

  1. 日志收集

    • 部署日志收集代理,例如 Fluentd 或 Filebeat,在每个节点上收集日志并发送到中央存储或日志系统(如 Elasticsearch)。
  2. 监控代理

    • 在每个节点上运行监控代理,例如 Prometheus Node Exporter 或 Datadog Agent,收集节点的性能指标和状态信息。
  3. 网络组件

    • 运行网络插件或代理,例如 CNI 插件(如 Calico、Flannel)或者 kube-proxy。
  4. 节点管理

    • 部署节点的系统级别管理工具,如磁盘清理工具、节点健康检查器等。
  5. 安全代理

    • 在每个节点上部署安全组件,例如防火墙代理或入侵检测系统(IDS)。
  6. 存储管理

    • 用于在节点上运行与存储相关的代理,如 Ceph、GlusterFS 客户端,或其他存储卷管理工具。

3. 配置 DaemonSet 时的调度策略

在部署 DaemonSet 时,可以配置节点的**亲密性(Affinity)排斥性(Toleration)**属性来控制 Pod 的调度行为。

3.1 节点选择器(Node Selector)
  • 通过 nodeSelector 指定 Pod 只能调度到带有特定标签的节点上。
  • 示例
spec:template:spec:nodeSelector:disktype: ssd
3.2 节点亲和性(Node Affinity)
  • 更灵活的节点调度方式,分为硬性规则requiredDuringSchedulingIgnoredDuringExecution)和软性规则preferredDuringSchedulingIgnoredDuringExecution)。
  • 示例
spec:template:spec:affinity:nodeAffinity:requiredDuringSchedulingIgnoredDuringExecution:nodeSelectorTerms:- matchExpressions:- key: disktypeoperator: Invalues:- ssdpreferredDuringSchedulingIgnoredDuringExecution:- weight: 1preference:matchExpressions:- key: regionoperator: Invalues:- us-west
3.3 污点容忍(Tolerations)
  • 配置 Pod 容忍节点的污点(Taints),允许 Pod 调度到被标记为“不接受常规工作负载”的节点上。
  • 示例
spec:template:spec:tolerations:- key: "dedicated"operator: "Equal"value: "special"effect: "NoSchedule"
3.4 Pod 亲和性和反亲和性(Pod Affinity/Anti-Affinity)
  • Pod Affinity:指定 Pod 调度到与其他特定 Pod 相邻的节点上。
  • Pod Anti-Affinity:指定 Pod 避免调度到与其他特定 Pod 相邻的节点上。
  • 示例
spec:template:spec:affinity:podAffinity:requiredDuringSchedulingIgnoredDuringExecution:- labelSelector:matchExpressions:- key: appoperator: Invalues:- security-agenttopologyKey: "kubernetes.io/hostname"podAntiAffinity:preferredDuringSchedulingIgnoredDuringExecution:- weight: 1podAffinityTerm:labelSelector:matchExpressions:- key: appoperator: Invalues:- loggertopologyKey: "kubernetes.io/hostname"

4. DaemonSet 的注意事项

  1. 更新策略

    • 默认使用 RollingUpdate 策略逐步更新 DaemonSet 中的 Pod。
    • 如果需要立即替换所有 Pod,可以选择 OnDelete 策略,手动删除旧 Pod。
  2. 节点的变化

    • 如果新增节点,DaemonSet 会自动在新节点上创建 Pod。
    • 如果节点被删除,DaemonSet 对应的 Pod 也会被移除。
  3. 与其他控制器的对比

    • 与 Deployment 不同,DaemonSet 不支持副本数的配置,因为每个符合条件的节点上只能运行一个 Pod。
  4. 性能开销

    • 注意 DaemonSet 容器对每个节点资源的消耗,尤其是在大型集群中部署时。

5. DaemonSet 示例

以下是一个典型的 DaemonSet 配置示例,用于在所有节点上运行一个日志收集器:

apiVersion: apps/v1
kind: DaemonSet
metadata:name: log-collectorlabels:app: log-collector
spec:selector:matchLabels:app: log-collectortemplate:metadata:labels:app: log-collectorspec:containers:- name: fluentdimage: fluent/fluentd:latestresources:limits:memory: "200Mi"cpu: "500m"volumeMounts:- name: varlogmountPath: /var/logvolumes:- name: varloghostPath:path: /var/logupdateStrategy:type: RollingUpdate

6. 总结

  • DaemonSet 适用于运行每个节点所需的守护进程,如日志收集、监控、网络插件等。
  • 可以通过 nodeSelectoraffinitytolerations 配置特定节点的调度策略。
  • 在部署之前,充分考虑每个 Pod 的资源消耗及调度规则,确保资源合理分配。

http://www.ppmy.cn/embedded/149431.html

相关文章

数据结构与算法Python版 平衡二叉查找树AVL

文章目录 一、平衡二叉查找树二、AVL树测试三、AVL树-算法分析 一、平衡二叉查找树 平衡二叉查找树-AVL树的定义 AVL树:在key插入时一直保持平衡的二叉查找树。可以利用AVL树实现抽象数据类型映射Map。与二叉查找树相比,AVL树基本上与二叉查找树的实现…

《异构计算:多元算力聚变,点燃高性能计算新引擎 – CPU、GPU与FPGA算力融合》

数字化浪潮澎湃之际,算力需求呈指数级攀升态势,数据中心亦随之踏上向计算中心深度蜕变之旅,算力作为新兴生产力要素,正重塑产业格局。多元数据形态与丰富场景交相辉映,强力驱动异构计算步入高速发展快车道。 置身 AI 与…

“智能控制的新纪元:2025年机器学习与控制工程国际会议引领变革

ICMLCE 2025 | 机器学习与控制工程国际会议 ✨宝子们,今天要为大家介绍的是一个在机器学习和控制工程领域备受瞩目的国际学术盛会——2025年机器学习与控制工程国际会议(ICMLCE 2025)。本次大会将在美丽的大理举行,旨在汇聚全球顶…

力扣矩阵-算法模版总结

lc-73.矩阵置零-(时隔14天)-12.27 思路:(23min22s) 1.直接遍历遇0将行列设0肯定不行,会影响后续判断,题目又要求原地算法,那么进一步考虑是否可以将元素为0,其行列需要设为0的位置给存储下来,最后再遍历根据…

Git快速查阅

根据平时使用git的流程来编写。 git init 建立当前目录git仓库 git add . 将当前目录所有文件加入git暂存区,让git进行管理 git status 查看当前暂存区内容 git commit -m commit 描述 将当前暂存区中的内容进行提交,保存为一个commit。 git log 查…

嵌入式硬件面试题

1、请问什么是通孔、盲孔和埋孔?孔径多大可以做机械孔,孔径多小必须做激光孔?请问激光微型孔可以直接打在元件焊盘上吗,为什么? 通孔是贯穿整个PCB的过孔,盲孔是从PCB表层连接到内层的过孔,埋孔…

Matlab个性化绘图第7期—带标记面的三维多组折线图

上一期文章分享了Matlab带标记面的三维折线图: 进一步,再来分享一下带标记面的三维多组折线图。 由于Matlab未收录带标记面的三维多组折线图的绘图函数,因此需要大家自行解决。 本文使用自制的addPlane小工具进行带标记面的三维多组折线图的…

快速排序算法

一、快速排序简介 **快速排序(Quick Sort)**是一种基于分治法的高效排序算法,由C. A. R. Hoare于1960年提出。它的平均时间复杂度为O(n log n),在实际应用中,由于其优秀的性能和较高的效率,被认为是排序算…