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