Ответ
Deployment — это основной объект Kubernetes для декларативного управления жизненным циклом stateless-приложений. Он абстрагирует ручное создание Pod'ов и ReplicaSet'ов, предоставляя мощные механизмы для развертывания и обновления.
Ключевые возможности, которые он дает:
- Бесперебойные обновления (Rolling Update): Позволяет обновить версию приложения без простоя. Kubernetes постепенно создает новые Pod'ы с новой версией, дожидается их готовности (readiness probe) и только затем удаляет старые. Это контролируется стратегией
strategy.type: RollingUpdate. - Мгновенный откат (Rollback): Если новая версия содержит ошибку, можно одной командой
kubectl rollout undo deployment/<name>откатиться к предыдущей стабильной ревизии. История изменений хранится вkubectl rollout history. - Гарантированная доступность и масштабирование: Deployment постоянно поддерживает заданное количество реплик Pod'ов (
spec.replicas). Если Pod падает или узел выходит из строя, Deployment немедленно создает новый Pod на другом узле. Масштабирование выполняется одной командойkubectl scale. - Декларативная конфигурация: Вы описываете желаемое состояние (образ контейнера, количество реплик, ресурсы) в YAML-манифесте, а Kubernetes самостоятельно приводит реальное состояние к этому виду.
Пример манифеста Deployment:
apiVersion: apps/v1
kind: Deployment
metadata:
name: frontend
spec:
replicas: 3
selector:
matchLabels:
app: frontend
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 1 # Максимум 1 под может быть недоступен во время обновления
maxSurge: 1 # Максимум на 1 под может быть больше желаемого количества
template:
metadata:
labels:
app: frontend
spec:
containers:
- name: nginx
image: nginx:1.21-alpine
ports:
- containerPort: 80
readinessProbe: # Проверка готовности для rolling update
httpGet:
path: /
port: 80
initialDelaySeconds: 5
periodSeconds: 5
Deployment создает и управляет объектом ReplicaSet, который, в свою очередь, напрямую контролирует Pod'ы. Это позволяет Deployment'у хранить историю ревизий для откатов.