В чем разница между Deployments и DaemonSets в Kubernetes

«В чем разница между Deployments и DaemonSets в Kubernetes» — вопрос из категории Kubernetes, который задают на 26% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Deployment и DaemonSet — это контроллеры для управления подами, но с разной логикой репликации.

Критерий Deployment DaemonSet
Цель Запуск реплицированного stateless-приложения (например, веб-сервер). Запуск системного демона на каждом (или группе) узлов (например, агент для сбора логов).
Логика размещения Поды планируются на доступные узлы исходя из ресурсов и правил (affinity/anti-affinity). Гарантирует, что копия пода будет работать на каждом узле, соответствующем селектору.
Использование Основная рабочая нагрузка приложений. Фоновые сервисы инфраструктуры: сбор логов (Fluentd), мониторинг (Node Exporter), сетевая политика (Calico).

Пример DaemonSet для развертывания агента мониторинга на каждом узле:

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: node-exporter
spec:
  selector:
    matchLabels:
      app: node-exporter
  template:
    metadata:
      labels:
        app: node-exporter
    spec:
      hostNetwork: true
      hostPID: true
      containers:
      - name: exporter
        image: prom/node-exporter:latest
        ports:
        - containerPort: 9100