Ответ
Rolling Update — это стратегия обновления приложений, при которой новые версии подов (Pods) постепенно заменяют старые, обеспечивая нулевое время простоя (zero-downtime) и возможность отката.
Как это работает на примере Deployment:
- Создаётся новый ReplicaSet с обновлённым шаблоном пода (например, новым образом контейнера).
- Kubernetes начинает уменьшать количество реплик в старом ReplicaSet и увеличивать в новом — по одной или группами.
- На каждом шаге проверяется, что новые пода перешли в состояние
Ready. - Процесс продолжается, пока все реплики не будут обновлены.
Конфигурация в Deployment:
apiVersion: apps/v1
kind: Deployment
metadata:
name: frontend
spec:
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 25% # Максимальное количество подов, которые могут быть недоступны во время обновления.
maxSurge: 1 # Максимальное количество подов, которые могут быть созданы сверх желаемого количества реплик.
replicas: 4
selector:
matchLabels:
app: frontend
template:
# ... шаблон нового пода ...
Преимущества:
- Отсутствие простоя: Приложение остаётся доступным на протяжении всего процесса.
- Постепенный rollout: Позволяет выявить проблемы на раннем этапе, обновив лишь часть трафика.
- Автоматический откат: Если проверки готовности (readiness probes) новых подов не проходят, обновление останавливается. В Kubernetes можно настроить автоматический откат при сбое.
Практическое применение: Мы использовали Rolling Update с maxUnavailable: 1 и maxSurge: 0 для критичных сервисов, чтобы минимизировать риск, и с более агрессивными настройками для фоновых задач, чтобы ускорить деплой.