Adding to @Rohit's answer, I'll explain about the daemonSet. DaemonSet ensures that all nodes are running a copy of the pods. If new nodes are added to the cluster, pods get equally distributed amongst the newly added nodes. This is taken care of by the DaemonSet.
DeamonSet yaml look something like this:
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: daemonset
namespace: kube-system
labels:
k8s-app: fluentd-logging
spec:
selector:
matchLabels:
name: daemonset
template:
metadata:
labels:
name: daemonset
spec:
tolerations:
- key: node-role.kubernetes.io/master
effect: NoSchedule
containers:
- name: daemonset
image: k8s.gcr.io/fluentd-elasticsearch:1.20
resources:
limits:
memory: 200Mi
requests:
cpu: 100m
memory: 200Mi
volumeMounts:
- name: varlog
mountPath: /var/log
- name: varlibdockercontainers
mountPath: /var/lib/docker/containers
readOnly: true
terminationGracePeriodSeconds: 30
volumes:
- name: varlog
hostPath:
path: /var/log
- name: varlibdockercontainers
hostPath:
path: /var/lib/docker/containers