helm upgrade: Обновление релиза: атомарный откат при ошибке, сброс values
Обновление релиза: атомарный откат при ошибке, сброс values
Базовый синтаксис
Команда helm upgrade применяет изменения к уже развернутому в кластере релизу. Если релиза нет, она может его создать. Вот минимальный рабочий пример:
helm upgrade my-release bitnami/nginx -n production
Разберем по частям:
my-release— имя релиза, которое вы дали при первой установке.bitnami/nginx— имя чарта. Это может быть путь к локальному чарту (./my-chart) или имя чарта из репозитория.-n production— пространство имен Kubernetes, где находится релиз. Если не указать, будет использовано пространство из текущего контекста (kubectl config view --minify).
Эта команда возьмет текущие values релиза, применит к ним новую версию чарта и обновит ресурсы в кластере.
Полезные флаги
--install
Создает релиз, если он не существует. Избавляет от необходимости сначала делать helm install. Использую всегда.
helm upgrade --install my-app ./chart -f values/prod.yaml
--atomic
Если обновление не прошло успешно (например, Pod не перешел в состояние Ready), автоматически откатывает релиз к предыдущей версии. Критично для продакшена.
helm upgrade --install --atomic my-app stable/app --timeout 5m
--timeout
Устанавливает время ожидания успешного выполнения операции. По умолчанию 5 минут, но для сложных приложений этого часто мало. Указывайте явно.
helm upgrade --install --timeout 10m my-db bitnami/postgresql
--reset-values
Сбрасывает все значения к тем, что указаны в чарте по умолчанию, игнорируя values, заданные в предыдущем релизе. Полезно, когда нужно “начать с чистого листа”.
helm upgrade --reset-values my-app ./chart
Типичные сценарии
1. Атомарное обновление с кастомными values и откатом при ошибке Вы обновляете версию приложения в продакшене. Важно, чтобы в случае проблем (например, ошибки health-чека) система автоматически вернулась к работающей версии.
helm upgrade --install --atomic --timeout 7m \
--values values/production.yaml \
--set image.tag=v2.1.0 \
my-app ./application-chart
2. Сброс кастомных настроек и возврат к дефолтам чарта
В процессе разработки вы переопределили много параметров через --set. Теперь нужно вернуть дефолтную конфигурацию чарта для тестирования.
# Предыдущие values будут проигнорированы, применятся только дефолты из chart/values.yaml
helm upgrade --reset-values my-test-release ./chart
Частые ошибки
Путаница между –reuse-values и –reset-values.
--reuse-values(дефолтное поведение приupgrade): сохраняет ВСЕ values из предыдущего релиза и применяет к ним новые значения из командной строки или файлов.--reset-values: игнорирует ВСЕ values из предыдущего релиза. Применяются только дефолты чарта + новые значения из команды.
Ошибка: использовать --reset-values, ожидая, что сохранятся прошлые кастомные настройки. Они будут полностью утеряны.
Недостаточный –timeout для сложных релизов. Если в чарте есть hooks (например, job для миграции БД) или тяжелые приложения, 5 минут может не хватить. Операция зависнет и будет отменена. Всегда оценивайте сложность обновления и увеличивайте таймаут явно.