Что такое контроллер в Kubernetes?

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

Ответ

Контроллер в Kubernetes — это основной механизм управления состоянием (reconciliation loop). Он постоянно сравнивает желаемое состояние (desired state), описанное в манифестах (например, spec.replicas: 3), с текущим состоянием (current state) кластера. При обнаружении расхождений контроллер предпринимает действия, чтобы привести текущее состояние к желаемому.

Основные встроенные контроллеры и их назначение:

  • Deployment: Управляет жизненным циклом stateless-приложений. Отвечает за развертывание, обновление (rolling update), откат и масштабирование набора Pod'ов (ReplicaSet).
  • StatefulSet: Для stateful-приложений (БД, очереди), где важны устойчивые идентификаторы Pod'ов (pod-0, pod-1), стабильные сетевые имена и постоянное хранилище.
  • DaemonSet: Гарантирует, что Pod будет работать на каждом (или на выбранных) узле(Node) кластера. Используется для системных сервисов (логирование, мониторинг, сетевые плагины).
  • Job/CronJob: Запускает Pod'ы для выполнения разовых задач (Job) или по расписанию (CronJob).

Пример Deployment-контроллера в действии:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3 # ЖЕЛАЕМОЕ СОСТОЯНИЕ: 3 копии Pod
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.25
        ports:
        - containerPort: 80

Если один из трех Pod'ов падает (ТЕКУЩЕЕ СОСТОЯНИЕ: 2 Pod), контроллер Deployment создаст новый Pod, чтобы восстановить количество до 3 (ЖЕЛАЕМОЕ СОСТОЯНИЕ).