Commands
Kubernetes

kubectl rollout: Управление роллаутом деплоймента: статус, история, откат, ре

Управление роллаутом деплоймента: статус, история, откат, рестарт

Базовый синтаксис

Команда kubectl rollout — это твой основной инструмент для управления обновлениями (деплоями) ресурсов Kubernetes, таких как Deployment, DaemonSet и StatefulSet. Базовый сценарий — проверить статус текущего обновления:

kubectl rollout status deployment/my-app

Эта команда блокирует терминал и показывает прогресс обновления подами деплоймента my-app. Она завершится с кодом 0 (успех), когда все новые поды станут Ready, или с ошибкой, если роллаут не завершится за время таймаута (по умолчанию 5 минут).

Полезные флаги

--watch или -w: Непрерывно следи за статусом, пока не завершится. Полезно, когда нужно параллельно смотреть логи или метрики.

kubectl rollout status deployment/my-app -w

--revision=<N>: Покажи детали конкретной ревизии из истории. Незаменим для сравнения конфигураций перед откатом.

kubectl rollout history deployment/my-app --revision=5

--timeout=<ПЕРИОД>: Измени время ожидания завершения операции. Например, для долгих обновлений с большими образами.

kubectl rollout status deployment/my-app --timeout=10m

Типичные сценарии

Сценарий 1: Роллаут завис. Новые поды не переходят в состояние Ready. Сначала смотри статус, чтобы понять, на каком этапе проблема:

kubectl rollout status deployment/my-app

Затем проверь события деплоймента и логи проблемных подов, чтобы найти причину (часто — ошибка старта или пробы здоровья).

Сценарий 2: Срочный откат после деплоя с багом. Новое приложение падает по памяти (OOMKilled). Немедленный откат на стабильную предыдущую версию:

kubectl rollout undo deployment/my-app

Для отката на более раннюю, но не предыдущую, версию используй историю:

kubectl rollout history deployment/my-app
kubectl rollout undo deployment/my-app --to-revision=3

Частые ошибки

  1. Разрыв соединения при длительном --watch. Если сессия SSH оборвется, команда прервется, а ты не узнаешь итог. В критичных случаях используй timeout или запускай в screen/tmux.
  2. Откат без проверки истории (undo). Команда kubectl rollout undo по умолчанию откатывает на предыдущую ревизию. Если деплой делался несколько раз подряд, можно откатиться не на ту стабильную версию, которую ожидаешь. Всегда сверяйся с kubectl rollout history deployment/<имя> перед откатом.