守护进程(DaemonSet)一种控制器类型,用于确保集群中的每个节点都运行一个副本(Pod)的特定实例。DaemonSet通常用于在集群的每个节点上运行一些系统级别的任务,如日志收集、监控、网络代理等。
特点与用途
每节点一个副本:
DaemonSet 保证在每个节点上都会运行一个 Pod 的副本。当您添加或移除节点时,DaemonSet 会自动调整以确保在每个节点上都有所需数量的 Pod 实例。系统级别任务:
DaemonSet 通常用于运行系统级别的任务,这些任务需要在每个节点上执行,而不考虑节点的数量。例如,可以使用 DaemonSet 在每个节点上运行日志收集代理、监控代理或网络代理。节点自动发现:
DaemonSet 能够自动检测和响应节点的加入和退出。如果您添加新的节点到集群中,DaemonSet 会在新节点上启动 Pod 的副本。如果节点被移除,相应的 Pod 实例也会被终止。无状态和有状态应用:
DaemonSet 可以用于无状态应用程序,例如日志代理,也可以用于有状态应用程序,例如分布式存储的副本。NodeAffinity:
使用 NodeAffinity 可以通过 DaemonSet 在特定类型的节点上运行 Pod 实例。这可以通过指定节点标签和 NodeAffinity 规则来实现。Pod 调度和更新:
DaemonSet 具有调度和滚动更新的功能,可以确保 Pod 在节点上均匀分布,并允许通过更新 DaemonSet 来更新正在运行的 Pod 实例。
原理
择器和标签:
DaemonSet 使用标签选择器来确定在哪些节点上运行 Pod。在 DaemonSet 的配置中,通过 selector 指定了一个标签选择器,以匹配要在其上运行 Pod 的节点。创建 Pod 模板:
在 DaemonSet 配置中定义了一个 Pod 模板,该模板描述了要在每个节点上运行的 Pod 的规范。这包括容器镜像、环境变量、卷挂载等信息。节点检测:
控制器会定期检测集群中的节点,并检查哪些节点上尚未运行与 DaemonSet 匹配的 Pod。如果发现新的节点或者某个节点上不存在 Pod,控制器会在该节点上创建一个新的 Pod 实例,使用预定义的 Pod 模板。自动调度:
控制器使用调度器(Scheduler)来确定将 Pod 调度到哪个节点上。节点的选择可以受到用户定义的 NodeAffinity 约束的影响,确保 Pod 运行在具有特定标签的节点上。自动伸缩和自动更新:
DaemonSet 具有自动伸缩的特性,可以根据节点的变化动态调整 Pod 的数量,确保在每个节点上都有一个 Pod 的副本。此外,可以通过更新 DaemonSet 的配置来实现滚动更新,以更新正在运行的 Pod 实例。节点的动态加入和退出:
如果集群中新增了节点,DaemonSet 会在新节点上启动 Pod 的副本,以确保在新节点上运行了符合标签选择器的 Pod。反之,如果节点从集群中移除,DaemonSet 会自动终止在该节点上运行的 Pod。Pod 的失败和替换:
如果某个节点上的 Pod 失败或终止,DaemonSet 会负责在同一节点上启动新的 Pod 实例,以保持指定数量的 Pod 在运行状态。
最后编辑:吴升斌 更新时间:2025-05-28 18:59