middle
Что такое Deployment и какие стратегии обновления существуют?
Deployment — основной объект для управления развёртыванием stateless-приложений в Kubernetes. Deployment управляет ReplicaSet’ами, которые, в свою очередь, управляют Pod’ами.
Возможности Deployment
- Декларативное обновление приложений
- Откат (rollback) к предыдущей версии
- Масштабирование (изменение количества реплик)
- Пауза и возобновление развёртывания
- Хранение истории ревизий
Стратегии обновления
| Стратегия | Описание | Простой | Когда использовать |
|---|---|---|---|
| RollingUpdate (по умолчанию) | Новые Pod’ы создаются, старые удаляются постепенно | Нет | В большинстве случаев |
| Recreate | Все старые Pod’ы удаляются, затем создаются новые | Да | Когда одновременная работа двух версий невозможна (например, миграции БД) |
Параметры RollingUpdate:
- maxSurge — сколько дополнительных Pod’ов можно создать сверх желаемого количества (по умолчанию 25%)
- maxUnavailable — сколько Pod’ов может быть недоступно одновременно (по умолчанию 25%)
Пример манифеста Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-java-app
labels:
app: my-java-app
spec:
replicas: 3
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
selector:
matchLabels:
app: my-java-app
template:
metadata:
labels:
app: my-java-app
spec:
containers:
- name: app
image: my-registry/my-java-app:1.0.0
ports:
- containerPort: 8080
Откат (Rollback)
Пример
# Посмотреть историю ревизий
kubectl rollout history deployment/my-java-app
# Откатить к предыдущей версии
kubectl rollout undo deployment/my-java-app
# Откатить к конкретной ревизии
kubectl rollout undo deployment/my-java-app --to-revision=2
# Проверить статус обновления
kubectl rollout status deployment/my-java-app
На собеседовании: нужно знать две стратегии (RollingUpdate и Recreate), параметры maxSurge/maxUnavailable и команды отката. Частая ошибка — не упомянуть, что
maxUnavailable: 0+maxSurge: 1обеспечивает zero-downtime деплой.