DaemonSet
是一种面向特定应用场景的Pod
控制器,尽管它也可以管理Pod
的多个副本,但它主要用于保证一个Node
上只运行一个Pod
的场景,如下图所示:
DaemonSet
可以确保一个Node
上最多只运行一个Pod
副本,进一步说,DaemonSet
可以选择特定类型的Node
来部署Pod
。此处,当选定类型的Node
加入集群时,该Node
会自动运行一个新的Pod
副本,并且当该Node
被删除时,相应的Pod
也会被删除,而不会在其他Node
上重建。
DaemonSet
可以确保每个工作节点上最多运行一个应用副本,这个应用副本类似于Linux操作系统中的daemon
进程,这也正是DaemonSet
名称的由来。
DaemonSet
通常用于管理那些执行系统级的应用,比如:
每个工作节点运行一个存储服务,供该工作节点上其他应用使用;
每个工作节点运行一个日志收集服务,用于收集该节点上的运行日志;
每个工作节点运行一个监控指标收集服务,用于提供该节点的监控信息;
我们先看一个简单的DaemonSet
配置:
apiVersion: apps/v1 kind: DaemonSet metadata: name: nginx-daemonset labels: app: nginx spec: selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.19.0
初步看,这份配置跟Deployment
基本类似,唯一一个显著的差异是DaemonSet
不需要指定副本数,因为它的副本数取决于工作节点数。
DaemonSet
配置中spec.selector
和spec.template
作用我们已在介绍Deployment
时介绍过,在此不再赘述。