Ответ
Жизненным циклом подов (Pods) в Kubernetes управляют рабочие нагрузки (Workloads), которые представлены контроллерами. Они реализуют декларативный подход: вы описываете желаемое состояние системы (например, «должно быть запущено 3 экземпляра моего приложения»), а контроллер приводит систему в это состояние и поддерживает его.
Основные контроллеры для управления подами:
Deployment
- Назначение: Основной контроллер для stateless-приложений (веб-серверы, API-сервисы).
- Функции: Обеспечивает декларативное обновление подов (Rolling Update), масштабирование (увеличение/уменьшение количества реплик) и возможность отката к предыдущей версии.
StatefulSet
- Назначение: Для stateful-приложений, которым важна стабильность и порядок (например, базы данных, брокеры сообщений).
- Функции: Гарантирует стабильные сетевые идентификаторы (например,
pod-0
,pod-1
), порядок развертывания и масштабирования, а также уникальное и постоянное хранилище (Persistent Volumes) для каждого пода.
DaemonSet
- Назначение: Обеспечивает запуск одного экземпляра пода на каждом (или на выбранных) узле кластера.
- Примеры использования: Сборщики логов (Fluentd), агенты мониторинга (Prometheus Node Exporter), сетевые плагины.
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