Перезапустить приложение в кластере

rollout restart вместо удаления подов — с сохранением стратегии обновления и возможностью откатиться

kubectl -n khorost rollout restart deploy/khorost-tech-prod-khorost-tech-site
kubectl -n khorost rollout status deploy/khorost-tech-prod-khorost-tech-site
kubectl delete pod -n khorost-space-beta -l app.kubernetes.io/name=vega-0
kubectl -n khorost rollout undo deploy/khorost-tech-prod-khorost-tech-site
kubectl -n khorost rollout history deploy/khorost-tech-prod-khorost-tech-site

rollout restart проставляет деплою аннотацию с текущим временем — под меняется, поэтому контроллер пересоздаёт поды по стратегии обновления: с учётом maxUnavailable, готовности новых подов и PDB. Приложение при этом не пропадает.

delete pod -l убивает всё разом. Для беты или для пода, зависшего в непонятном состоянии, это нормально и быстрее. Для прода — просадка: новые поды поднимаются одновременно и одновременно же прогреваются.

Частая причина, по которой вообще хочется перезапустить, — обновился ConfigMap или Secret, а приложение читает их при старте. Смонтированные файлы обновляются сами (с задержкой), но переменные окружения из envFrom — нет: они фиксируются в момент создания пода, и без перезапуска приложение продолжит работать со старыми значениями.

rollout status завершится с ненулевым кодом, если раскатка не сошлась, — это то, что нужно в скрипте: без него restart отработает мгновенно и «успешно», ничего не сказав о том, поднялись ли поды.

rollout undo вернёт предыдущую ревизию, но только пока она есть в истории — глубина ограничена revisionHistoryLimit, по умолчанию 10.