Что произойдет в Kubernetes при обновлении образа (image) в Deployment?

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

Ответ

Kubernetes инициирует rolling update (постепенное обновление). Это обеспечивает обновление без простоя (zero-downtime).

Процесс:

  1. Создается новый ReplicaSet с обновленным образом, указанным в Pod template Deployment'а.
  2. Новые Pod'ы из нового ReplicaSet создаются постепенно, а старые Pod'ы из старого ReplicaSet удаляются.
  3. Скорость обновления контролируется стратегией RollingUpdate и параметрами maxSurge (сколько дополнительных Pod'ов можно создать сверх желаемого количества) и maxUnavailable (сколько Pod'ов может быть недоступно во время обновления).

Пример команды для обновления:

kubectl set image deployment/my-app app-container=myregistry/app:v2.0

Важные нюансы:

  • Если используется тег :latest или тот же тег с новым контентом, Kubernetes по умолчанию не перезапустит Pod'ы, так как образ в Pod template не изменился. Для принудительного перезапуска используется:
    kubectl rollout restart deployment/my-app
  • Процесс можно отслеживать и откатывать:
    kubectl rollout status deployment/my-app
    kubectl rollout undo deployment/my-app