Commands
Kubernetes

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 минут может не хватить. Операция зависнет и будет отменена. Всегда оценивайте сложность обновления и увеличивайте таймаут явно.