随笔 - 307  文章 - 0  评论 - 5  阅读 - 4264

DaemonSet资源特性

1. 每个节点运行一个实例

  • 详解:DaemonSet的核心功能之一就是确保集群中的每个工作节点都有一个Pod副本。这对于那些需要在每个节点上运行的服务(例如日志收集、监控代理等)至关重要。DaemonSet自动在每个节点上创建Pod,且每个Pod都是相同的应用或服务实例。
  • 例子:比如,在每个节点上运行fluentd来收集日志,或者运行node-exporter来监控节点的性能指标。

2. 节点生命周期绑定

  • 详解:DaemonSet与节点生命周期紧密绑定。当有新节点加入集群时,DaemonSet会自动在该节点上启动一个新的Pod。而当节点被删除或标记为不可调度时,DaemonSet会自动清理该节点上的Pod。
  • 自动调整:DaemonSet确保每个节点都运行一个Pod,这使得它特别适合于动态变化的环境。例如,当集群的规模变化(添加或删除节点)时,DaemonSet能够自动适应,而无需手动干预。
  • 场景:在一个节点池中,节点类型可能会有变化,比如从spot节点池切换到on-demand节点池,DaemonSet会确保每个节点池中都能正确运行相应的Pod。

3. 节点选择性部署

  • 详解:除了简单地确保Pod在每个节点上运行外,DaemonSet还提供了灵活的节点选择机制。通过使用NodeSelectorNodeAffinity等机制,用户可以指定Pod只能运行在符合特定标签或条件的节点上。
  • 常见场景
    • NodeSelector:例如,你只想在带有特定标签(如region=us-west)的节点上运行Pod。
    • NodeAffinity:比NodeSelector更灵活,支持复杂的表达式,允许Pod根据节点的硬件特性(例如,CPU架构、存储类型等)进行调度。
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: example-daemonset
spec:
  selector:
    matchLabels:
      name: example-daemon
  template:
    metadata:
      labels:
        name: example-daemon
    spec:
      nodeSelector:
        disktype: ssd
      containers:
      - name: example-container
        image: example-image

在这个例子中,Pod只会部署在带有disktype=ssd标签的节点上。

4. 更新策略灵活

  • 详解:DaemonSet提供了灵活的更新机制。在集群中运行基础服务时,平滑过渡是非常重要的。例如,更新一个节点上运行的监控代理时,如果不加以控制,可能会导致服务中断。DaemonSet允许通过滚动更新等策略逐个节点地更新Pod,确保服务的高可用性。
  • 更新策略类型
    • 滚动更新(Rolling Update):DaemonSet默认支持滚动更新,逐个节点地更新Pod,确保在更新过程中不会影响整个集群的服务。
    • 无缝更新(OnDemand Update):你也可以选择使用其他更新策略,适应不同的应用场景。
spec:
  updateStrategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 1

在这个例子中,maxUnavailable: 1表示每次最多只能有一个Pod不可用,确保更新过程中的可用性。

5. 系统服务和基础设施支持

  • 详解:DaemonSet最常用的场景是在每个节点上运行集群级别的基础服务或代理。例如,Kubernetes集群中的网络插件(如Calico、Flannel)、日志收集代理(如Fluentd、Logstash)、监控探针(如Prometheus Node Exporter)等,通常都会通过DaemonSet来进行管理。这些服务需要在每个节点上运行,以便收集所有节点的日志、监控指标或处理网络流量。
  • 常见应用
    • 日志收集:运行Fluentd或Logstash收集每个节点的日志,发送到集中式存储系统(如Elasticsearch)。
    • 监控代理:运行Prometheus的Node Exporter收集每个节点的CPU、内存、磁盘等性能指标。
    • 网络插件:如Calico、Weave等网络插件,确保网络功能在每个节点上都正常运行。

6. DaemonSet的挑战与注意事项

  • 资源消耗:虽然DaemonSet可以确保每个节点上都有Pod副本,但这种方式可能会对集群资源造成压力。尤其是当集群规模较大时,每个节点都需要运行Pod,可能会影响节点的性能或资源利用。
  • 故障恢复:如果DaemonSet中的Pod在某个节点失败,Kubernetes会尝试重新调度Pod到其他可用节点。然而,在某些情况下,可能会遇到节点资源不足的问题,需要管理员干预。

7. DaemonSet的删除与清理

  • 删除:删除DaemonSet时,Kubernetes会自动删除所有关联的Pod。你也可以手动删除集群中的DaemonSet对象,确保系统恢复到正常状态。
  • 注意:如果你使用的是Retain回收策略,PV和PVC的状态不会被自动清理,需要手动介入。

总结

DaemonSet是Kubernetes中非常重要的控制器对象,它确保集群中每个节点上都有一个Pod实例。它通常用于部署集群级别的系统服务和基础设施组件,确保这些服务能够在所有节点上高效运行。DaemonSet的灵活性体现在节点选择性部署、更新策略和集群资源的高效管理上,适用于那些需要集群每个节点参与的服务和应用。

posted on   Leo-Yide  阅读(11)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示