Установка компонента MyBPM API
Подготовка баз данных
Прежде чем установить компонент MyBPM API необходимо подготовить доступы к следующим базам данных:
- MongoDB - в этой БД будет храниться оперативная информация. Так же в ней будут храниться файлы. Если количество файлов будет велико, то их стоит вынести в отдельный кластер. В этом случае необходимо подготовить два кластера MongoDB: один для оперативной информации, другой для хранилища файлов.
- ElasticSearch - в этой БД будет тоже храниться оперативная информация - копия MongoDB. Но использоваться будет по другому. В MongoDB платформа отправляет запросы только по идентификаторам - никаких поисковых запросов туда не отправляется, чтобы не замедлить работу этой БД. Все запросы связанные с поиском отправляются в ElasticSearch.
- PostgreSQL - в ней храниться различная служебная информация для решения внутренних задач. Также в ней хранятся данные для отчётов.
- Apache Kafka - в эту БД выгружаются все изменения данных в системе. Их можно хранить, при этом можно хранить историю изменений. Также Apache Kafka используется как брокер сообщений, для обмена точечными сообщениями между различными компонентами платформы.
- Apache Zookeeper - данная БД используется для хранения конфигурации системы (конфигурационных файлов). Тут настраиваются различные взаимодействия платформы как внутри между подсистемами, так и снаружи - с другими сторонними системами.
Установка Kubernetes
После того как подготовлены все базы данных нужно установить кластер Kubernetes.
Подбор имени пространства имён для компонентов платформы MyBPM внутри Kubernetes
После установки кластера kubernetes необходимо подобрать имя пространства имён. Его рекомендуется выбирать из двух частей:
- первая часть - имя самой платформы в рамках её назначения, например, если Вы используете платформу как CRM, то назовём первую часть как crm.
- Вторая часть соответствует типу среды: например у нас имеется три среды: test, stage, prod. (тестовая, подготовительная, продуктивная). Например, на если данном этапе мы устанавливаем продуктивную среду, тогда в качестве имени второй части выбираем: prod.
Дальше эти две части соединяем тире, в нашем случае получается следующее имя:
crm-prod
В данном руководстве везде для пространства имён будет использоваться crm-prod
. Вам стоит везде заменять его на то,
которое у Вас получилось.
Вы можете использовать свои подходы для придумывания данного имени, но тот подход,
зарекомендовал себя как удобный при условии, если у Вас много различного программного обеспечения размещённого
на разных кластерах Kubernetes. По такому имени сразу становиться понятным, что имеется ввиду, и можно ли там смело
что-то менять. Например, если Вы все продуктивные среды называете с окончанием -prod
, то увидев такое окончание, Вы
будете работать аккуратно.
Установка MyBPM API
Для установки MyBPM API можно воспользоваться yaml-файлом:
Файл: 10-mybpm-api.yaml
apiVersion: v1
kind: Service
metadata:
name: mybpm-api
labels:
app: mybpm-api
namespace: crm-prod
spec:
#type: NodePort
ports:
- protocol: TCP
port: 8080
targetPort: 8080
#nodePort: 30207
selector:
app: mybpm-api
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: mybpm-api
labels:
app: mybpm-api
namespace: crm-prod
spec:
selector:
matchLabels:
app: mybpm-api
replicas: 1
template:
metadata:
labels:
app: mybpm-api
spec:
nodeSelector:
mybpm-api: ok
containers:
- name: main
image: hub.mybpm.kz/mybpm-api-release:4.24.18.7 # здесь нужно указать актуальную версию
imagePullPolicy: IfNotPresent
resources:
requests:
memory: "3Gi"
limits:
memory: "3Gi"
ports:
- containerPort: 8080
env:
- { name: MYBPM_JAVA_OPTS, value: "-Xmx2Gi -Xms2Gi" }
- { name: MYBPM_ALL_CONSUMERS_OFF, value: "true" }
- { name: MYBPM_CONSUMER_DIR, value: "api" }
- { name: MYBPM_COMPANY_CODE, value: "greetgo" }
- { name: MYBPM_LICENCE_NUMBER, value: "6120b632-f91a-416d-a7d0-180ffd7ce380" } # поставьте сюда Ваш номер лицензии
- { name: MYBPM_MONGO_SERVERS, value: "mongo:27017" } # поставьте сюда правильный доступ к MongoDB
- { name: MYBPM_ZOOKEEPER_SERVERS, value: "zookeeper-1:2181" } # поставьте сюда правильный доступ к Zookeeper
- { name: MYBPM_KAFKA_SERVERS, value: "kf-1:9092,kf-2:9092,kf-3:9092" } # поставьте сюда правильный доступ к Kafka
- { name: MYBPM_AUX1_HOST, value: "pg-aux1-host" }# поставьте сюда правильный доступ к PG
- { name: MYBPM_AUX1_PORT, value: "5432" }
- { name: MYBPM_AUX1_DB_NAME, value: "mybpm_aux1" }
- { name: MYBPM_AUX1_USER_NAME, valueFrom: { secretKeyRef: { name: pg_mybpm_aux1, key: username } } }
- { name: MYBPM_AUX1_PASSWORD, valueFrom: { secretKeyRef: { name: pg_mybpm_aux1, key: password } } }
- { name: MYBPM_ELASTIC_SEARCH_SERVERS, value: "elastic:9200" }
- { name: MYBPM_NODE_NAME, valueFrom: { fieldRef: { fieldPath: spec.nodeName } } }
- { name: MYBPM_MEMORY_LIMIT, valueFrom: { resourceFieldRef: { containerName: main, resource: limits.memory } } }
- { name: MYBPM_NODE_NAME, valueFrom: { fieldRef: { fieldPath: spec.nodeName } } }
startupProbe:
httpGet: { path: /web/health, port: 8080 }
initialDelaySeconds: 15
failureThreshold: 175
periodSeconds: 4
readinessProbe:
httpGet: { path: /web/health, port: 8080 }
initialDelaySeconds: 10
periodSeconds: 4
livenessProbe:
httpGet: { path: /web/health, port: 8080 }
initialDelaySeconds: 13
periodSeconds: 4
volumeMounts:
- { name: log-dir, mountPath: "/var/log/mybpm" }
volumes:
- name: log-dir
#... определение этого volume
Применить это файл можно с помощью команды:
kubectl apply -f 10-mybpm-api.yaml
Для работы этого файла, нужно завести секрет pg_mybpm_aux1
. Его можно создать с помощью yaml-файла:
apiVersion: v1
kind: Secret
metadata:
name: pg_mybpm_aux1
data:
username: mybpm # здесь нужно поставить правильного пользователя к postgres-у
password: 4jk1v23k4j231j4b # а здесь пароль
Подредактируйте в этих файлах параметры, как указано в комментариях.
При запуске сервера в логах будет информация о запуске.
При старте программа проверит доступы ко всем базам данных. Если какого-то доступа не будет, то произойдёт ошибка и программа остановиться с ошибкой.
Если доступы все будут, то система активирует все указанные сервисы.
Инициирует конфиги значениями по умолчанию.
И выдаст сообщение об успешном запуске. Выглядеть оно будет примерно так:
2024-08-12T10:27:10.581 k.g.m.s.d.l.MybpmServer INFO Started MybpmServer in 19.982 seconds (process running for 24.588)
После этого активирует получатели кафки.
Примечания
Настройка доступа к базам данных
Смотрите здесь: Настройка п.о., для доступа к базам данных
Параметр nodeSelector
Этот параметр позволяет контролировать на каких node-ах можно запускать данную программу, а на каких нет.
Обратите внимание, что в yaml-файле есть параметр:
nodeSelector
Этот параметр определяет node-у, на которой будет запускаться данная программа.
В нашем случае у этой настройки указано значение: mybpm-api: ok
. Это значение обозначает, что данная программа будет
запускаться только на тех node-ах, на которых установлен атрибут: mybpm-api
,
и значение этого атрибута должно быть ok
. На node-ах, где это не соблюдается, данная программа запускаться не будет.
Пожалуйста, установите данный атрибут на тех node-ах, на которых Вы планируете запускать данную программу.
Если Вы хотите, чтобы программа запускалась на любых node-ах, то просто удалите этот параметр из yaml-файла.
Масштабирование в ширину - параметр replicas
Обратите внимание, что в yaml-файле есть параметр:
replicas
Он обозначает количество подов, которые надо запустить. Если один под не справляется с текущей нагрузкой, то можно этот параметр увеличить. Тогда Kubernetes запустит дополнительные поды, и, через встроенный балансировщик нагрузки, запросы в программу распределяться равномерно.
Компонент MyBPM API не содержит в себе состояния, а значит можно запускать несколько серверов этого компонента и случайным образом распределять запросы между ними, и логических ошибок не будет появляться.
Заключение
После того как Вы установили компонент MyBPM API, можно установить компонент MyBPM WEB, и получить доступ к Web-интерфейсу платформы.
Далее