目 录CONTENT

文章目录

k8s | 深入理解 DaemonSet

如风
2023-07-20 / 0 评论 / 0 点赞 / 27 阅读 / 740 字

k8s | 深入理解 DaemonSet

DaemonSet是一种控制器,用于在集群内运行一组Pod,并确保每个节点上都有一个Pod副本在运行。常用来部署一些集群的日志、监控或者其他系统管理应用。典型的应用包括:

  • 日志收集,比如 fluentd,Filebeat等,收集所有节点的日志数据
  • 系统监控,比如 Prometheus Node Exporter,collectd,cAdvisor 等,集所有节点的运行状态数据
  • 系统程序,比如 kube-proxy, kube-dns, glusterd, ceph 等

DaemonSet适用于需要在每个节点上运行一组Pod的场景,可以使集群中的服务更加健壮和可靠。

工作原理

DaemonSet的工作原理是监听节点的变化,通过监听节点的变化,当新的节点加入集群时,DaemonSet会自动在该节点上创建一个Pod副本。而当节点从集群中删除时,DaemonSet会自动删除该节点上的Pod副本。这样,DaemonSet保证了集群中每个节点都会运行指定的Pod。有且只有一个pod

  1. 控制器监视节点的状态:DaemonSet控制器会监视集群中的节点状态,一旦有新的节点加入集群,或者节点状态发生变化(例如节点重新启动),控制器就会触发一些操作。

  2. 创建Pod:当控制器检测到新节点时,它会创建一个新的Pod,并将其调度到该节点上。控制器还会确保每个节点上只运行一个Pod实例。

  3. 更新Pod:如果DaemonSet的配置发生变化,控制器会自动更新每个节点上的Pod实例。

  4. 删除Pod:如果节点发生故障或者被删除,控制器会自动删除节点上的Pod实例。

  5. 扩容和缩容:DaemonSet还支持扩容和缩容,可以根据需要增加或减少Pod的数量。

常用特性

  • 只在特定的节点上运行Pod:可以使用NodeSelector或者NodeAffinity来限制DaemonSet的Pod只在特定的节点上运行。

  • 根据节点的标签更新Pod:如果在集群中添加或删除了节点,Kubernetes会通过DaemonSet自动添加或删除Pod。同时,也可以通过添加或移除节点标签来更新DaemonSet中的Pod。

  • 确保每个节点只运行一个Pod:可以使用PodAntiAffinity来确保每个节点上只有一个Pod在运行。

指定 Node 节点

  • nodeSelector:只调度到匹配指定 label 的 Node 上
  • nodeAffinity:功能更丰富的 Node 选择器,比如支持集合操作
  • podAffinity:调度到满足条件的 Pod 所在的 Node 上

参考链接

0

评论区