Ответ
Kubernetes инициирует rolling update (постепенное обновление). Это обеспечивает обновление без простоя (zero-downtime).
Процесс:
- Создается новый ReplicaSet с обновленным образом, указанным в Pod template Deployment'а.
- Новые Pod'ы из нового ReplicaSet создаются постепенно, а старые Pod'ы из старого ReplicaSet удаляются.
- Скорость обновления контролируется стратегией
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