Gymterview
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 деплой.