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.selectorspec.template作用我们已在介绍Deployment时介绍过,在此不再赘述。

最后编辑: kuteng  文档更新时间: 2021-09-18 14:58   作者:kuteng