Конфигурация и управление репликами микросервисов
В процессе эксплуатации платформы 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 <имя_микросервиса>
⚠️ Скачивание текущего релиза не требуется