Ответ
Поэтапное внедрение (Rolling Deployment) — это стратегия развертывания, при которой новая версия приложения заменяет старую постепенно, экземпляр за экземпляром, что позволяет избежать полного простоя (downtime) и минимизировать риск.
Как это работает на практике:
- Новый образ приложения (например,
myapp:v2) собирается и помещается в реестр (Docker Registry). - Оркестратор (Kubernetes, Nomad) начинает заменять поды (pods) или ноды с версией
v1наv2по одному или небольшими группами. - После каждого шага выполняются проверки здоровья (health checks). Если новый экземпляр
v2не проходит проверку, развертывание приостанавливается или откатывается. - Процесс продолжается, пока все экземпляры не будут обновлены.
Пример манифеста Kubernetes, определяющего стратегию Rolling Update:
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp-deployment
spec:
replicas: 5
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 1 # Гарантирует, что во время обновления будет недоступно не более 1 пода
maxSurge: 1 # Позволяет создать не более 1 дополнительного пода сверх желаемого количества
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp
image: myregistry.com/myapp:v2.0.0
readinessProbe:
httpGet:
path: /health
port: 8080
Преимущества:
- Нулевой downtime: Приложение остается доступным для пользователей.
- Быстрый откат: В случае проблем можно остановить развертывание или откатиться, отменив лишь несколько последних шагов.
- Плавная нагрузка: Инфраструктура не испытывает резкого скачка нагрузки, связанного с одновременным запуском всех новых экземпляров.
Недостатки и сложности:
- Совместимость данных: На время развертывания одновременно работают две версии приложения. Это требует обеспечения обратной и прямой совместимости API и схем баз данных.
- Мониторинг: Необходим тщательный мониторинг метрик (латентность, ошибки, потребление ресурсов) для быстрого выявления проблем в новой версии.