Развертывание сервиса поиска и объединения дублей через Kubernetes

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

В данной статье описан механизм установки, настройки и проверки сервиса поиска и объединения дублей через Kubernetes. Описание сервиса поиска и объединения дублей представлено в статье Сервис поиска и объединения дублей.

Для получения файлов развертывания сервиса обратитесь в Техническую поддержку BPMSoft.

Подготовка к развертыванию

Перед установкой пакета сервиса поиска и объединения дублей выполните следующее:

  1. Для предоставления доступа к архиву с файлами для развертывания обратитесь в Техническую поддержку BPMSoft.
  2. Перед установкой убедитесь в том, что среда, на которую вы хотите устанавливать сервис, соответствует системным требованиям.
  3. Для работы необходимо настроить:
    1. Кластер Kubernetes. Подробно о том, как настроить и администрировать кластер, читайте на сайте документации Kubernetes;
    2. Пакетный менеджер Helm. Установка пакетного менеджера подробно описана на сайте документации Helm.
  4. Выполните удаление предыдущего релиза сервиса поиска и объединения дублей, если он у вас установлен. Подробнее: Удаление предыдущего релиза.
  5. Создайте namespace и добавьте необходимые секреты. Подробнее: Создание namespace и добавление секретов.
  6. Установите инфраструктурные компоненты, необходимые для работы сервиса глобального поиска. Подробнее: Развертывание инфраструктурных компонентов.
  7. Убедитесь, что в файле ConnectionStrings.config на стороне BPMSoft присутствует параметр elasticsearchCredentials.

После выполнения предварительных действий можно выполнить установку сервиса поиска и объединения дублей. Подробнее: Развертывание сервиса поиска и объединения дублей.

Микросервис рекомендуется развертывать на выделенной виртуальной машине, недоступной из внешней сети. Следует открыть только порты, необходимые для взаимодействия с основным приложением, и разрешить подключения к ним только с IP-адресов серверов основного приложения.

Удаление предыдущего релиза

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

  1. Получите список установленных релизов, выполнив команду:
helm ls --namespace dd
  1. Выполните удаление развертывания сервиса поиска и объединения дублей, выполнив команду:
helm uninstall dd --namespace dd

Чтобы полностью удалить MongoDB, выполните следующие шаги:

  1. Войдите в Lens и перейдите в раздел Persistent Volume Claims. Выберите нужное пространство имен и удалите все Persistent Volume Claims, связанные с MongoDB.
  2. Перейдите в Lens → Persistent Volumes и удалите все Claim, связанные с MongoDB, у которых статус Released.

Создание namespace и добавление секретов

  1. Добавьте namespace, выполнив следующую команду:
kubectl create namespace dd
  1. Если используется свой прокси-репозиторий, то добавьте секрет, выполнив команду:
kubectl create secret docker-registry regcred --docker-server=repo.bpmsoft.ru --docker-username=<Пользователь> --docker-password=<Пароль> --namespace dd

Вместо repo.bpmsoft.ru можно указать свой прокси-репозиторий, а вместо <Пользователь> и <Пароль> — ваши данные.

Примечание. По умолчанию в helm-чарте сервиса поиска и объединения дублей используется репозиторий docker.io. Рекомендуется использовать прокси-репозитории для docker-образов и helm-чартов для повышения надежности инфраструктуры, чтобы не зависеть от доступности к ПО через сеть Интернет.

Развертывание инфраструктурных компонентов

Инфраструктурные элементы сервиса устанавливаются отдельно. В таблице 1 указаны обязательные компоненты.

Примечание. Микросервисная архитектура строится на принципах независимости и автономности, поэтому совместное использование одного компонента несколькими микросервисами не допускается.

Таблица 1 — Описание инфраструктурных компонентов

Название компонента Краткая сводка Автор Источник Версия helm Версия приложения
MongoDB NoSQL СУБД Bitnami oci://docker.company.ru/ghcr.io/hub.docker.com/bitnamicharts/mongodb v16.5.1 v8.0.9

MongoDB

Установка

  1. Выполните аутентификацию в OCI-прокси репозиторий вашей компании:
helm registry login <docker.company.ru>
  1. Перейдите в директорию, в которой будет располагаться helm chart. Выполните команду:
helm pull oci://<docker.company.ru>/hub.docker.com/bitnamicharts/mongodb --version 16.5.1
  1. В результате выполнения команды появится директория mongodb с helm chart. Перейдите в директорию:
cd mongodb
  1. Выполните команду для развертывания MongoDB:
helm install dd-mongodb oci://docker.company.ru/hub.docker.com/bitnamicharts/mongodb \
     --version <16.5.1> \
     --namespace <dd namespace> \
     --create-namespace \
     --set image.pullSecrets={regcred} \
     --set global.security.allowInsecureImages=true \
     --set image.repository=<docker.company.ru>/bitnamilegacy \
     --set auth.enabled="false"

Описание параметров команды:

  • version — версия helm чарта для установки MongoDB определенной версии. Подробнее с версиями helm чарта можно ознакомиться по ссылке;
  • namespace — имя пространства имен для установки сервиса поиска и объединения дублей;
  • image.pullSecrets={regcred} — указывает какой секрет использовать для подключения к Docker прокси-репозиторию;
  • global.security.allowInsecureImages=true — разблокирует возможность установки docker образов с прокси репозитория;
  • global.imageRegistry=<docker.company.ru>/bitnamilegacy — указывает прокси-репозиторий для скачивания Docker образов;
  • auth.enabled="false" — установить значение false или true, в зависимости, будете вы использовать авторизацию для MongoDB или нет.
Примечание. В особых случаях нужно использовать оригинальный репозиторий oci://registry-1.docker.io/ вместо oci://<docker.company.ru>/hub.docker.com/.

Обновление

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

helm upgrade dd-mongodb oci://docker.company.ru/hub.docker.com/bitnamicharts/mongodb \
     --version <16.5.1> \
     --namespace <dd namespace> \
     --create-namespace \
     --set image.pullSecrets={regcred} \
     --set global.security.allowInsecureImages=true \
     --set image.repository=docker.company.ru/hub.docker.com \
     --set auth.enabled="false"

Удаление

  1. Получите список доступных релизов:
helm ls --namespace dd
  1. Удалите развертывание MongoDB:
helm uninstall mongodb --namespace dd
  1. В Lens удалите все PVS, относящиеся к MongoDB.

Развертывание сервиса поиска и объединения дублей

После установки инфраструктурных компонентов переходите к установке компонентов микросервиса, указанных в таблице 2.

Таблица 2 — Компоненты сервиса поиска и объединения дублей

Название компонента Автор Источник Версия helm Версия приложения
data-service-web-api BPMSoft hub.docker.com 4.0.0 4.0.0
task-api
cleaner-api
confirmation-api
deletion-api
preparation-api
search-api
task-diagnostic-api
web-api
  1. Распакуйте helm пакет из архива, который вы получили в технической поддержке BPMSoft, и перейдите в директорию, где будет располагаться распакованный пакет.
  2. Перед развертыванием необходимо ознакомиться с выбранным профилем и внести в него корректировки как минимум для следующих параметров:
    • rabbitmq.server — адрес сервиса брокера сообщений RabbitMQ;
    • dragonfly.server — адрес сервиса кэширования Redis или Dragonfly;
    • config.endpoints.ddWebApiUrl — адрес сервиса конфигурирования компонентов сервиса поиска дублей;
    • opentelemetry.server — адрес сервиса приема телеметрии от компонентов глобального поиска;
    • opensearch.server — адрес сервиса OpenSearch.
Параметры «config.endpoints.*», указанные в файле values.yaml, представляют собой FQDN (Fully Qualified Domain Name) для конфигурации Ingress, предназначенной для обеспечения доступа к сервисам кластера из внешней сети.

Значения этих параметров определяют, к какому хосту (доменному имени) будут применяться правила маршрутизации на уровне Ingress-контроллера.
Примечание. Helm поддерживает профилирование. Для ознакомительного развертывания рекомендуется использовать профиль demo-hub. Файл demo-hub.yaml находится в папке resource-profiles. Можно создать собственный профиль, скопировав demo-hub или demo-repo в новый файл в той же папке и дав ему новое имя. Не забудьте указать это имя в переменной global.profile в новом созданном файле профиля.
  1. Для развертывания приложений сервиса поиска и объединения дублей выполните одну из следующих команд на выбор:
Для развертывания с использованием параметров из файла values.yaml, находящегося в корне helm чарта
helm install dd . \
     --namespace dd
Для развертывания с использованием параметров из файла demo-hub.yaml, находящегося в папке resource-profiles
helm install dd . \
     --namespace dd \
     --set global.profile="demo-hub"
Для развертывания с использованием параметров из файла demo-hub.yaml, находящегося в папке resource-profiles, с заменой значений для перечисленных параметров
helm install dd . \
     --namespace dd \
     --set global.profile="demo-hub" \
     --set global.overrideValues="true" \
     --set images.tag= \
     --set mongodb.auth_enabled=true \
     --set mongodb.user= \
     --set mongodb.password= \
     --set rabbitmq.password=

Release name и Namespace должны быть одноименными (для корректной работы Grafana dashboards).

Откат изменений

Для отката изменений выполните следующее:

  1. Получите список релизов, выполнив команду:
helm ls --namespace dd
  1. Для удаления развертывания сервиса поиска и объединения дублей, выполните следующую команду:
helm uninstal --namespace dd
namespace и secret удалять не нужно.
  1. Создайте директорию dd-old:
mkdir dd-old
  1. Распакуйте helm пакет c предыдущей версией сервиса поиска и объединения дублей и перейдите в директорию, где будет располагаться распакованный пакет.
  2. Выполните команду для развертывания приложений сервиса поиска и объединения дублей:
helm install dd --namespace dd --create-namespace bpmsoft/deduplication --version 3.1.5 \
 
--set webApi.ingress.enabled=true --set webApi.ingress.host=deduplication-api.omnichannel.ru --set webApi.ingress.className= --set global.elasticsearch.host=elk-bpm.omnichannel.ru \
 
--set global.rabbitmq.host=rabbit-bpm.omnichannel.ru --set global.rabbitmq.vhost=/deduplication --set global.rabbitmq.user=deduplication --set global.rabbitmq.password=deduplication \
 
--set global.redis.host=redis-bpm.omnichannel.ru --set global.redis.database=2 --set global.mongodb.host=mongo-bpm.omnichannel.ru --set global.mongodb.user=sa --set global.mongodb.password=123 \
 
--set dataService.mongodb.dbname=dup-bulk-deduplication --set dataService.mongodb.cache.dbname=dup-bulk-deduplication-cache --set log4Net.level=INFO --set log4Net.grayLog.enabled=true \
 
--set log4Net.grayLog.AMQP.host=rabbit-bpm.omnichannel.ru --set log4Net.grayLog.AMQP.virtualHost=/ --set log4Net.grayLog.AMQP.userName=deduplication \
 
--set log4Net.grayLog.AMQP.password=deduplication

Проверка работоспособности компонентов

Для проверки работоспособности системы используются Liveness и Readiness в манифестах deployments:

  • Если поды развернутся корректно, при их проверке будут возвращаться коды 200. В Lens успешно запущенные поды будут иметь зеленый статус в разделе Containers;
  • Если поды развернутся с ошибками, при их проверке будут возвращаться коды 500. В Lens поды с ошибками будут иметь оранжевый статус в разделе Containers, восклицательный знак в разделе "Namespace" и происходить рестарты подов.

Настройка на стороне BPMSoft

  1. Заполните системную настройку DeduplicationWebApiUrl значением URL к dd-web-api, строка следующего типа: http://external.deduplication-web-api:8086;
  2. Настройте права на системную операцию CanSearchDuplicates — раздайте права необходимым пользователям/ролям, которые смогут выполнять поиск дублей;
  3. Включите в системе функциональность массового поиска дублей. Для включения функциональности массового поиска дублей (Deduplication, ESDeduplication, BulkESDeduplication) необходимо выполнить SQL-скрипт:
  4. Очистите кэш, перезапустите приложение и выполните вход в приложение.

Ресурсы

Скрипт включения функциональности для Microsoft SQL Server

MSSQL_Deduplication_FeatureToggle.sql
DECLARE @DeduplicationFeature NVARCHAR(50) = 'Deduplication';
DECLARE @DeduplicationFeatureId UNIQUEIDENTIFIER = (SELECT TOP 1 Id FROM Feature WHERE Code = @DeduplicationFeature);

DECLARE @ESDeduplicationFeature NVARCHAR(50) = 'ESDeduplication';
DECLARE @ESDeduplicationFeatureId UNIQUEIDENTIFIER = (SELECT TOP 1 Id FROM Feature WHERE Code = @ESDeduplicationFeature);

DECLARE @Bulk_ES_DD_Feature NVARCHAR(50) = 'BulkESDeduplication';
DECLARE @Bulk_ES_DD_FeatureId UNIQUEIDENTIFIER = (SELECT TOP 1 Id 
FROM Feature WHERE Code =@Bulk_ES_DD_Feature);

DECLARE @allEmployeesId UNIQUEIDENTIFIER = 'A29A3BA5-4B0D-DE11-9A51-005056C00008';
IF (@DeduplicationFeatureId IS NOT NULL)
BEGIN
      IF EXISTS (SELECT * FROM AdminUnitFeatureState WHERE FeatureId = @DeduplicationFeatureId)
       UPDATE AdminUnitFeatureState SET FeatureState = 1 WHERE FeatureId =@DeduplicationFeatureId
      ELSE
       INSERT INTO AdminUnitFeatureState (SysAdminUnitId, FeatureState, FeatureId) VALUES (@allEmployeesId, '1',
@DeduplicationFeatureId)
END;
ELSE
BEGIN
      SET @DeduplicationFeatureId = NEWID()
      INSERT INTO Feature (Id, Name, Code) VALUES
(@DeduplicationFeatureId, @DeduplicationFeature, @DeduplicationFeature)
       INSERT INTO AdminUnitFeatureState (SysAdminUnitId, FeatureState, FeatureId) VALUES (@allEmployeesId, '1', @DeduplicationFeatureId)
END;

IF (@ESDeduplicationFeatureId IS NOT NULL)
BEGIN
      IF EXISTS (SELECT * FROM AdminUnitFeatureState WHERE FeatureId = @ESDeduplicationFeatureId)
     UPDATE AdminUnitFeatureState SET FeatureState = 1 WHERE FeatureId = @ESDeduplicationFeatureId
      ELSE
       INSERT INTO AdminUnitFeatureState (SysAdminUnitId, FeatureState, FeatureId) VALUES (@allEmployeesId, '1', @ESDeduplicationFeatureId)
END;
ELSE
BEGIN
      SET @ESDeduplicationFeatureId = NEWID()
      INSERT INTO Feature (Id, Name, Code) VALUES (@ESDeduplicationFeatureId, @ESDeduplicationFeature, @ESDeduplicationFeature)
      INSERT INTO AdminUnitFeatureState (SysAdminUnitId, FeatureState, FeatureId) VALUES (@allEmployeesId, '1', @ESDeduplicationFeatureId)
END;

IF (@Bulk_ES_DD_FeatureId IS NOT NULL)
BEGIN
      IF EXISTS (SELECT * FROM AdminUnitFeatureState WHERE FeatureId = @Bulk_ES_DD_FeatureId)
       UPDATE AdminUnitFeatureState SET FeatureState = 1 WHERE FeatureId =@Bulk_ES_DD_FeatureId
      ELSE
       INSERT INTO AdminUnitFeatureState (SysAdminUnitId, FeatureState,FeatureId) VALUES (@allEmployeesId, '1', @Bulk_ES_DD_FeatureId)
END;
ELSE
BEGIN
      SET @Bulk_ES_DD_FeatureId = NEWID()
      INSERT INTO Feature (Id, Name, Code) VALUES (@Bulk_ES_DD_FeatureId, @Bulk_ES_DD_Feature, @Bulk_ES_DD_Feature)
      INSERT INTO AdminUnitFeatureState (SysAdminUnitId, FeatureState, FeatureId) VALUES (@allEmployeesId, '1', @Bulk_ES_DD_FeatureId)
END;

↑ Вернуться к шагу Настройка на стороне BPMSoft

Скрипт включения функциональности для PostgreSQL

PostgreSQL_Deduplication_FeatureToggle.sql
DO $$

DECLARE
	DeduplicationFeature VARCHAR(50) := 'Deduplication';
	DeduplicationFeatureId uuid;

	ESDeduplicationFeature VARCHAR(50) := 'ESDeduplication';
	ESDeduplicationFeatureId uuid;

	Bulk_ES_DD_Feature VARCHAR(50) := 'BulkESDeduplication';
	Bulk_ES_DD_FeatureId uuid;

  allEmployeesId uuid := 'A29A3BA5-4B0D-DE11-9A51-005056C00008';

BEGIN

	SELECT "Id" INTO DeduplicationFeatureId FROM "Feature"
	WHERE "Code" = DeduplicationFeature
	LIMIT 1;
	IF (DeduplicationFeatureId IS NOT NULL)
		THEN
			IF EXISTS (SELECT * FROM "AdminUnitFeatureState" WHERE "FeatureId" = DeduplicationFeatureId) THEN
				UPDATE "AdminUnitFeatureState" SET "FeatureState" = 1 WHERE "FeatureId" = DeduplicationFeatureId;
			ELSE
				INSERT INTO "AdminUnitFeatureState" ("SysAdminUnitId", "FeatureState", "FeatureId") VALUES (allEmployeesId, '1', DeduplicationFeatureId);
			END IF;
	ELSE
		DeduplicationFeatureId := uuid_generate_v4();
		INSERT INTO "Feature" ("Id", "Name", "Code") VALUES (DeduplicationFeatureId, DeduplicationFeature, DeduplicationFeature);
		INSERT INTO "AdminUnitFeatureState" ("SysAdminUnitId", "FeatureState", "FeatureId") VALUES (allEmployeesId, '1', DeduplicationFeatureId);
	END IF;

	SELECT "Id" INTO ESDeduplicationFeatureId FROM "Feature"
	WHERE "Code" = ESDeduplicationFeature
	LIMIT 1;
	IF (ESDeduplicationFeatureId IS NOT NULL)
		THEN
			IF EXISTS (SELECT * FROM "AdminUnitFeatureState" WHERE "FeatureId" = ESDeduplicationFeatureId) THEN
				UPDATE "AdminUnitFeatureState" SET "FeatureState" = 1 WHERE "FeatureId" = ESDeduplicationFeatureId;
			ELSE
				INSERT INTO "AdminUnitFeatureState" ("SysAdminUnitId", "FeatureState", "FeatureId") VALUES (allEmployeesId, '1', ESDeduplicationFeatureId);
			END IF;
	ELSE
		ESDeduplicationFeatureId := uuid_generate_v4();
		INSERT INTO "Feature" ("Id", "Name", "Code") VALUES (ESDeduplicationFeatureId, ESDeduplicationFeature, ESDeduplicationFeature);
		INSERT INTO "AdminUnitFeatureState" ("SysAdminUnitId", "FeatureState", "FeatureId") VALUES (allEmployeesId, '1', ESDeduplicationFeatureId);
	END IF;

	SELECT "Id" INTO Bulk_ES_DD_FeatureId FROM "Feature"
	WHERE "Code" = Bulk_ES_DD_Feature
	LIMIT 1;
	IF (Bulk_ES_DD_FeatureId IS NOT NULL)
		THEN
			IF EXISTS (SELECT * FROM "AdminUnitFeatureState" WHERE "FeatureId" = Bulk_ES_DD_FeatureId) THEN
				UPDATE "AdminUnitFeatureState" SET "FeatureState" = 1 WHERE "FeatureId" = Bulk_ES_DD_FeatureId;
			ELSE
				INSERT INTO "AdminUnitFeatureState" ("SysAdminUnitId", "FeatureState", "FeatureId") VALUES (allEmployeesId, '1', Bulk_ES_DD_FeatureId);
			END IF;
	ELSE
		Bulk_ES_DD_FeatureId := uuid_generate_v4();
		INSERT INTO "Feature" ("Id", "Name", "Code") VALUES (Bulk_ES_DD_FeatureId, Bulk_ES_DD_Feature, Bulk_ES_DD_Feature);
		INSERT INTO "AdminUnitFeatureState" ("SysAdminUnitId", "FeatureState", "FeatureId") VALUES (allEmployeesId, '1', Bulk_ES_DD_FeatureId);
	END IF;
END $$;

↑ Вернуться к шагу Настройка на стороне BPMSoft

Рекомендуем изучить

Сервис поиска и объединения дублей

Материал был полезен для вас?
Запросить демонстрацию
Купить приложение
Заявка на индивидуальный тренинг
Заявка на обучение в формате тренинга
Заявка на консультацию по обучению
Готовы сделать выбор CRM? (детальная)
Оставьте заявку, и наши эксперты бесплатно проконсультируют вас, подберут подходящую конфигурацию и рассчитают стоимость проекта.
Предпочитаемый способ связи
Вебинар: 10 ноября в 11:00
Разберём, как повысить эффективность управления ИТ-инфраструктурой с помощью ITSM и Service Desk. Обсудим, как сократить операционные затраты и ускорить бизнес-процессы в 2 раза, на реальном опыте ПАО «Трубная металлургическая компания» (ТМК) и Группы Rubytech.
Готовы сделать выбор CRM?
Оставьте заявку, и наши эксперты бесплатно проконсультируют вас, подберут подходящую конфигурацию и рассчитают стоимость проекта.
Предпочитаемый способ связи
Готовы сделать выбор CRM? (детальная)
Оставьте заявку, и наши эксперты бесплатно проконсультируют вас, подберут подходящую конфигурацию и рассчитают стоимость проекта.
Предпочитаемый способ связи
Готовы сделать выбор CRM?
Оставьте заявку, и наши эксперты бесплатно проконсультируют вас, подберут подходящую конфигурацию и рассчитают стоимость проекта.
Предпочитаемый способ связи
Регистрация на мероприятие
Типовое внедрение
Внедрите BPMSoft CRM в свою компанию всего за 8 рабочих дней по фиксированной цене! Заполните заявку для уточнения условий.
Предпочитаемый способ связи
Оставить заявку
Оставьте свои контакты, и наш менеджер свяжется с Вами в ближайшее время.
Предпочитаемый способ связи
Демонстрационная версия BPMSoft
Заполните заявку для получения бесплатного доступа к демонстрационному стенду на 14 дней.
Заказать презентацию
Наш менеджер свяжется с Вами в ближайшее время.
Предпочитаемый способ связи
Рассчитать стоимость
Предпочитаемый способ связи
Лучшие CRM-системы в России: выводы Фонда «Сколково»
Задать вопрос
Предпочитаемый способ связи
Есть вопросы?
Не нашли для себя подходящую вакансию, или остались вопросы?
*
Есть вопросы?
Не нашли для себя подходящую вакансию, или остались вопросы?
*
Присоединяйтесь к партнерской сети BPMSoft
Оставьте свои контакты, и наш менеджер свяжется с Вами в ближайшее время
Тип партнерства*
Управление полным жизненным циклом клиента: от генерации лидов и продаж до внедрения, поддержки и продления подписки.
Разработка собственного Приложения – производного программного обеспечения, созданного на платформе BPMSoft (Базовое ПО).
Заявка на онлайн-консультации по BPMSoft
Оставьте свои контакты, и наш менеджер свяжется с Вами в ближайшее время
Стать образовательным партнёром
Оставьте свои контакты, и наш менеджер свяжется с Вами в ближайшее время.
Заявка на консультацию
Оставьте свои контакты, и наш менеджер свяжется с Вами в ближайшее время.
Подписка
Спасибо!
Ваша заявка принята.
Спасибо!
Ваша заявка принята.
Наш сотрудник свяжется с вами в течение 1-2 рабочих дней.
Внимание!
Обнаружена ошибка.
Внимание!
Обнаружена ошибка.
Вы подписаны на новостную рассылку от BPMSoft.
Вы подписаны на новостную рассылку от BPMSoft.
MAX Подписаться
Уважаемые клиенты! Предупреждаем о случаях недобросовестной конкуренции и мошенничестве в сети Интернет.
Подробнее