DaemonSet控制器

在所有节点或指定的节点上运行单一Pod资源副本。当集群中节点发生变化时自动进行增加或者回收。通常其应用场景如下:

  • 运行集群存储的守护进程如在每个节点上运行glusterd或ceph
  • 在每个节点上运行日志收集守护进程如fluentd或logstash。
  • 在每个节点运行监控系统的代理守护进程。

只有必须将Pod对象运行于固定的几个节点,并且需要先于其他Pod启动时才有必要使用DaemonSet控制器,否则应该使用Deployment控制器。

创建DaemonSet资源对象

创建方式和deployment控制器基本相同。不过DaemonSet没有replicas字段,它是以节点数量控制Pod资源数量。下面是一个示例:

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: filebeat-ds
  labels:
    app: filebeat
  spec:
    selector:
      matchLabels:
        app: filebeat
    template:
      metadata:
        labels:
          app: filebeat
        name: filebeat
      spec:
        containers:
        - name: filebeat
          image: ikubernetes/filebeat:5.6.5-alpine
          env:
          - name: REDIS_HOST
            value: db.ilinux.io:6379
          - name: LOG_LEVEL
            value: info

其创建方式和其他资源并无太大区别。如需要控制其运行的节点位置可以使用nodeSelector字段。

更新DaemonSet控制器对象

支持RollingUpdate和OnDelete两种方式,第一种即滚动更新,其工作逻辑和deployment控制器的滚动更新基本相同。第二种为删除时更新。区别在于第一个是先创建再删除,第二个是先删除再创建。具体工作逻辑和更新Deployment时类似。但其不支持maxSurge参数。


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!