Какие контроллеры Kubernetes используются для управления жизненным циклом подов (Pods)?

Ответ

Жизненным циклом подов (Pods) в Kubernetes управляют рабочие нагрузки (Workloads), которые представлены контроллерами. Они реализуют декларативный подход: вы описываете желаемое состояние системы (например, «должно быть запущено 3 экземпляра моего приложения»), а контроллер приводит систему в это состояние и поддерживает его.

Основные контроллеры для управления подами:

  1. Deployment

    • Назначение: Основной контроллер для stateless-приложений (веб-серверы, API-сервисы).
    • Функции: Обеспечивает декларативное обновление подов (Rolling Update), масштабирование (увеличение/уменьшение количества реплик) и возможность отката к предыдущей версии.
  2. StatefulSet

    • Назначение: Для stateful-приложений, которым важна стабильность и порядок (например, базы данных, брокеры сообщений).
    • Функции: Гарантирует стабильные сетевые идентификаторы (например, pod-0, pod-1), порядок развертывания и масштабирования, а также уникальное и постоянное хранилище (Persistent Volumes) для каждого пода.
  3. DaemonSet

    • Назначение: Обеспечивает запуск одного экземпляра пода на каждом (или на выбранных) узле кластера.
    • Примеры использования: Сборщики логов (Fluentd), агенты мониторинга (Prometheus Node Exporter), сетевые плагины.
  4. Job / CronJob

    • Job: Создает один или несколько подов и гарантирует, что заданное их количество успешно завершит свою работу. Используется для разовых задач (миграция БД, обработка данных).
    • CronJob: Управляет объектами Job, запуская их по расписанию (как в cron).

Пример манифеста для Deployment:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3 # Желаемое состояние: 3 пода
  selector:
    matchLabels:
      app: nginx
  template: # Шаблон для создания подов
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.21.6
        ports:
        - containerPort: 80