Развертывание сервиса синхронизации почты через Kubernetes

Продвинутый
Microsoft прекратила развитие платформы .NET Framework, поддержка ограничена. Рекомендуем использовать .NET 8 для новых систем и заранее планировать миграцию существующих решений.
Инструкция применима для сервиса синхронизации почты версии 1.0.0.
Инструкция подходит для развертывания в своем окружении, соответствующем системным требованиям BPMSoft. При развертывании BPMSoft в инфраструктуре других облачных провайдеров необходимо учитывать особенности и возможные ограничения инфраструктуры и предоставляемых доступов. Для уточнения деталей или при возникновении вопросов рекомендуем обратиться к документации или поддержке облачного провайдера.

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

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

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

Перед установкой пакета сервиса синхронизации почты выполните следующее:

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

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

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

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

Для удаления предыдущего релиза сервиса синхронизации почты выполните следующее:

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

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

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

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

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

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

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

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

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

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

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

Название компонента

Краткая сводка

Автор/p>

Источник

Версия helm

Версия приложения

RabbitMQ

Брокер сообщений

Bitnami

oci://hub.docker.com/bitnamicharts

15.5.3

4.0.9

Dragonfly

NoSQL хранилище

Dragonfly

oci://ghcr.io/dragonflydb

v1.28.0

v1.28.0

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

RabbitMQ

  1. Выполните аутентификацию в OCI-прокси репозиторий вашей компании:
helm registry login <docker.company.ru>
  1. Перейдите в директорию, в которой будет располагаться helm chart. Выполните команду:
helm pull oci://<docker.company.ru>/hub.docker.com/bitnamicharts/rabbitmq --version 15.5.1 --untar
  1. В результате выполнения команды появится директория rabbitmq с helm chart. Перейдите в директорию:
cd rabbitmq
  1. Выполните команду для развертывания RabbitMQ:
helm install rabbitmq oci://<docker.company.ru>/hub.docker.com/bitnamicharts/rabbitmq \
     --version <15.5.1> \
     --namespace <el namespace> \
     --create-namespace \
     --set fullnameOverride=el-rabbitmq \
     --set auth.username=<admin user name> \
     --set auth.password=<admin user password> \
     --set-string extraConfiguration="default_vhost = <el vhost>" \
     --set global.security.allowInsecureImages=true \
     --set image.pullSecrets={regcred} \
     --set global.imageRegistry=<docker.company.ru>/bitnamilegacy

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

  • version — версия helm чарта для установки RabbitMQ определенной версии. Подробнее с версиями helm чарта можно ознакомиться по ссылке;
  • namespace — имя пространства имен для установки сервиса синхронизации почты;
  • fullnameOverride — имя «хоста» для развертывания RabbitMQ. Оно должно совпадать с значением host в файле values для сервиса синхронизации почты;
  • auth.username — имя пользователя, которого нужно создать при начальной установке для подключения сервиса синхронизации почты;
  • auth.password — пароль пользователя, который нужно задать при начальной установке, для последующего подключения сервиса синхронизации почты под этим пользователем;
  • extraConfiguration="default_vhost = <el vhost>" — имя виртуального хоста, который нужно создать при начальной установке для последующего использования со стороны сервиса синхронизации почты;
  • global.security.allowInsecureImages=true — разблокирует возможность установки docker образов с прокси репозитория;
  • image.pullSecrets={regcred} — указывает какой секрет использовать для подключения к Docker прокси-репозиторию. В зависимости от версии Kubernetes может потребоваться альтернативный формат этого параметра: "image.pullSecrets[0].name=regcred";
  • global.imageRegistry=<docker.company.ru>/bitnamilegacy — указывает прокси-репозиторий для скачивания Docker образов. При использовании единого RabbitMQ для нескольких сервисов параметры пользователя и/или виртуального хоста можно не указывать. Однако перед установкой сервиса синхронизации почты их придется настроить вручную.
Примечание. В особых случаях нужно использовать оригинальный репозиторий oci://registry-1.docker.io/ вместо oci://<docker.company.ru>/hub.docker.com/.

Dragonfly

  1. Выполните аутентификацию в OCI-прокси репозиторий вашей компании:
helm registry login <docker.company.ru>
  1. Перейдите в директорию, в которой будет располагаться helm chart. Выполните команду:
helm pull oci://<docker.company.ru>/ghcr.io/dragonflydb/dragonfly-operator/helm/dragonfly-operator --version v1.1.11 --untar
  1. В результате выполнения команды появится директория dragonfly-operator с helm chart. Перейдите в директорию:
cd dragonfly-operator
  1. Выполните команду для развертывания Dragonfly Operator:
helm install dragonfly-operator oci://<docker.company.ru>/ghcr.io/dragonflydb/dragonfly-operator/helm/dragonfly-operator \
     --version <v1.1.11> \
     --namespace <dragonfly-operator-system namespace> \
     --create-namespace \
     --set rbacProxy.image.repository=<docker.company.ru>/quay.io/brancz/kube-rbac-proxy \
     --set manager.image.repository=<docker.company.ru>/docker.dragonflydb.io/dragonflydb/operator \
     --set imagePullSecrets[0].name=<elregcred secret>

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

  • version  — версия helm чарта для установки RabbitMQ определенной версии. Подробнее с версиями helm чарта можно ознакомиться по ссылке;
  • namespace  — имя пространства имен для установки сервиса синхронизации почты;
  • imagePullSecrets[0].name  — имя секрета, содержащего аутентификационные данные для доступа к внутреннему прокси-репозиторию Docker-образов.
Примечание. В особых случаях нужно использовать оригинальный репозиторий oci://ghcr.io/ вместо oci://<docker.company.ru>/ghcr.io/.
  1. Dragonfly создает PV для резервного копирования данных, используя StorageClass из манифеста. Лучше заранее настроить StorageClass, отличный от hostpath, например, nfs. Перейдите в директорию, где хранится манифест yaml для Dragonfly, и выполните команду, предварительно заменив значения в '<...>' на реальные, для создания манифеста:
cat <<EOF >>el-dragonfly-ha.yaml
apiVersion: dragonflydb.io/v1alpha1
kind: Dragonfly
metadata:
  labels:
    app.kubernetes.io/name: dragonfly
    app.kubernetes.io/instance: <el-dragonfly name>
    app.kubernetes.io/part-of: dragonfly-operator
    app.kubernetes.io/managed-by: kustomize
    app.kubernetes.io/created-by: dragonfly-operator
  name: <el-dragonfly name>
  namespace: <el namespace>
spec:
  args:
    - '--proactor_threads=2'
    - '--maxmemory=700mb'
    - '--dbfilename=<mySnapshot name>'
  image: <docker.company.ru>/docker.dragonflydb.io/dragonflydb/dragonfly:v1.28.1
  imagePullSecrets:
    - name: <regcred secret>
  imagePullPolicy: Always
  replicas: 2
  resources:
    limits:
      cpu: 600m
      memory: 750Mi
    requests:
      cpu: 500m
      memory: 500Mi
  snapshot:
    cron: '*/5 * * * *'
    persistentVolumeClaimSpec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 2Gi
      storageClassName: <nfs-storage-class name>
EOF

Параметры манифеста:

  • name / app.kubernetes.io/instance — имя сервиса Dragonfly;
  • namespace — пространство для развертывания и управления Dragonfly;
  • proactor_threads — ограничение числа потоков для Dragonfly. Это важно при большом количестве потоков на хосте/воркере. Dragonfly автоматически масштабируется по памяти. Например, для 24 потоков требуется 6 ГБ ОЗУ;
  • dbfilename — имя snapshot, создаваемого автоматически на основе настроек из раздела snapshot. Этот параметр предотвращает заполнение всего пространства pvc snapshot. При задании имени создается только один snapshot. Он используется для быстрого восстановления состояния pod после удаления или перезапуска. Затем включается синхронизация с мастером и реплика получает изменения за прошедшее время;
  • regcred — имя секрета с аутентификационными данными для внутреннего прокси-репозитория docker-образов;
  • storageClassName — имя класса для тома постоянного хранения данных (Persistent Volume).
  1. Для применения манифеста и развертывания Dragonfly выполните команду:
kubectl apply -f el-dragonfly-ha.yaml -n <namespace>

namespace — пространство имен, куда планируется установка Dragonfly.

Удаление инфраструктурных компонентов

RabbitMQ

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

Dragonfly

  1. Из директории, где находится манифест el-dragonfly-ha.yaml, выполните команду:
kubectl delete -f el-dragonfly-ha.yaml -n <el namespace>
  1. Получите список доступных релизов:
helm ls --namespace <dragonfly-operator-system namespace>
  1. В Lens удалите все PVS, относящиеся к Dragonfly.

Развертывание сервиса синхронизации почты

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

Таблица 2 – Компоненты сервиса синхронизации почты

Название компонента Автор Источник Версия helm Версия приложения
Listener.Web.Api BPMSoft hub.docker.com 1.0.0 1.0.0
Listener.Api
  1. Распакуйте helm пакет из архива, который вы получили в технической поддержке BPMSoft, и перейдите в директорию, где будет располагаться распакованный пакет.
  2. Перед развертыванием необходимо ознакомиться с выбранным профилем и внести в него корректировки как минимум для следующих параметров:
    • rabbitmq.server — адрес сервиса брокера сообщений RabbitMQ;
    • dragonfly.server — адрес сервиса кэширования;
    • config.endpoints.listenerWebApiUrl — адрес сервиса синхронизации почты.
Параметры «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 el . \
     --namespace el
Для развертывания с использованием параметров из файла demo-hub.yaml, находящегося в папке resource-profiles
helm install el . \
     --namespace el \
     --set global.profile="demo-hub"
Для развертывания с использованием параметров из файла demo-hub.yaml, находящегося в папке resource-profiles, с заменой значений для перечисленных параметров
helm install el . \
     --namespace el \
     --set global.profile="demo-hub" \
     --set global.overrideValues="true" \
     --set images.tag= \
     --set dragonfly.auth_enabled=true \
     --set dragonfly.password= \
     --set rabbitmq.password=

Параметр global.overrideValues="true" позволяет заменять значения параметров в примере. Если значения не указаны через флаг "--set", то они берутся из файла values.yaml в корне Helm чарта (по умолчанию это профиль prod).

При использовании overrideValues="true" для профилей, отличных от prod, необходимо задать значения для следующих параметров:

  • images.tag;
  • dragonfly.auth_enabled=true;
  • dragonfly.password;
  • rabbitmq.password.

Это предотвращает развертывание версии el в демо-окружении с параметрами, предназначенными для prod.

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

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

  1. Получите список релизов, выполнив команду:
helm ls --namespace el
  1. Для удаления развертывания сервиса синхронизации почты, выполните следующую команду:
helm uninstall el --namespace el
namespace и secret удалять не нужно.
  1. Создайте директорию el-old:
mkdir el-old
  1. Распакуйте helm пакет с предыдущей версией сервиса синхронизации почты и перейдите в директорию, где будет располагаться распакованный пакет.
  2. Выполните команду для развертывания приложений сервиса синхронизации почты:
helm install exchangelistener --namespace exchangelistener --version 0.10.0 ./ \
--create-namespace \
--set ingress.enabled=true \
--set apiVersion=apps/v1 \
--set ApiUrl=exchangelistener.domain.ru \
--set ingress.path=/ \
--set env.host=redis.domain.ru \
--set env.base=0 \
--set RabbitMQ.Host=rabbit.domain.ru \
--set RabbitMQ.HostApi=rabbit.domain.ru \
--set RabbitMQ.VirtualHost=/exchangelistener \
--set RabbitMQ.Login= \
--set RabbitMQ.Password= \
--set replicaCount=2 \
--set workerReplicaCount=2 \
--set RabbitMQ.ExchangeName=NewExchange \
--set RabbitMQ.QueueName=NewQueue \
--set RabbitMQ.HttpPort=15672 \
--set RabbitMQ.AmqpPort=5672 \
--set log4Net.level=INFO

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

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

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

Настройка сервиса синхронизации почты на стороне BPMSoft

Для настройки сервиса в BPMSoft необходимо установить корректные значения системных настроек в дизайнере системы:

  • «ExchangeListenerServiceUri» (код «ExchangeListenerServiceUri») — формат значения настройки:
[адрес развернутого ранее сервиса Exchange Listener]/api/listeners
  • «URL сервиса обработки событий Exchange в BPMSoft» (код «BpmCrmExchangeEventsEndpointUrl») — формат значения настройки:
[адрес анонимного сервиса ExchangeListenerService]/NewEmail

Например:

  • Для версии системы .NET Framework: https://example.com/0/ServiceModel/ExchangeListenerService.svc/NewEmail
  • Для версии системы .NET 8: https://example.com/ServiceModel/ExchangeListenerService.svc/NewEmail

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

Сервис синхронизации почты
Диагностика сервиса синхронизации почты
Общие принципы работы c email-сообщениями
Настройка почтового ящика

Материал был полезен для вас?
Запросить демонстрацию
Купить приложение
Заявка на индивидуальный тренинг
Заявка на обучение в формате тренинга
Заявка на консультацию по обучению
Готовы сделать выбор 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 Подписаться
Уважаемые клиенты! Предупреждаем о случаях недобросовестной конкуренции и мошенничестве в сети Интернет.
Подробнее