Инструкция по обновлению Monq до версии 8.9.0
В этом обновлении
Модуль | Новая версия |
---|---|
pl | 8.9.0 |
sm | 8.9.0 |
cl | 8.9.0 |
fm | 8.9.0 |
mcs | 8.9.0 |
plugins | 8.9.0 |
Уровень простоя
Без простоя
🔥 Требуется проверка
Проверьте версию ingress-nginx
На момент выпуска Monq 8.8.0 актуальной была версия ingress-nginx 1.12.0.
Позднее вышла версия 1.12.1 с исправлением критических уязвимостей.
В связи с этим инструкция по обновлению Monq 8.8.0 была актуализирована и перед обновлением до 8.9.0 требуется проверка используемой версии ingress-nginx:
kubectl get po -n ingress-nginx -l app.kubernetes.io/name=ingress-nginx -o custom-columns=:.metadata.labels."app\.kubernetes\.io/version"
Если результат 1.12.1
- дополнительных действий не требуется, переходите к основной части обновления.
Если результат 1.12.0
- выполните обновление по инструкции:
В зависимости от типа установки возможны 2 сценария обновления СПО:
- Demo-VM - контур был установлен из образа виртуальной машины Demo-VM 8.0.0, загруженной с сайта
- Промышленная установка - контур был установлен полностью вручную, включая все компоненты СПО, по Документации по развертыванию Monq версии 8.0.0
Для просмотра команд выберите вкладку, соответствующую вашему сценарию:
- 🛠️ Demo-VM
- 🚀 Пром. установка
Загрузить container image:
mkdir -p monq890/images
crane pull registry.k8s.io/ingress-nginx/controller:v1.12.1 monq890/images/ingress-nginx.tar
crane pull registry.k8s.io/ingress-nginx/kube-webhook-certgen:v1.5.2 monq890/images/kube-webhook-certgen.tar
Загрузить helm charts:
mkdir -p monq890/charts
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
helm pull ingress-nginx/ingress-nginx --version 4.12.1 -d monq890/charts
Импортировать container image в локальный registry:
crane push monq890/images/ingress-nginx.tar registry.in.monq.local:5000/ingress-nginx/controller:v1.12.1
crane push monq890/images/kube-webhook-certgen.tar registry.in.monq.local:5000/ingress-nginx/kube-webhook-certgen:v1.5.2
Сохранить values, использованные при установке chart:
helm --kubeconfig /etc/rancher/k3s/k3s.yaml get values -n ingress-nginx \
ingress-nginx -o yaml > ingress-values.yaml
Остановить ingress-controller:
kubectl scale deploy -n ingress-nginx ingress-nginx-controller --replicas=0
Выполнить обновление ingress-nginx:
helm --kubeconfig /etc/rancher/k3s/k3s.yaml -n ingress-nginx upgrade \
ingress-nginx monq890/charts/ingress-nginx-4.12.1.tgz -f ingress-values.yaml
Выполнить импорт контейнеров в Docker репозиторий обновляемого экземпляра Monq
crane copy registry.k8s.io/ingress-nginx/controller:v1.12.1 \
registry.in.monq.local:5000/ingress-nginx/controller:v1.12.1
crane copy registry.k8s.io/ingress-nginx/kube-webhook-certgen:v1.5.2 \
registry.in.monq.local:5000/ingress-nginx/kube-webhook-certgen:v1.5.2
Сохранить values, использованные при установке chart:
helm get values -n ingress-nginx ingress-nginx -o yaml > ingress-values.yaml
Обновить helm репозиторий:
helm repo update ingress-nginx
Выполнить обновление ingress-nginx:
helm -n ingress-nginx upgrade ingress-nginx \
ingress-nginx/ingress-nginx --version 4.12.1 -f ingress-values.yaml
Проведение миграции 8.8.0 → 8.9.0
Требования
Для запуска обновления требуется скачать клиент управления Monq monqctl и выполнить конфигурацию контекста monqctl, если ранее не выполнялось.
Выполнить предрелизную подготовку
Проверить контекст monqctl и статус реестра микросервисов
# Просмотреть текущий контекст, с которым работает monqctl
monqctl config current-context
# Просмотреть статус реестра микросервисов из контекста
monqctl registry get status
# Просмотреть статус сервисов в реестре микросервисов из контекста
monqctl registry get services
Выполнить обновление реестра микросервисов
monqctl registry update registry --version=3.16.1
Закрытый контур / обновление из папки
На системе с доступом к сети интернет, установленном и настроенном monqctl, выполнить экспорт реестра микросервисов в локальную директорию
monqctl registry export registry 3.16.1 --dest=./<registry export directory>
После переноса папки на сервер выполнить обновление реестра микросервисов
monqctl registry update registry --version=3.16.1 --sourceDir=<папка с экспортированным обновлением>
Проверить статус реестра микросервисов
monqctl registry get status
пока команда monqctl registry get status
выдаст обновленную версию:
Version: "3.16.1"
Установить контекст релиза, с которым будет работать monqctl
в рамках контекста установленного Monq
Команда при этом скачивает и подготавливает релиз для установки.
monqctl release use-version 8.9.0 --product=monq
Закрытый контур / обновление из папки
На системе с доступом к сети интернет, установленном и настроенном monqctl, выполнить экспорт релиза в папку
monqctl release version export 8.9.0 --product=monq --dest=<export directory>
После переноса папки на сервер выполнить команду с аргументом --sourceDir
monqctl release use-version 8.9.0 --product=monq --sourceDir=<папка с экспортированным обновлением>
MONQ Platform (pl)
Выполнить импорт контейнеров в Docker репозиторий обновляемого экземпляра Monq
monqctl release update images --module=pl
Выполнить обновление привилегий в Clickhouse
monqctl release exec shell --module=pl --file=scripts/update_clickhouse_privileges.sh
Создать новые микросервисы
monqctl release update microservices --module=pl --microservice=pl-statistics-service --skip-k8s
monqctl release update microservices --module=pl --microservice=pl-system-notify-service --skip-k8s
Выполнить конфигурацию баз данных микросервисов
monqctl release update db pgsql --module=pl --microservice=pl-i18n-service --file pl-i18n-service.sql
monqctl release update db pgsql --module=pl --microservice=pl-bp-service --file sqls/pl-bp-service.sql
monqctl release update db pgsql --module=pl --microservice=pl-statistics-service --file sqls/pl-statistics-service.sql
monqctl release update db clickhouse --module=pl --microservice=pl-agents-service --file sqls/pl-agents-service-clickhouse.sql
monqctl release update db clickhouse --module=pl --microservice=pl-automaton-v2-service --file sqls/pl-automaton-v2-service-clickhouse.sql
monqctl release update db clickhouse --module=pl --microservice=pl-bp-service --file sqls/pl-bp-service-clickhouse.sql
monqctl release update db clickhouse --module=pl --microservice=pl-events-history-api-service --file sqls/pl-events-history-api-service-clickhouse.sql
monqctl release update db clickhouse --module=pl --microservice=pl-statistics-service --file sqls/pl-statistics-service-clickhouse.sql
monqctl release update db clickhouse --module=pl --microservice=pl-system-notify-service --file sqls/pl-system-notify-service-clickhouse.sql
monqctl release update db pgsql --module=pl --microservice=pl-statistics-service --file sqls/pl-statistics-service-box.sql
Выполнить обновление и конфигурацию микросервисов
monqctl release update microservices --module=pl
kubectl get pod -A | grep -v Running
Выполнить обновление набора прав
monqctl release update user-grants --module=pl --file=user-grants.json --skip-ssl-verify
monqctl instance clear cache --microservice=pl-user-grants-api-service
Обновить существующие и установить новые библиотеки "автоматон v2"
monqctl release update automaton-libraries --module=pl --file=automaton-libs/automaton.signals.import --skip-ssl-verify
monqctl release update automaton-libraries --module=pl --file=automaton-libs/automaton.cmdb.import --skip-ssl-verify
При ошибке HTTP 500 и сообщении в теле ответа "Operation timeout exception" - повторить команды.
Такая ошибка может возникнуть если микросервис "pl-automaton-v2-service" не успел перезапуститься после обновления контейнера.
Перезапустить микросервисы "автоматон v2"
monqctl instance restart microservice --microservice=pl-automaton-v2-service
monqctl instance restart microservice --microservice=pl-automaton-v2-processor-service
monqctl instance restart microservice --microservice=pl-automaton-v2-processor-service-compiler
Применить обновление маршрутизации
monqctl release update routing --module=pl
Сбросить кэш для микросервисов
monqctl instance clear cache --microservice=pl-i18n-service
Выполнить удаление устаревших ключей маршрутизации
monqctl instance delete queue-binding --queue=pl_router_service --bindingKey=mcs.threshold.create
monqctl instance delete queue-binding --queue=pl_router_service --bindingKey=mcs.threshold.update
Перезапустить микросервис исполнитель сценариев "автоматон v2"
monqctl instance restart microservice --microservice=pl-automaton-v2-processor-service-runner
kubectl get pod -A | grep -v Running
MONQ Service Monitor (sm)
Выполнить импорт контейнеров в Docker репозиторий обновляемого экземпляра Monq
monqctl release update images --module=sm
Выполнить конфигурацию баз данных микросервисов
monqctl release update db pgsql --module=sm --microservice=sm-rsm-attributes-service --file sqls/sm-rsm-attributes-service.sql
monqctl release update db clickhouse --module=sm --microservice=sm-rsm-coverage-service --file sqls/sm-rsm-coverage-service-clickhouse.sql
monqctl release update db clickhouse --module=sm --microservice=sm-rsm-health-service --file sqls/sm-rsm-health-service-clickhouse.sql
monqctl release update db clickhouse --module=sm --microservice=sm-signals-service --file sqls/sm-signals-service-clickhouse.sql
Выполнить обновление и конфигурацию микросервисов
monqctl release update microservices --module=sm
Применить обновление маршрутизации
monqctl release update routing --module=sm
Выполнить удаление устаревших ключей маршрутизации
monqctl instance delete queue-binding --queue=sm_rsm_attributes_service --bindingKey=config-item.delete
monqctl instance delete queue-binding --queue=sm_rsm_attributes_service --bindingKey=config-item.type.delete
kubectl get pod -A | grep -v Running
MONQ Collector (cl)
Выполнить импорт контейнеров в Docker репозиторий обновляемого экземпляра Monq
monqctl release update images --module=cl
Выполнить удаление устаревших баз данных
monqctl instance delete db clickhouse cl_streams_service
Выполнить обновление и конфигурацию микросервисов
monqctl release update microservices --module=cl
Выполнить удаление устаревших очередей
monqctl instance delete queue cl_streams_service_buffer
kubectl get pod -A | grep -v Running
Test Forge (fm)
Выполнить импорт контейнеров в Docker репозиторий обновляемого экземпляра Monq
monqctl release update images --module=fm
Выполнить конфигурацию баз данных микросервисов
monqctl release update db clickhouse --module=fm --microservice=fm-projects-api-service --file sqls/fm-projects-api-service-clickhouse.sql
Выполнить обновление и конфигурацию микросервисов
monqctl release update microservices --module=fm
kubectl get pod -A | grep -v Running
MONQ Metrics (mcs)
Выполнить импорт контейнеров в Docker репозиторий обновляемого экземпляра Monq
monqctl release update images --module=mcs
Выполнить обновление и конфигурацию микросервисов
monqctl release update microservices --module=mcs
kubectl get pod -A | grep -v Running
PLUGINS (plugins)
Выполнить импорт контейнеров в Docker репозиторий обновляемого экземпляра Monq
monqctl release update images --module=plugins
Выполнить обновление и конфигурацию микросервисов
monqctl release update microservices --module=plugins
Выполнить загрузку плагинов агента в центральное хранилище распространения плагинов Monq
monqctl instance delete agent-plugin oracledbsqlRequest --skip-ssl-verify
monqctl instance delete agent-plugin postgresqlPlugin --skip-ssl-verify
monqctl release update agent-plugins --module=plugins --plugin=oracleDbSqlRequest
monqctl release update agent-plugins --module=plugins --plugin=postgreSqlPlugin
monqctl instance restart microservice --microservice=pl-monq-agent
Выполнить загрузку контент-паков
monqctl release update content-packs --module=plugins --replace --file=content-packs/stream-full-request-parser.zip --skip-ssl-verify
monqctl release update content-packs --module=plugins --replace --file=content-packs/internal-user-notifications.zip --skip-ssl-verify
monqctl release update content-packs --module=plugins --replace --file=content-packs/vk-teams.zip --skip-ssl-verify
monqctl release update content-packs --module=plugins --replace --file=content-packs/k8s.zip --skip-ssl-verify
monqctl release update content-packs --module=plugins --replace --file=content-packs/vcenter.zip --skip-ssl-verify
monqctl release update content-packs --module=plugins --replace --file=content-packs/zabbix.zip --skip-ssl-verify
Переименовать плагины
В связи с переименованием плагинов для работы с СУБД Postgresql и Oracle необходимо выполнить несколько действий для их замены на новые версии:
- Остановить выполнение заданий в потоках данных, которые используют плагины:
oracledbsqlRequest
,postgresqlRequest
,postgresqlPerformanceMetrics
- После остановки исправить названия вызываемых плагинов:
oracledbsqlRequest
→oracleDbSqlRequest
postgresqlRequest
→postgreSqlRequest
postgresqlPerformanceMetrics
→postgreSqlPerformanceMetrics
- На серверах, где используются внешние агенты, удалить папки со старыми версиями плагинов:
postgresqlPlugin
иoracledbsqlRequest
- Включить исправленные задания в потоках данных
- Проверить корректность выполнения заданий
в которых используется старое написание плагинов в заданиях, можно использовать SQL-запрос в БД live_pl_agents_service
:
SELECT "HolderId"
FROM "AgentTasks"
JOIN "AgentTaskScripts" ON "AgentTaskScripts"."AgentTaskId" = "AgentTasks"."Id"
WHERE "AgentTaskScripts"."Script" LIKE '%plugin: postgresqlPlugin%'
OR "AgentTaskScripts"."Script" LIKE '%plugin: postgresqlPerformanceMetrics%'
OR "AgentTaskScripts"."Script" LIKE '%plugin: oracledbsqlRequest%';
Миграция данных Clickhouse
Перед запуском
Во время миграции объем занятого дискового пространства Clickhouse может временно увеличиться до 2 раз.
Через некоторое время после завершения лишнее место будет автоматически освобождено.
Запустить миграцию данных
monqctl release update migrator --module=pl --command="migrate utc-dates"
В процессе работы состояние миграции сохраняется в директории /tmp/monqctl/updates/<ваш_контекст>/monq/8.9.0/pl/artifacts
. Если миграция будет прервана, повторный запуск продолжит ее с того же места.
Ошибки при миграции
При аварийной остановке Clickhouse миграцию можно перезапустить.
При этом неизбежно дублирование некоторых данных в БД.
После успешного завершения миграции будет сгенерирован набор SQL-запросов для удаления дублей - их необходимо выполнить вручную.
При перезагрузке ОС каталог /tmp/
очищается, что приводит к потере контрольной точки состояния мигратора