Перейти к основному содержимому
Версия: 9.2

Конфигурация и управление репликами микросервисов

В процессе эксплуатации платформы Monq возникает потребность в гибком управлении отдельными микросервисами без потери настроек при обновлениях. Стандартные механизмы масштабирования через kubectl и команды monqctl ранее не позволяли сохранять пользовательские параметры (количество реплик, специфичные настройки appsettings.json) между релизами, что приводило к сбросу конфигурации после каждого обновления.


Внедренный функционал в реестре микросервисов и утилите monqctl позволяет администраторам решить две ключевые задачи:

  • Сохранение количества реплик при обновлении - теперь число экземпляров микросервиса фиксируется в реестре и автоматически восстанавливается после установки новой версии продукта.

  • Изменение параметров микросервисов - администратор может изменять настройки конкретного сервиса (например, таймауты, логирование, параметры подключений) с сохранением состояния при последующих обновлениях.

Сохранение количества реплик при обновлении

Важное изменение

В версии monqctl ниже 1.19.0, команда monqctl instance scale microservice работала напрямую с Kubernetes и не сохраняла состояние в реестре. Начиная с версии 1.19.0 её функционал разделен.

  • Для оперативного (временного) изменения используйте прямое воздействие на Deployment (без сохранения):
monqctl instance scale deployment <имя-deployment> --replicas=<N>

Этот метод подходит для аварийных ситуаций, но настройка сбросится после следующего релиза.

  • Для постоянного изменения (с сохранением между релизами) используйте новую команду:
monqctl registry scale microservice <имя_микросервиса> --container=<суффикс_контейнера> --replicas=<N>

Параметры:

  • <имя_микросервиса> - полное имя сервиса в реестре (например, pl-automaton-v2-processor-service);

  • --container - необязательный параметр. Указывает суффикс пода, если в составе микросервиса несколько контейнеров (например, runner, compiler). Если параметр не задан, применяется к основному контейнеру.

  • --replicas - желаемое количество реплик.


Например, чтобы увеличить количество экземпляров обработчиков автоматона до 2-х, необходимо выполнить команду:

monqctl registry scale microservice pl-automaton-v2-processor-service --container=runner --replicas=2

Изменение параметров микросервисов

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

Получение текущей кастомной конфигурации

Чтобы посмотреть, какие переопределения установлены для конкретного файла настроек:

monqctl registry get microservice-custom-config <имя_микросервиса> <имя_сервиса> --settingsKey=<путь_к_файлу>
  • --settingsKey - путь к файлу конфигурации внутри сервиса (обычно appsettings.json).

Установка кастомной конфигурации

Для изменения параметров передайте новый JSON-объект:

monqctl registry apply microservice-custom-config <имя_микросервиса> <имя_сервиса> --value='{"ключ":"значение"}' --settingsKey=appsettings.json
Важно

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

Для применения новой конфигурации выполните обновление микросервиса.

Список сервисов с примерами, для которых можно изменить конфигурацию:

  • PostgreSQL (доступны для конфигурации все параметры драйвера)

    {
    "DefaultConnection": {
    "ConnectionString": "CommandTimeout=10;"
    }
    }
  • Redis (доступны для конфигурации все параметры драйвера)

    {
    "SyncTimeout": 5
    }
  • RabbitMQ (доступны для конфигурации все параметры драйвера)

    {
    "MaxBodySize": 16777216
    }
  • ArangoDb (доступны для конфигурации все параметры драйвера)

    {
    "Default": {
    "Logger": {
    "Aql": true
    }
    }
    }
  • VictoriaMetrics (доступны для конфигурации все параметры драйвера)

    {
    "UseHttpV2": false
    }
  • ClickHouseHttp (доступны для конфигурации все параметры драйвера)

    {
    "DefaultConnection": {
    "ConnectionString": "Timeout=60;"
    }
    }
  • K8s(Доступны все опции шаблона k8s. Важно! При слиянии элементов массива, merge элементов происходит по индексам)

    {
    "deployment": {
    "spec": {
    "replicas": 2,
    "template": {
    "spec": {
    "containers": [
    {
    "resources": {
    "limits": {
    "cpu": "2",
    "memory": "2Gi"
    }
    }
    }
    ]
    }
    }
    }
    }
    }

Например, чтобы для сервиса sm-signals-service-sync установить CommandTimeout=180 в PostgreSQL необходимо выполнить следующую команду:

monqctl registry apply microservice-custom-config sm-signals-service PostgreSQL \ 
--value='{"DefaultConnection": {"ConnectionString": "CommandTimeout=180;" }}' \
--settingsKey=appsettings-sync.json

Обновление (применение) конфигурации микросервиса

Данная операция предназначена для применения измененных параметров конфигурации к уже работающему микросервису без выполнения полного цикла обновления релиза.

Ранее

При изменении настроек сервиса (например, адресов подключения к СУБД, портов) для применения новых параметров требовалось:

  • скачать текущий установленный релиз микросервиса
  • внести изменения в конфигурационные файлы
  • заново применить обновление микросервиса через monqctl

Сейчас

Процесс упрощен до одной команды, которая автоматически применяет конфигурацию с использованием текущего шаблона микросервиса, хранящегося в реестре.

Команда применения конфигурации:

monqctl registry update microservice <имя_микросервиса>

⚠️ Скачивание текущего релиза не требуется