Обновление и откат
Helm делает обновление Blitz IDP достаточно прямолинейным, но в продакшен среде важно заранее понимать, что именно меняется в релизе, когда возможна повторная публикация конфигурации и как безопасно откатиться к предыдущей версии.
Базовый порядок обновления
Перед установкойобновлением Blitz необходимо выбрать, как именно будет поставляться конфигурация приложения. В чарте поддерживаются две рабочие схемы, и от этого выбора зависят состав ресурсов в кластере, способ обновления и порядок сопровождения.рекомендуется:
Схемы
- сохранить
1.изменённыйКонфигурацияvalues.yaml - проверить
образовшаблоны черезhelm template - проверить chart через
helm lint - зафиксировать текущую ревизию релиза
Схема
ВКоманды этойдля схеме используется режим:проверки:
config:helm readOnly:history trueblitz -n blitz
helm template blitz ./helm -n blitz -f values-prod.yaml
helm lint ./helm -f values-prod.yaml
ФайловаяКоманда конфигурация должна быть встроена в Docker-образы модулей Blitz, а чарт отвечает только за запуск подов и подключение необходимых Kubernetes-ресурсов.обновления:
helm upgrade blitz ./helm -n blitz -f values-prod.yaml
Проверки перед обновлением
Преимущества:Перед helm upgrade убедитесь:
самаявсепростаяподыэксплуатациятекущего меньшерелизазависимостейвво время установкине нуженсостоянииPersistentVolumeClaimReadyненетнуженнезавершённыхinit-confJobменьшепонятенрисков,ожидаемыйсвязанныхсоставс начальной публикацией файлов
Ограничения:
изменения конфигурации обычно требуют обновления образовизмененийсложнеебазаотделитьданныхжизненный цикл приложения от жизненного цикла конфигурации
Эта схема подходит, если:
конфигурация редко меняетсядоступнаесть контролируемый процесс сборки образовважнее предсказуемостьVault ипростотаingress-контроллерзапуска
Схема 2. Динамическая конфигурация из Git или локального источника
В этой схеме используется режим:
config:
readOnly: false
В этом случае конфигурация публикуетсянаходятся в общийрабочем каталог через PersistentVolumeClaim, а источником служит:
Git-репозиторийлокальный каталог на узле
Пример настройки для Git:
config:
readOnly: false
source:
type: git
git:
repo: https://git.company.loc/blitz/blitz-config.git
ref: main
depth: 1
auth:
existingSecret: blitz-config-git-creds
usernameKey: username
passwordKey: password
Преимущества:
конфигурация отделена от образовудобнее сопровождать дерево конфигурации как отдельный артефактможно использовать единый Git-репозиторий как источник правды
Ограничения:
появляется зависимость отPersistentVolumeClaimустановка становится сложнеенужно контролировать начальную загрузку конфигурацииобновления требуют более аккуратной проверки
Эта схема подходит, если:
конфигурация Blitz живёт в отдельном репозиторииесть требования к сопровождению конфигов вне процесса сборки образовнужно публиковать динамические каталоги в runtime
Роль init-conf
При config.readOnly=false чарт может запускать Job, который публикует конфигурацию в общее хранилище.
init-conf делает следующее:
копирует исходные файлы во временную staging-зонуне изменяет исходный Git-репозиторий или локальный каталогпереноситblitz.confвroot/blitz.confпубликует только разрешённые каталоги верхнего уровняпри наличии публикует конфигурациюpanelпри доступности секрета инициализируетcredentials
Чарт публикует в PersistentVolumeClaim только следующие верхнеуровневые пути:
appsassetscaptchascustom_messagesdynamicflowsmethodsrootsamltoken_exchangeсостоянииmisc
Если в дереве конфигурации присутствует panel, он обрабатывается отдельно:
panel/app.confпубликуется в{{ .Values.dataPath }}/blitz-panel/app.confpanel/icons/*публикуются в{{ .Values.dataPath }}/blitz-panel/static/*
Признак готовности конфигурации для рабочих pod
Когда для релиза ожидается первичная публикация конфигурации, чарт может добавить в рабочие модули initContainer, который ожидает готовности общей конфигурации.
Это нужно, чтобы:
idpconsolerecoveryregpanel
не стартовали раньше времени и не столкнулись с пустым каталогом конфигурации.
Практический выбор схемы
Выбирайте config.readOnly=true, если
хотите самый простой запускготовы обновлять конфигурацию через Docker-образыне хотите использовать общийиспользуетсяPersistentVolumeClaim, неотдельнопланируетепроверьтевыноситьсостояниеконфигитома.вОсобенности
отдельныйобновленияGit-процесс
Выбирайтепри config.readOnly=false, если
конфигурация Blitz уже ведётся в Gitнужен общий runtime-каталог с конфигамиесть требования к публикацииflows,assets,custom_messagesи других директорий без пересборки образовкоманда эксплуатации готова сопровождатьPersistentVolumeClaim,Jobи порядок обновлений
Важные последствия выбора
Для
В обновлений
Прирежиме динамической схемеконфигурации отдельноотдельное контролируйтезначение имеет параметр:
config:
source:
git:
reseedOnUpgrade: false
ЕслиИли включитьаналогичный параметр для local-источника.
reseedOnUpgradereseedOnUpgrade=false,
Это более осторожный режим. Обновление Helm не будет автоматически повторно публиковать конфигурацию прив обновлении релиза. Это полезно не всегда и должно использоваться осознанно.PersistentVolumeClaim.
Для
Подходит, безопасности
Даже в режиме readOnly=false статическая и динамическая конфигурация остаются разделёнными. Это сделано специально, чтобы:если:
ненужносмешиватьразделитьruntime-секретыобновление чарта ипубликуемыеобновлениефайлыконфигурацииуменьшитьвырискхотитенеконтролируемыхизбежать неожиданных измененийсохранитьфайловпредсказуемыйвжизненный цикл конфигурацииruntime
Для эксплуатацииreseedOnUpgrade=true
РежимЭтот режим полезен, если вместе с релизом PersistentVolumeClaimтребуетнужно болеезаново внимательногоопубликовать сопровождения:конфигурацию. Но использовать его нужно осознанно, потому что он меняет фактическое содержимое общего хранилища во время upgrade.
Подходит, если:
проверятьконфигурация меняется вместе с релизом- порядок поставки строго контролируется
- команда понимает последствия повторной инициализации
Проверки после обновления
Сразу после helm upgrade проверьте:
- статус Helm-релиза
- состояние всех подов
- наличие ошибок в логах
- состояние
Ingress - результат
Job, если он должен был запускаться контролироватьдоступностьхранилищавнешнего понимать, когда конфигурация была опубликована повторноURL
Полезные команды:
helm status blitz -n blitz
kubectl get pods,svc,ingress,pvc -n blitz
kubectl get jobs -n blitz
Выполнение отката
Сначала узнайте доступные ревизии:
helm history blitz -n blitz
Затем выполните откат:
helm rollback blitz 3 -n blitz
Здесь 3 — номер ревизии, к которой нужно вернуться.
После rollback обязательно проверьте:
- состояние подов
- readiness и health endpoint
- корректность опубликованной конфигурации
- доступность секретов и
Ingress
Риски при обновлении
Смена режима конфигурации
Переход между:
config.readOnly=trueconfig.readOnly=false
нужно планировать отдельно. Это влияет на:
- наличие
PersistentVolumeClaim - способ поставки конфигурации
- порядок эксплуатации
- процедуру восстановления
Рекомендуем заранее выбрать фиксированный режим конфигурации и не изменять его.
Изменение состава модулей
Включение или выключение panel, ldapMfa, standby-режима console и других опций меняет состав ресурсов в кластере. После такого обновления нужно дополнительно проверить маршрутизацию, секреты и готовность новых подов.
Изменение секретов и Vault
Если одновременно обновляются:
- путь в Vault
AppRole- параметры TLS до Vault
то риск регрессии высокий, такие изменения лучше проверить поэтапно.
Практические рекомендации
- обновляйте Helm-релиз только из версионированных values-файлов
- не совмещайте крупные изменения конфигурации и инфраструктуры без необходимости
- сначала проверяйте шаблоны, затем обновляйте релиз
- держите rollback-процедуру короткой и воспроизводимой