Горячие обновления#
Горячее обновление — это режим обновления прикладного решения без отключения пользователей. В этом режиме пользовательские сессии переводятся на новую версию приложения, как правило, без необходимости переподключения или потери данных сессии.
Включение горячего обновления#
Управление функцией осуществляется через параметры конфигурационного ресурса GlobalConfiguration
apiVersion: global-system.ru/v1
kind: GlobalConfiguration
metadata:
name: config
spec:
resgroups:
- hot_reload: true
drain_cluster_before_db_upgrade: false
...
hot_reloadРазрешает горячее обновление.
true: Если изменяется только прикладное решение (applib.zip), а сервер приложений (globalserver.zip) и профиль (profile.zip) остаются без изменений, обновление применяется без перезапуска серверов.false(по умолчанию): Обновление всегда сопровождается перезапуском сервера приложений и отключением пользователей.
drain_cluster_before_db_upgradeОпределяет поведение при обновлении схемы базы данных.
true(рекомендуется, по умолчанию): Перед началом обновления БД кластер «осушается» — новые соединения не принимаются, а существующие завершаются. Это гарантирует согласованность данных и отсутствие конфликтов.false: Обновление БД выполняется в фоне, пока пользователи продолжают работу.
Предупреждение
Параллельная работа пользователей и процесс обновления могут конфликтовать, что потенциально приводит к ошибкам и неполному применению изменений в БД.
Примечание
Если вы инициируйте обновление БД при помощи ./appkit.sh upgrade при включенном осушении кластера (drain_cluster_before_db_upgrade = true), то пользователи будут отключены на время обновления БД независимо от того, включено горячее обновление (hot_reload) или нет.
Управление через nscli#
Мастер настройки#
Используйте интерактивный мастер для настройки параметров группы ресурсов:
./configmgr.sh configure_resgroup --config-path config.yaml --resgroup gs-cluster-1
Настройка группы ресурсов: gs-cluster-1
=======================================
...
Включить горячие обновления?[да,нет]:да
Осушать кластер перед запуском обновления?[да,нет]:нет
...
Команды#
Для точечного управления используйте команды appkit.sh:
# Включение/выключение горячего обновления
./appkit.sh allow_hot_reload --config-path config.yaml --resgroup gs-cluster-1
./appkit.sh disallow_hot_reload --config-path config.yaml --resgroup gs-cluster-1
# Управление осушением кластера перед обновлением БД
./appkit.sh drain_before_upgrade --config-path config.yaml --resgroup gs-cluster-1
./appkit.sh do_not_drain_before_upgrade --config-path config.yaml --resgroup gs-cluster-1
Загрузка комплекта приложений#
Для того, чтобы скопировать на сетевое хранилище только нужные компоненты (например, только прикладное решение и его исходный код), используйте аргумент --items команды ./appkit.sh push:
./appkit.sh push --namespace gs-ctk --source workspace/appkit --destination appkit/v1 --items applib,appsrc
Пример#
Включаем горячее обновление приложения и отключаем принудительное осушение кластера при обновлении БД:
./appkit.sh allow_hot_reload --config-path config.yaml --resgroup gs-cluster-1 ./appkit.sh do_not_drain_before_upgrade --config-path config.yaml --resgroup gs-cluster-1
Загружаем обновленные компоненты приложения в хранилище:
./appkit.sh push --namespace gs-ctk --source workspace/appkit --destination appkit/v1 --items applib,appsrc
Обновляем хеши компонентов в конфигурационном файле:
./appkit.sh switch_remote --config-path ./config.yaml --resgroup gs-cluster-1 --namespace gs-ctk --remote-appkit appkit/v1
Обновим целевую версию схемы:
./appkit.sh upgrade --config-path ./config.yaml --resgroup gs-cluster-1
Предупреждение
Если вы решили не выключать на первом этапе осушение кластера (то есть параметр
drain_cluster_before_db_upgradeустановлен вtrue), то после выполнения командыupgradeи применения ресурса начнется обновление схемы базы данных. Следовательно, кластер будет осушен и пользователи будут все равно, даже если горячее обновление включено.Применим ресурс:
kubectl apply -f config.yaml
После этого начнется обновление прикладного решения и базы данных без отключения пользователей.