話說 ReplicaSet 是實現服務 AutoScale or Loadbalance 的方式,
但是如需在 K8s node 叢集環境下確保特定 pod 在每個 node 上皆能夠實現相同服務,
DaemonSet 反而是最佳選擇。
典型的應用服務包括:
- 叢集儲存,比如 glusterd、ceph
- 日誌收集,比如 fluentd、logstash
- 系统監控,比如 Prometheus Node Exporter、collectd、New Relic agent、Ganglia gmond
- 系统程序,比如 kube-proxy、kube-dns
DaemonSet 特性
- DaemonSet 會確保每個 node 上運行同一個 pod 服務~ 除非透過 nodeSelector。
- 例如系統常駐性監控服務,是非常適合透過 DaemonSet 實現副本需求。
- DaemonSet 如同 ReplicaSet 皆透過 Reconciliation Loops 可以確保目前 Status 是否符合預期 Spec。
- 當 K8s 新增 node 時,DaemonSet 會於 new node 上新增 pod 副本。
非 DaemonSet 特性
如果需要為了服務大量客戶流量,需要建立大量 pod 副本,
並且無需考量與 node 耦合性問題, 透過 ReplicaSet 進行 service scale 是正確的選擇。
參考書籍\文章出處:
Kubernetes 建置與執行 書中 P.105~114 內容
https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/