4. Lifecycle и управление релизами
Релиз в Helm — это именованная установка chart’а с историей ревизий (revision). Upgrade добавляет новую ревизию и применяет манифесты в кластере; rollback откатывает к выбранной ревизии. Ниже — команды list / history / rollback, как устроен upgrade, что происходит при откате и зачем --atomic в production.
Где хранится состояние (Helm v3)
Метаданные релиза (манифест, values, chart, статус) сохраняются в Secrets (по умолчанию) или ConfigMaps в namespace релиза, с лейблом owner=helm. Это и есть история для helm history и rollback.
Best practice: ограничивать число ревизий (--history-max при upgrade/install), чтобы не раздувать etcd; типично 5–20 зависит от политики.
Основные команды
Список релизов
helm list -A
helm list -n production
История ревизий
helm history my-app -n production
Колонки: REVISION, STATUS (deployed, failed, superseded…), CHART, короткое описание.
Откат
helm rollback my-app 7 -n production
Восстанавливается манифест ревизии 7; Helm создаёт новую ревизию (например 12), которая по содержанию совпадает с 7.
helm rollback my-app 7 -n production --wait --timeout 5m
Как работает helm upgrade
- Загружается chart (локально или из репозитория).
- Сливаются values (см. раздел про приоритет
-f/--set). - Рендерятся шаблоны → итоговые YAML.
- Сравнение с живым состоянием кластера (three-way merge с последней успешной ревизией): Helm старается сохранить поля, добавленные вручную (например через
kubectl patch), где это применимо — поведение зависит от ресурса и аннотаций. - Применение к API сервера (часто server-side apply в современных версиях).
- Запись новой ревизии в историю релиза.
Комментарий: «ручные» правки в кластере могут конфликтовать со следующим upgrade — в production предпочтительно GitOps или чёткая дисциплина (не править контролируемые поля вручную).
Что происходит при rollback
- Берётся снимок манифестов указанной ревизии (даже если промежуточные upgrade были «частичными» — ориентируйтесь на status в
helm history). - Накатывается откат как новый revision в истории.
- Hooks (
pre-rollback,post-rollback) выполняются, если они есть в chart’е.
Best practice: перед rollback на инциденте сохранить helm get manifest и helm get values текущей (битой) ревизии в тикет.
Атомарный деплой: --atomic
| Поведение | Смысл |
|---|---|
--atomic |
Если установка/upgrade не завершается успехом в рамках --timeout, Helm откатывается к последней рабочей ревизии |
--wait |
Ждать готовности Pods / Job hook’ов (зависит от ресурсов и hook’ов) |
--timeout |
Максимум ожидания (например 5m, 10m) |
helm upgrade --install my-app ./my-app -n production \
-f values-prod.yaml \
--atomic \
--wait \
--timeout 10m
Production: для критичных релизов комбинируйте --atomic + --wait + разумный --timeout; учитывайте long-running hook’и и PDB.
Смежный флаг: --cleanup-on-fail — подчистка ресурсов при неудачном install/upgrade (см. документацию к вашей версии Helm).
Диагностика релиза
helm status my-app -n production
helm get values my-app -n production
helm get manifest my-app -n production --revision 11
helm get notes my-app -n production
Production checklist
| # | Практика |
|---|---|
| 1 | Ограничить --history-max, мониторить число helm release secrets |
| 2 | CI хранит номер chart version и revision деплоя в артефакте/тикете |
| 3 | Критичные пути — --atomic и явный --timeout |
| 4 | Runbook: rollback + кого звать, если rollback не помог (данные, миграции) |
| 5 | Не править через kubectl edit поля, которыми владеет Helm, без процесса |