Что произойдет, если указать replicas: 2 в манифесте DaemonSet в Kubernetes?

«Что произойдет, если указать replicas: 2 в манифесте DaemonSet в Kubernetes?» — вопрос из категории Kubernetes, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Поле replicas в спецификации DaemonSet будет проигнорировано контроллером Kubernetes. DaemonSet предназначен для поддержания по одному экземпляру пода на каждом узле (или на каждом узле, соответствующем селектору), поэтому количество реплик определяется количеством подходящих узлов, а не этим полем.

Пример некорректного манифеста:

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: nginx-daemonset
spec:
  replicas: 2 # Это поле не имеет эффекта
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest

Как это работает на практике:

  1. Контроллер DaemonSet вычисляет список узлов, соответствующих его селектору (или всем узлам, если селектор не задан).
  2. Для каждого подходящего узла он создает и поддерживает ровно один под, используя заданный шаблон (spec.template).
  3. Если добавить новый узел с соответствующими метками, DaemonSet автоматически развернет на нем под.
  4. Для управления количеством подов DaemonSet нужно работать с узлами: добавлять/удалять узлы или настраивать селекторы узлов через nodeSelector или affinity в спецификации пода.