Ответ
Контроллер в 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 (ЖЕЛАЕМОЕ СОСТОЯНИЕ).