If you want a single instance of a particular pod to be running on every node of your cluster (or a subset of your nodes), then you need to use a DaemonSet. When you schedule a DaemonSet to your cluster, an instance of your pod will be scheduled to every node, and when you add new nodes, the pod is scheduled there too. DaemonSet are very useful for providing ubiquitous services that need to be available everywhere on your cluster. You might use DaemonSet to provide services such as:
- An agent to ingest and ship logs, such as Fluentd or Logstash
- A monitoring agent, such as collectd, Prometheus Node Exporter, datadog, NewRelic or SysDig, and so on
- A daemon for a distributed storage system, such as Gluster or Ceph
- Components for an overlay network, such as Calico or Flannel
- Per node components, a virtualization tool, such as OpenStack
Before Kubernetes, these sorts of...