Горячие обновления#

Горячее обновление — это режим обновления прикладного решения без отключения пользователей. В этом режиме пользовательские сессии переводятся на новую версию приложения, как правило, без необходимости переподключения или потери данных сессии.

Включение горячего обновления#

Управление функцией осуществляется через параметры конфигурационного ресурса 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

Пример#

  1. Включаем горячее обновление приложения и отключаем принудительное осушение кластера при обновлении БД:

    ./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
    
  2. Загружаем обновленные компоненты приложения в хранилище:

    ./appkit.sh push --namespace gs-ctk --source workspace/appkit --destination appkit/v1 --items applib,appsrc
    
  3. Обновляем хеши компонентов в конфигурационном файле:

    ./appkit.sh switch_remote --config-path ./config.yaml --resgroup gs-cluster-1 --namespace gs-ctk --remote-appkit appkit/v1
    
  4. Обновим целевую версию схемы:

    ./appkit.sh upgrade --config-path ./config.yaml --resgroup gs-cluster-1
    

    Предупреждение

    Если вы решили не выключать на первом этапе осушение кластера (то есть параметр drain_cluster_before_db_upgrade установлен в true), то после выполнения команды upgrade и применения ресурса начнется обновление схемы базы данных. Следовательно, кластер будет осушен и пользователи будут все равно, даже если горячее обновление включено.

  5. Применим ресурс:

    kubectl apply -f config.yaml
    

После этого начнется обновление прикладного решения и базы данных без отключения пользователей.