Что такое Rolling Update в Kubernetes?

«Что такое Rolling Update в Kubernetes?» — вопрос из категории Kubernetes, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Rolling Update — это стратегия обновления приложений, при которой новые версии подов (Pods) постепенно заменяют старые, обеспечивая нулевое время простоя (zero-downtime) и возможность отката.

Как это работает на примере Deployment:

  1. Создаётся новый ReplicaSet с обновлённым шаблоном пода (например, новым образом контейнера).
  2. Kubernetes начинает уменьшать количество реплик в старом ReplicaSet и увеличивать в новом — по одной или группами.
  3. На каждом шаге проверяется, что новые пода перешли в состояние Ready.
  4. Процесс продолжается, пока все реплики не будут обновлены.

Конфигурация в 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 для критичных сервисов, чтобы минимизировать риск, и с более агрессивными настройками для фоновых задач, чтобы ускорить деплой.