Короткий ответ
Обновление образа выполняется командой kubectl set image deployment/<name> <container>=<new-image> или изменением поля image в манифесте с последующим kubectl apply; Deployment создаёт новый ReplicaSet и постепенно переносит трафик с старых Pod на новые по стратегии RollingUpdate.
Как это работает подробнее
при изменении шаблона Pod Deployment генерирует новый ReplicaSet, затем поочерёдно увеличивает число реплик в новом ReplicaSet и уменьшает в старом, соблюдая параметры maxSurge и maxUnavailable, пока не произойдёт полный переход. На каждом шаге новые Pod должны пройти readiness probe, прежде чем старые будут удалены.
Пример кода
Команды и вывод
kubectl set image deployment/web web=myapp:2.0
kubectl rollout status deployment/webЧто использовать на практике
- Практика. прогресс обновления можно отслеживать командой
kubectl rollout status deployment/<name>, а историю версий —kubectl rollout history. Для безопасного обновления важно, чтобы readiness probe действительно отражала готовность приложения — иначе Kubernetes может посчитать недостаточно прогретый под "готовым" и начать направлять на него трафик раньше времени.
Подводные камни
- Риски. менять образ напрямую через
kubectl editбез понимания, что это создаёт новую ревизию и запускает rollout; не следить заkubectl rollout statusи считать деплой успешным сразу после выполнения команды, хотя новые Pod могут не подняться; забывать про readiness probe, из-за чего "успешный" rollout на деле отправляет трафик на не готовые к работе поды.