Ответ
Deployment — это объект Kubernetes API, который предоставляет декларативный способ управления набором идентичных Pod'ов (репликами). Он описывает желаемое состояние приложения (например, образ контейнера и количество реплик), а контроллер Deployment автоматически приводит текущее состояние к желаемому.
Ключевые возможности:
- Развертывание и обновление: Поддерживает стратегии обновления без простоя: Rolling Update (по умолчанию), Recreate, а также позволяет реализовать Blue-Green или Canary развертывания через манипуляцию с лейблами и селекторами.
- Масштабирование: Простое изменение количества реплик (
kubectl scale deployment/nginx --replicas=5). - Self-healing: Автоматически пересоздает Pod'ы, если они завершаются с ошибкой или удаляются.
- Откат: Возможность откатиться к предыдущей стабильной версии (
kubectl rollout undo deployment/nginx).
Пример манифеста Deployment:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.25.3
ports:
- containerPort: 80
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"
Практическое использование: В нашем CI/CD пайплайне мы применяем Deployment для всех stateless-сервисов. Например, при пуше в ветку main собирается новый образ, его тег обновляется в манифесте, и выполняется kubectl apply. Deployment автоматически запускает rolling update, что обеспечивает нулевое время простоя для пользователей.