DaemonSet用于再集群中的全部节点上同时运行一份指定的pod资源副本,后续新加入的工作节点也会自动创建一个相关的pod对象,当从集群中移除节点时,此类pod对象也将被自动回收而无须重建。也可以使用节点选择器及节点标签指定仅在部分具有特定特征的节点上运行指定的pod对象。通常运行那些执行系统级操作任务的应用,具体如下:
1、运行集群存储的守护进程,如在各个节点上运行glusterfs或ceph
2、在各个节点上运行日志收集守护进程,如fluentd和logstash
3、在各个节点上运行监控系统的代理守护进程,如Prometheus Node Exporter、collectd、Datadog agent、New Relic agent或Ganlia gmond等
一、创建DaemonSet资源对象
spec字段中嵌套使用的字段同样主要包含pod控制器资源支持的selector、template和minReadySeconds,并且功能和用法基本相同,但不支持使用replicas。
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.linux.io:6379 - name: LOG_LEVEL value: info
通过清单文件创建DaemonSet资源的命令:kubectl apply -f filebeat.yaml
二、更新DaemonSet对象
DaemonSet同样支持更新机制,相关配置定义在spec.updateStrategy嵌套字段中。目前,支持RollingUpdate(滚动更新)和OnDelete(删除时更新)两种策略,滚动更新为默认策略,工作逻辑类似于deploy,不过仅支持使用maxUnavailable属性定义最大不可用Pod资源副本数,默认为1,而删除时更新的方式则是在删除相应节点的pod资源后重建并更新为新版本。默认的滚动更新策略是一次删除一个工作节点上的pod资源,待其新版本pod资源重建完成后再开始操作另一个工作节点上的pod资源。也可以使用minReadySeconds字段控制滚动更新节奏,必要时可以执行暂停和继续操作。