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字段控制滾動更新節奏,必要時可以執行暫停和繼續操作。
