Перейти к основному содержимому

Инструкция по обновлению Monq до версии 8.9.0

В этом обновлении

МодульНовая версия
pl8.9.0
sm8.9.0
cl8.9.0
fm8.9.0
mcs8.9.0
plugins8.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 сценария обновления СПО:

  1. Demo-VM - контур был установлен из образа виртуальной машины Demo-VM 8.0.0, загруженной с сайта
  2. Промышленная установка - контур был установлен полностью вручную, включая все компоненты СПО, по Документации по развертыванию Monq версии 8.0.0
инструкция не подойдет для контуров, развернутых из более ранних версий пакетов установки Monq

Для просмотра команд выберите вкладку, соответствующую вашему сценарию:

Загрузить 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

Проведение миграции 8.8.0 → 8.9.0

Требования

Требуемая версия Monq: 8.8.0
Требуемая версия monqctl: 1.17.1

Для запуска обновления требуется скачать клиент управления 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

При ошибке 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 необходимо выполнить несколько действий для их замены на новые версии:

  1. Остановить выполнение заданий в потоках данных, которые используют плагины:
    oracledbsqlRequest, postgresqlRequest, postgresqlPerformanceMetrics
  2. После остановки исправить названия вызываемых плагинов:
    • oracledbsqlRequestoracleDbSqlRequest
    • postgresqlRequestpostgreSqlRequest
    • postgresqlPerformanceMetricspostgreSqlPerformanceMetrics
  3. На серверах, где используются внешние агенты, удалить папки со старыми версиями плагинов: postgresqlPlugin и oracledbsqlRequest
  4. Включить исправленные задания в потоках данных
  5. Проверить корректность выполнения заданий
Для поиска всех id потоков,

в которых используется старое написание плагинов в заданиях, можно использовать 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/ очищается, что приводит к потере контрольной точки состояния мигратора