Helm — Примеры
Пример 1 — Значение, которое как будто игнорируется
Релиз продвигают в продакшен, передавая сначала файл значений среды, а затем собственный файл значений чарта. Deployment поднимается с одной репликой, хотя продакшену нужны четыре. Файлы и команда приведены ниже. Исправьте команду и покажите доказательство, которое разрешает вопрос об объединении.
# values.yaml — значения по умолчанию чарта, применяются первыми
replicaCount: 1
# values.production.yaml — переопределения среды
replicaCount: 4
# использованная команда: install ./chart -f values.production.yaml -f values.yaml
Решение
$ helm template ./chart -f values.production.yaml
# replicas: 4
# values.yaml чарта уже нижний слой, поэтому повторная передача переопределяет продакшен;
# среди файлов -f побеждает последний, а переопределения из командной строки сильнее всех
Чарт — это параметризованный набор манифестов, а файл среды — запись о том, что различается, поэтому у объединения есть один задуманный победитель, и команда его перевернула. Рендеринг без кластера печатает объединённый результат — единственный надёжный способ разобраться с приоритетом. Обычная ошибка — править шаблоны или добавлять ещё одно переопределение вместо того, чтобы напечатать, что на самом деле дало объединение.
Пример 2 — Обновление, остановившееся на середине
Обновление выполнило хук миграции базы данных, а затем упало, когда новая версия не захотела запускаться. Следующее обновление ведёт себя неожиданно, и кто-то предлагает установить чарт заново под другим именем релиза. Прочитайте историю и восстановитесь, не потеряв запись.
$ helm history shop
REVISION STATUS DESCRIPTION
6 deployed Upgrade complete
7 failed Upgrade complete
$ helm upgrade shop ./chart
Error: the release is in a failed state
Решение
$ helm rollback shop 6
Rollback to revision 6 complete
$ helm upgrade shop ./chart -f values.production.yaml
Upgrade complete
$ helm history shop
6 superseded
7 failed
8 deployed
Хуки ставят миграцию перед новой версией, и обновление, упавшее между ними, оставляет релиз, которому нужно осознанное восстановление. Откат заново отправляет отрендеренные манифесты предыдущей ревизии, поэтому кластер возвращается к состоянию, которое описывает история, а запись сохраняет и сбой, и восстановление. Установка под новым именем спрятала бы неудачный релиз и оставила бы его объекты на месте. Обычная ошибка — выполнить следующую команду поверх неудачного релиза, а потом отлаживать непонятный результат.