Развертывание сервиса синхронизации почты через
Kubernetes
В данной статье описан механизм установки, настройки и проверки сервиса синхронизации почты через Kubernetes. Описание сервиса синхронизации почты представлено в статье Сервис синхронизации почты.
Подготовка к развертыванию
Перед установкой пакета сервиса синхронизации почты выполните следующее:
- Для предоставления доступа к архиву с файлами для развертывания обратитесь в Техническую поддержку BPMSoft.
- Перед установкой убедитесь в том, что среда, на которую вы хотите устанавливать сервис, соответствует системным требованиям.
- Для работы необходимо настроить:
- Кластер Kubernetes. Подробно о том, как настроить и администрировать кластер, читайте на сайте документации Kubernetes;
- Пакетный менеджер Helm. Установка пакетного менеджера подробно описана на сайте документации Helm.
- Выполните удаление предыдущего релиза сервиса синхронизации почты, если он у вас установлен. Подробнее: Удаление предыдущего релиза.
- Создайте namespace и добавьте необходимые секреты. Подробнее: Создание namespace и добавление секретов.
- Установите инфраструктурные компоненты, необходимые для работы сервиса синхронизации почты. Подробнее: Развертывание инфраструктурных компонентов.
После выполнения предварительных действий можно выполнить установку сервиса синхронизации почты. Подробнее: Развертывание сервиса синхронизации почты.
Удаление предыдущего релиза
Для удаления предыдущего релиза сервиса синхронизации почты выполните следующее:
- Получите список установленных релизов, выполнив команду:
helm ls --namespace el
- Выполните удаление развертывания синхронизации почты, выполнив команду:
helm uninstall gs --namespace el
Чтобы полностью удалить RabbitMQ и Redis, выполните следующие шаги:
- Войдите в Lens и перейдите в раздел Persistent Volume Claims. Выберите нужное пространство имен и удалите все Persistent Volume Claims, связанные с RabbitMQ и Redis.
- Перейдите в Lens → Persistent Volumes и удалите все Claim, связанные с RabbitMQ и Redis, у которых статус Released.
Создание namespace и добавление секретов
- Добавьте namespace, выполнив следующую команду:
kubectl create namespace el
- Если используется свой прокси-репозиторий, то добавьте секрет, выполнив команду:
kubectl create secret docker-registry regcred --docker-server=repo.bpmsoft.ru --docker-username=<Пользователь> --docker-password=<Пароль> --namespace el
Вместо repo.bpmsoft.ru можно указать свой прокси-репозиторий, а вместо <Пользователь> и <Пароль> — ваши данные.
Развертывание инфраструктурных компонентов
Инфраструктурные элементы сервиса устанавливаются отдельно. В таблице 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
- Выполните аутентификацию в OCI-прокси репозиторий вашей компании:
helm registry login <docker.company.ru>
- Перейдите в директорию, в которой будет располагаться helm chart. Выполните команду:
helm pull oci://<docker.company.ru>/hub.docker.com/bitnamicharts/rabbitmq --version 15.5.1 --untar
- В результате выполнения команды появится директория rabbitmq с helm chart. Перейдите в директорию:
cd rabbitmq
- Выполните команду для развертывания 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 для нескольких сервисов параметры пользователя и/или виртуального хоста можно не указывать. Однако перед установкой сервиса синхронизации почты их придется настроить вручную.
Dragonfly
- Выполните аутентификацию в OCI-прокси репозиторий вашей компании:
helm registry login <docker.company.ru>
- Перейдите в директорию, в которой будет располагаться helm chart. Выполните команду:
helm pull oci://<docker.company.ru>/ghcr.io/dragonflydb/dragonfly-operator/helm/dragonfly-operator --version v1.1.11 --untar
- В результате выполнения команды появится директория dragonfly-operator с helm chart. Перейдите в директорию:
cd dragonfly-operator
- Выполните команду для развертывания 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-образов.
- 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).
- Для применения манифеста и развертывания Dragonfly выполните команду:
kubectl apply -f el-dragonfly-ha.yaml -n <namespace>
namespace — пространство имен, куда планируется установка Dragonfly.
Удаление инфраструктурных компонентов
RabbitMQ
- Получите список доступных релизов:
helm ls --namespace el
- Удалите развертывание RabbitMQ:
helm uninstall rabbitmq --namespace el
- В Lens удалите все PVS, относящиеся к RabbitMQ.
Dragonfly
- Из директории, где находится манифест el-dragonfly-ha.yaml, выполните команду:
kubectl delete -f el-dragonfly-ha.yaml -n <el namespace>
- Получите список доступных релизов:
helm ls --namespace <dragonfly-operator-system namespace>
- В Lens удалите все PVS, относящиеся к Dragonfly.
Развертывание сервиса синхронизации почты
После установки инфраструктурных компонентов переходите к установке компонентов микросервиса, указанных в таблице 2.
Таблица 2 – Компоненты сервиса синхронизации почты
| Название компонента | Автор | Источник | Версия helm | Версия приложения |
| Listener.Web.Api | BPMSoft | hub.docker.com | 1.0.0 | 1.0.0 |
| Listener.Api |
- Распакуйте helm пакет из архива, который вы получили в технической поддержке BPMSoft, и перейдите в директорию, где будет располагаться распакованный пакет.
- Перед развертыванием необходимо ознакомиться с выбранным профилем и внести в него корректировки как минимум для следующих параметров:
- rabbitmq.server — адрес сервиса брокера сообщений RabbitMQ;
- dragonfly.server — адрес сервиса кэширования;
- config.endpoints.listenerWebApiUrl — адрес сервиса синхронизации почты.
Значения этих параметров определяют, к какому хосту (доменному имени) будут применяться правила маршрутизации на уровне Ingress-контроллера.
- Для развертывания приложений сервиса синхронизации почты выполните одну из следующих команд на выбор:
helm install el . \
--namespace el
helm install el . \
--namespace el \
--set global.profile="demo-hub"
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.
Откат изменений
Для отката изменений выполните следующее:
- Получите список релизов, выполнив команду:
helm ls --namespace el
- Для удаления развертывания сервиса синхронизации почты, выполните следующую команду:
helm uninstall el --namespace el
- Создайте директорию el-old:
mkdir el-old
- Распакуйте helm пакет с предыдущей версией сервиса синхронизации почты и перейдите в директорию, где будет располагаться распакованный пакет.
- Выполните команду для развертывания приложений сервиса синхронизации почты:
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-сообщениями
Настройка почтового ящика