Перейти к содержанию

Сценарий обновления окружения#

Например, пользователь хочет обновиться с версии LUNA PLATFORM v.5.53.0 на версию LUNA PLATFORM v.5.57.0 и имеет четыре сервера, где развернуты старые сервисы LUNA PLATFORM:

  • сервер A с базами данных — СУБД PostgreSQL, InfluxDB и Redis
  • сервер B с сервисом Image Store
  • сервер C с сервисом Licenses
  • сервер D со всеми остальными сервисами LUNA PLATFORM

Фактически всю подготовку окружения можно выполнить с помощью одной или двух команд. Главное — правильно указать необходимые настройки для утилиты Storages. Утилита Storages может получить настройки из запущенного сервиса Configurator или из конфигурационного файла (см. "Настройка конфигурации Storages"). Если есть возможность указать все необходимые настройки в конфигурационном файле, то достаточно будет выполнения одной команды с указанием аргумента --config. Если все параметры соединения с БД, сервисами и пр. уже заданы в имеющемся сервисе Configurator и нет желания повторно заполнять конфигурацию Storages, то для подготовки окружения всех сервисов можно использовать имеющиеся настройки Configurator (аргумент --luna-config), предварительно отдельно обновив окружение для сервиса Configurator. В данном примере мы сначала обновим окружение для сервиса Configurator, а затем будем использовать все его настройки для обновления окружения остальных сервисов.

Для подготовки окружения для сервиса Configurator, нужно выполнить следующие действия на любом из серверов:

  • Настроить группу параметров "LUNA_CONFIGURATOR_DB" для получения адреса БД Configurator в конфигурационном файле Storages:
vi /var/lib/luna/current/extras/conf/storages_config.conf

По умолчанию в конфигурационном файле указано расположение БД Configurator по адресу 127.0.0.1. В нашем примере PostgreSQL и Configurator расположены на разных серверах, поэтому необходимо явно задать адрес базы данных. Если бы Configurator и PostgreSQL были на одном сервере, то можно было бы не редактировать конфигурационный файл и использовать дефолтный внутри контейнера, не передавая аргумент --config.

При необходимости можно задать настройки подготовки окружения для всех сервисов сразу в конфигурационном файле Storages и сразу перейти к подготовке окружения всех сервисов. Данный пример специально отражает оба варианта использования настроек.

  • Выполнить миграцию БД сервиса Configurator:
docker run \
--rm \
--network=host \
- -v /var/lib/luna/current/extras/conf/storages_config.conf:/srv/storages_config.conf \
dockerhub.visionlabs.ru/luna/storages:v.0.4.23 \
bash -c "luna_prepare prepare configurator \
    --entity=database \
    --platform_version=v.5.57.0 \
    --config=/srv/storages_config.conf"

Обратите внимание, что при использовании конфигурационного файла, отличного от дефолтного, его нужно примонтировать к контейнеру Storages.

  • Выполнить миграцию настроек сервиса Configurator:
docker run \
--rm \
--network=host \
- -v /var/lib/luna/current/extras/conf/storages_config.conf:/srv/storages_config.conf \
dockerhub.visionlabs.ru/luna/storages:v.0.4.23 \
bash -c "luna_prepare prepare configurator \
    --entity=configs \
    --platform_version=v.5.57.0 \
    --config=/srv/storages_config.conf"

При необходимости можно выполнить обе вышеописанные команды как одну команду с аргументом --entity=all_entities, т.к. all_entities для сервиса Configurator означают использование сущностей database, configs и influx_bucket. Однако бакет InfluxDB (последняя сущность) будет подготовлен в команде prepare all_entities --profile=common ниже, также что нет смысла его подготавливать на данном этапе. Если же все-таки подготовить его на данном этапе, то в команде подготовки окружения для всех сервисов он будет создан повторно, но только если указан именованный аргумент --ii (следует ли игнорировать существующие объекты).

  • Остановить старую версию Configurator и запустить новую версию сервиса.

Теперь когда есть актуальная версия сервиса Configurator с актуальным окружением, то можно использовать его настройки при подготовке окружения для остальных сервисов.

Команда подготовки окружения выглядит следующим образом:

docker run \
--rm \
--network=host \
dockerhub.visionlabs.ru/luna/storages:v.0.4.23 \
bash -c "luna_prepare prepare all_entities \
    --platform_version=v.5.57.0 \
    --profile=common \
    --luna-config=<configurator_address>"

Команду подготовки окружения можно запустить с любого сервера, если в настройках Configurator все адреса указаны правильно.

Данная команда выполнит следующие действия на соответствующих серверах, используя настройки Configurator на сервере D:

  • Создаст бакеты (если они отсутствуют) в InfluxDB для работы мониторинга на сервере А (позиционный аргумент influx_bucket)
  • Создаст бакеты (если они отсутствуют) в сервисе Image Store на сервере D (позиционный аргумент lis_bucket)
  • Подготовит БД Influx (если ранее не была подготовлена) для сбора агрегированной статистики сервисом Admin на сервере А (позиционный аргумент aggregated_influx_bucket)
  • Выполнит миграцию баз данных на сервере А (позиционный аргумент database)
  • Выполнит миграцию настроек в БД Configurator на сервере D (позиционный аргумент configs)

Миграция настроек в БД Configurator в данном случае не будет выполнена, т.к. они уже были мигрированы на этапе подготовки окружения для сервиса Configurator.

Утилита Storages будет проверять наличие бакетов в запущенном сервисе Image Store в соответствии с настройками Configurator. Если сервис Image Store не запущен, то можно явно указать расположение бакетов с помощью команды --local-buckets.

Пример выполнения команды:

[2024-02-07 15:05:40+0300] [storages] [INFO]: The surrounding state was prepared according to platform version 'v.5.57.0'
[2024-02-07 15:05:40+0300] [storages] [INFO]: Actual services versions:
[2024-02-07 15:05:40+0300] [storages] [INFO]: Service `luna_accounts` version — `v.0.2.6`
[2024-02-07 15:05:40+0300] [storages] [INFO]: Service `luna_admin` version — `v.5.5.6`
...

После выполнения данной команды нужно остановить все сервисы LUNA PLATFORM на соответствующих серверах, актуализировать настройки в Configurator (опционально) и запустить их новые версии.