Kubernetes theory
October 30, 2022

DaemonSet

Этот контроллер отвечает за размещение подов на каждой ноде кластера k8s. Ну или на те ноды, для которых выставлен нужный label.
Его удобно использовать для работы с логами на нодах кластера, мониторингом этих же нод, установки дополнительного ПО на ноды. Также довольно часто использется для создания подов-провизионеров для персистентных хранилищ.

Пример DaenonSet:

cat <<EOF | kubectl apply -f -
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: fluentd-elasticsearch
  namespace: kube-system
  labels:
    k8s-app: fluentd-logging
spec:
  selector:
    matchLabels:
      name: fluentd-elasticsearch
  template:
    metadata:
      labels:
        name: fluentd-elasticsearch
    spec:
      tolerations:
      # these tolerations are to have the daemonset runnable on control plane nodes
      # remove them if your control plane nodes should not run pods
      - key: node-role.kubernetes.io/control-plane
        operator: Exists
        effect: NoSchedule
      - key: node-role.kubernetes.io/master
        operator: Exists
        effect: NoSchedule
      containers:
      - name: fluentd-elasticsearch
        image: quay.io/fluentd_elasticsearch/fluentd:v2.5.2
        resources:
          limits:
            memory: 200Mi
          requests:
            cpu: 100m
            memory: 200Mi
        volumeMounts:
        - name: varlog
          mountPath: /var/log
      terminationGracePeriodSeconds: 30
      volumes:
      - name: varlog
        hostPath:
          path: /var/log
EOF
kubectl get ds -A
NAMESPACE     NAME                             DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR                                                                        AGE
kube-system   fluentd-elasticsearch            1         1         1       1            1           <none>                                                                               43m

Полезные ссылки.

https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/