Короткий ответ
helm install создаёт новый релиз в кластере, а helm upgrade применяет изменения (новую версию chart или values) к уже существующему релизу, сохраняя историю ревизий; повторный helm install с тем же именем релиза завершится ошибкой "cannot re-use a name that is still in use".
Как это работает подробнее
Helm хранит метаданные каждого релиза (включая отрендеренные манифесты каждой ревизии) как Kubernetes Secret в namespace релиза; upgrade сравнивает текущую (последнюю) ревизию с новой и применяет diff через серверный apply, увеличивая номер ревизии, что и даёт возможность helm rollback.
Пример кода
commands.sh
$ helm upgrade --install myapp ./chart -f values-prod.yaml -n prodЧто использовать на практике
- Практика. для идемпотентного деплоя из CI/CD часто используют
helm upgrade --install, которая создаёт релиз, если его нет, или обновляет, если есть — это избавляет от необходимости различать первый и последующие деплои в пайплайне.
Подводные камни
- Ошибка. использовать
helm installв CI/CD без флага--installна upgrade, из-за чего второй и последующие запуски пайплайна падают с ошибкой "already exists"; не указывать--namespaceявно, из-за чего релиз неожиданно попадает в namespacedefault.