Для работы системы ELMA365 On-Premises требуются СУБД PostgreSQL, MongoDB, Redis, шина событий RabbitMQ и объектное хранилище данных S3. В статье описана установка баз данных и S3-хранилища в Kubernetes-кластер чартом elma365-dbs
. Возможна установка только требуемых компонентов из чарта elma365-dbs
, неиспользуемые можно отключить.
Установка состоит из четырёх этапов:
- Скачивание Helm-чарта и конфигурационного файла.
- Заполнение конфигурационного файла.
- Установка с помощью Helm в Kubernetes-кластер чарта elma365-dbs.
- Подключение к БД и S3.
Шаг 1: Скачивание Helm-чарта и конфигурационного файла
Для установки через интернет получите конфигурационный файл values-elma365-dbs.yaml
, выполнив следующую команду:
helm repo add elma365 https://charts.elma365.tech
helm repo update
helm show values elma365/elma365-dbs > values-elma365-dbs.yaml
Получение конфигурационного файла для установки в закрытом контуре без доступа в интернет
Предварительно скачайте файл на компьютере с доступом в интернет.
- Скачайте образы ELMA365 и загрузите их в локальный реестр образов. Подробнее читайте в статье «Загрузка образов ELMA365».
- Скачайте архив актуальной версии (latest) чарта
elma365-dbs из репозитория elma365, выполнив следующую команду:
helm repo add elma365 https://charts.elma365.tech
helm repo update
helm pull elma365/elma365-dbs
- Полученный архив чарта
elma365-dbs-X.Y.Z.tgz скопируйте на сервер, где будет производиться установка.
- Распакуйте чарт
elma365-dbs-X.Y.Z.tgz на сервере, где будет производиться установка, скопируйте конфигурационный файл по умолчанию values.yaml в values-elma365-dbs.yaml :
tar -xf elma365-dbs-X.Y.Z.tgz
cp elma365-dbs/values.yaml values-elma365-dbs.yaml
|
Шаг 2: Заполнение конфигурационного файла
Заполните конфигурационный файл values-elma365-dbs.yaml
для установки баз данных и S3-хранилища.
В рамках статьи рассмотрим установку баз данных и S3-хранилища в Kubernetes-кластер с помощью чарта elma365-dbs
. Для этого будут использоваться стандартные строки подключения и пароли, указанные в чарте.
В чарте elma365-dbs
находится раздел global, в котором включается или отключается установка компонентов и разделов чарта. Это нужно для конфигурирования параметров каждого компонента: postgresql, mongodb, rabbitmq, redis, minio, elasticsearch. В статье рассмотрим необходимые параметры для установки баз данных и S3-хранилища разделов этих компонентов.
- В разделе global включите установку баз данных и S3-хранилища.
Убедитесь, что в разделе global для компонентов postgresql, mongodb, rabbitmq, redis, minio в параметре enabled
указано значение true
.
# Выбор устанавливаемых БД
global:
postgresql:
# Установка postgres
enabled: true
mongodb:
# Установка mongoDB
enabled: true
redis:
# Установка redis
enabled: true
rabbitmq:
# Установка rabbitmq
enabled: true
minio:
# Установка minio для S3-хранилища
enabled: true
elasticsearch:
# Установка Elasticsearch (Включается для ELMA Bot)
enabled: false
- Параметры конфигурации PostgreSQL.
При необходимости измените параметры:
database
— наименование базы данных, которая будет создана в PostgreSQL в момент установки;username
— наименование пользователя для доступа к базе данных, указанной в database. Пользователь будет создан в PostgreSQL в момент установки;postgresPassword
— пароль для пользователя, указанного в username;size
— размер хранилища данных, подбирается индивидуально.
# Выбор устанавливаемых БД
global:
...
# Настройки БД postgres
postgresql:
auth:
# название БД
database: elma365
# пользователь
username: postgres
# пароль БД Postgres
postgresPassword: pgpassword
replicationUsername: repl_user
replicationPassword: repl_password
enablePostgresUser: true
password: pgpassword
primary:
persistence:
# размер хранилища данных (PVC)
size: 100Gi
enabled: true
...
Заполнение параметров кластеризации для PostgreSQL
Для настройки отказоустойчивости раскомментируйте и заполните параметры cluster Mode . Для параметра postgresql.readReplicas.replicaCount укажите требуемое количество реплик.
# Выбор устанавливаемых БД
global:
...
# Настройки БД postgres
postgresql:
...
# cluster Mode — раскомментируйте следующие строки
architecture: replication
readReplicas:
replicaCount: 2
replication:
synchronousCommit: 'on'
numSynchronousReplicas: 1
applicationName: replication
...
|
|
Заполнение параметров подключения к приватному registry для установки в закрытом контуре без доступа в интернет
Для подключения к приватному registry необходимо:
- Задать адрес и путь к приватному registry в параметре
postgresql.volumePermissions.image.repository для контейнера инициализации. - Указать наименование секрета с правами доступа к приватному registry в параметре
postgresql.volumePermissions.image.pullSecrets для контейнера инициализации. Секрет должен быть создан вручную и зашифрован в Base64. - Задать адрес и путь к приватному registry в параметре
postgresql.image.repository . - Указать наименование секрета с правами доступа к приватному registry в параметре
postgresql.image.pullSecrets . Секрет должен быть создан вручную и зашифрован в Base64.
# Выбор устанавливаемых БД
global:
...
# Настройки БД postgres
postgresql:
...
# Включение контейнера инициализации, который изменяет владельца и группу точки монтирования тома на `RunAsUser:fsGroup
volumePermissions:
enabled: true
# адрес и секрет для приватного registry образов контейнера инициализации
image:
registry: registry.example.com/bitnami-shell
# секрет с правами доступа к приватному registry должен быть создан вручную, зашифрованный в Base64
pullSecrets:
- myRegistryKeySecretName
...
# адрес и секрет для приватного registry
image:
registry: registry.example.com/postgresql
# секрет с правами доступа к приватному registry должен быть создан вручную, зашифрованный в Base64
pullSecrets:
- myRegistryKeySecretName
...
Где формат repository:
- адрес —
registry.example.com ; - путь —
/postgresql (для контейнера инициализации /bitnami-shell ).
|
- Параметры конфигурации MongoDB.
При необходимости измените параметры:
database
— наименование базы данных, которая будет создана в MongoDB в момент установки;username
— наименование пользователя для доступа к базе данных, указанной в database
. Пользователь будет создан в MongoDB в момент установки;password
— пароль для пользователя, указанного в username
;size
— размер хранилища данных, подбирается индивидуально.
# Выбор устанавливаемых БД
global:
...
# Настройки MongoDB
mongodb:
auth:
# пользователь
username: elma365
# название БД
database: elma365
# пароль БД
password: mongopassword
# root пароль БД
rootPassword: mongorootpassword
replicaSetKey: replicapassword
persistence:
# размер хранилища данных (PVC)
size: 20Gi
...
Заполнение параметров кластеризации для MongoDB
Для настройки отказоустойчивости раскомментируйте и заполните параметры cluster Mode . Для параметра mongodb.replicaCount укажите требуемое количество нод в кластере.
# Выбор устанавливаемых БД
global:
...
# Настройки MongoDB
mongodb:
...
# cluster Mode — раскомментируйте следующие строки
architecture: replicaset
replicaCount: 3
...
|
Заполнение параметров подключения к приватному registry для установки в закрытом контуре без доступа в интернет
Для подключения к приватному registry необходимо:
- Задать адрес и путь к приватному registry в параметре
mongodb.volumePermissions.image.repository для контейнера инициализации. - Указать наименование секрета с правами доступа к приватному registry в параметре
mongodb.volumePermissions.image.pullSecrets для контейнера инициализации. Секрет должен быть создан вручную и зашифрован в Base64. - Задать адрес и путь к приватному registry в параметре
mongodb.image.repository . - Указать наименование секрета с правами доступа к приватному registry в параметре
mongodb.image.pullSecrets . Секрет должен быть создан вручную и зашифрован в Base64.
# Выбор устанавливаемых БД
global:
...
# Настройки MongoDB
mongodb:
...
# Включение контейнера инициализации, который изменяет владельца и группу точки монтирования тома на `RunAsUser:fsGroup
volumePermissions:
enabled: true
# адрес и секрет для приватного registry образов контейнера инициализации
image:
registry: registry.example.com/bitnami-shell
# секрет с правами доступа к приватному registry должен быть создан вручную, зашифрованный в Base64
pullSecrets:
- myRegistryKeySecretName
...
# адрес и секрет для приватного registry
image:
registry: registry.example.com/mongodb
# секрет с правами доступа к приватному registry должен быть создан вручную, зашифрованный в Base64
pullSecrets:
- myRegistryKeySecretName
...
Где формат repository:
- адрес —
registry.example.com ; - путь —
/mongodb (для контейнера инициализации /bitnami-shell ).
|
- Параметры конфигурации RabbitMQ.
При необходимости измените параметры:
vhost
— наименование виртуального хоста, который будет создан в RabbitMQ в момент установки;username
— наименование пользователя для доступа к виртуальному хосту, указанному в vhost
. Пользователь будет создан в RabbitMQ в момент установки;password
— пароль для пользователя, указанного в username
;size
— размер хранилища данных, подбирается индивидуально.
# Выбор устанавливаемых БД
global:
...
# Настройки rabbitMQ
rabbitmq:
auth:
# пользователь
username: elma365
# vhost
vhost: elma365
# пароль
password: rmqpassword
erlangCookie: zk8Jdo2Kzz4ql
persistence:
# размер хранилища данных (PVC)
size: 5Gi
...
Заполнение параметров кластеризации для RabbitMQ
Для настройки отказоустойчивости раскомментируйте и заполните параметры cluster Mode . Для параметра rabbitmq.replicaCount укажите требуемое количество нод в кластере.
# Выбор устанавливаемых БД
global:
...
# Настройки rabbitMQ
rabbitmq:
...
# cluster Mode — раскомментируйте следующие строки
replicaCount: 3
...
|
Заполнение параметров подключения к приватному registry для установки в закрытом контуре без доступа в интернет
Для подключения к приватному registry необходимо:
- Задать адрес и путь к приватному registry в параметре
rabbitmq.volumePermissions.image.repository для контейнера инициализации. - Указать наименование секрета с правами доступа к приватному registry в параметре
rabbitmq.volumePermissions.image.pullSecrets для контейнера инициализации. Секрет должен быть создан вручную и зашифрован в Base64. - Задать адрес и путь к приватному registry в параметре
rabbitmq.image.repository . - Указать наименование секрета с правами доступа к приватному registry в параметре
rabbitmq.image.pullSecrets . Секрет должен быть создан вручную и зашифрован в Base64.
# Выбор устанавливаемых БД
global:
...
# Настройки rabbitMQ
rabbitmq:
...
# Включение контейнера инициализации, который изменяет владельца и группу точки монтирования тома на `RunAsUser:fsGroup
volumePermissions:
enabled: true
# адрес и секрет для приватного registry образов контейнера инициализации
image:
registry: registry.example.com/bitnami-shell
# секрет с правами доступа к приватному registry должен быть создан вручную, зашифрованный в Base64
pullSecrets:
- myRegistryKeySecretName
...
# адрес и секрет для приватного registry
image:
registry: registry.example.com/rabbitmq
# секрет с правами доступа к приватному registry должен быть создан вручную, зашифрованный в Base64
pullSecrets:
- myRegistryKeySecretName
...
Где формат repository:
- адрес —
registry.example.com ; - путь —
/rabbitmq (для контейнера инициализации /bitnami-shell ).
|
- Параметры конфигурации Redis.
При необходимости в параметре size измените размер хранилища данных, который подбирается индивидуально.
# Выбор устанавливаемых БД
global:
...
# Настройки Redis
redis:
master:
persistence:
# размер хранилища данных (PVC)
size: 10Gi
# если не определено, используется StorageClass по умолчанию
# storageClass: "-"
...
commonConfiguration: |-
maxclients 20000
replica:
persistence:
# размер хранилища данных (PVC)
size: 10Gi
...
Заполнение параметров кластеризации для Redis
Для настройки отказоустойчивости раскомментируйте и заполните параметры cluster Mode . Для параметра redis.replica.replicaCount укажите требуемое количество нод в кластере.
# Выбор устанавливаемых БД
global:
...
# Настройки Redis
redis:
...
replica:
persistence:
...
replicaCount: 3
# cluster Mode — раскомментируйте следующие строки
architecture: replication
sentinel:
enabled: true
quorum: 2
...
|
Заполнение параметров подключения к приватному registry для установки в закрытом контуре без доступа в интернет
Для подключения к приватному registry необходимо:
- Задать адрес и путь к приватному registry в параметре
redis.volumePermissions.image.repository для контейнера инициализации. - Указать наименование секрета с правами доступа к приватному registry в параметре
redis.volumePermissions.image.pullSecrets для контейнера инициализации. Секрет должен быть создан вручную и зашифрован в Base64. - Задать адрес и путь к приватному registry в параметре
redis.image.repository . - Указать наименование секрета с правами доступа к приватному registry в параметре
redis.image.pullSecrets . Секрет должен быть создан вручную и зашифрован в Base64.
# Выбор устанавливаемых БД
global:
...
# Настройки Redis
redis:
...
# Включение контейнера инициализации, который изменяет владельца и группу точки монтирования тома на `RunAsUser:fsGroup
volumePermissions:
enabled: true
# адрес и секрет для приватного registry образов контейнера инициализации
image:
registry: registry.example.com/bitnami-shell
# секрет с правами доступа к приватному registry должен быть создан вручную, зашифрованный в Base64
pullSecrets:
- myRegistryKeySecretName
...
# адрес и секрет для приватного registry
image:
registry: registry.example.com/redis
# секрет с правами доступа к приватному registry должен быть создан вручную, зашифрованный в Base64
pullSecrets:
- myRegistryKeySecretName
...
Где формат repository:
- адрес —
registry.example.com ; - путь —
/redis (для контейнера инициализации /bitnami-shell ).
|
- Параметры конфигурации MinIO.
При необходимости измените параметры:
rootUser
— наименование пользователя для доступа к S3-хранилищу. Пользователь будет создан в MinIO в момент установки;rootPassword
— пароль для пользователя, указанного в rootUser
;defaultBuckets
— наименование бакета, который будет создан в MinIO в момент установки;
Начало внимание
Наименование бакета в S3 должно соответствовать формату s3elma365.
Конец внимание
Начало примера
Примеры бакетов в S3
s3elma365
;s3elma365-dev
;s3elma365-prod
.
Конец примера
apiIngress.apiIngress.path
— наименование бакета для Ingress, должно совпадать с defaultBuckets
;apiIngress.apiIngress.name
— наименование домена (FQDN), по которому будет доступно S3 хранилище. В рамках статьи elma365_server.your_domain
;size
— размер хранилища данных, подбирается индивидуально.
# Выбор устанавливаемых БД
global:
...
# Настройки minio (S3-хранилище)
minio:
auth:
rootUser: "PZSF73JG72Ksd955JKU1HIA"
rootPassword: "aFDkj28Jbs2JKbnvJH678MNwiz88zKjsuNBHHs"
# бакет ELMA365
defaultBuckets: s3elma365
# дополнительные бакеты включаются для ELMA365 + ELMA Bot
# defaultBuckets: s3elma365,s3elmabot,elmabot-static-files,elmabot-temporary-files
apiIngress:
extraHosts:
- path: /s3elma365
name: elma365_server.your_domain
...
persistence:
# размер хранилища данных (PVC)
size: 100Gi
...
Заполнение параметров включения TLS/SSL для MinIO
Для включения поддержки TLS/SSL в MinIO выполните следующие шаги:
- Подготовьте secret с сертификатом для работы по https. Подробнее об этом читайте в статье «Подготовка secret с сертификатом для работы по HTTPS».
- Заполните параметры включения TLS/SSL для MinIO:
# Выбор устанавливаемых БД
global:
...
# Настройки minio (S3 хранилище)
minio:
...
apiIngress:
extraHosts:
- path: /s3elma365
# включение host в ingress (необходимо указать для TLS)
# для приложения включите hostEnabled в файле values-elma365.yaml
name: elma365_server.your_domain
# TLS настройки minio
extraTls:
- hosts:
- elma365_server.your_domain
secretName: "elma365-onpremise-tls"
...
где:
global.minio.extraTls.secretName — наименование secret, созданного на предыдущем шаге. В рамках статьи elma365-onpremise-tls ;global.minio.extraHosts.name и global.minio.extraTls.hosts — наименование домена (FQDN), по которому доступно S3 хранилище MinIO. В рамках статьи elma365_server.your_domain .
Если при создании secret с сертификатом для работы по https вы использовали самоподписанный сертификат с помощью OpenSSL или сертификат, выпущенный локальным удостоверяющем центром, необходимо настроить поддержку доверия пользовательскому сертификату CA. Для встроенных баз данных вы можете сделать это с помощью модуля дополнений Kyverno.
|
Заполнение параметров подключения к приватному registry для установки в закрытом контуре без доступа в интернет
Для подключения к приватному registry необходимо:
- Задать адрес и путь к приватному registry в параметре
minio.volumePermissions.image.repository для контейнера инициализации. - Указать наименование секрета с правами доступа к приватному registry в параметре
minio.volumePermissions.image.pullSecrets для контейнера инициализации. Секрет должен быть создан вручную и зашифрован в Base64. - Задать адрес и путь к приватному registry в параметре
minio.image.repository . - Указать наименование секрета с правами доступа к приватному registry в параметре
minio.image.pullSecrets . Секрет должен быть создан вручную и зашифрован в Base64.
# Выбор устанавливаемых БД
global:
...
# Настройки minio (S3-хранилище)
minio:
...
# Включение контейнера инициализации, который изменяет владельца и группу точки монтирования тома на `RunAsUser:fsGroup
volumePermissions:
enabled: true
# адрес и секрет для приватного registry образов контейнера инициализации
image:
registry: registry.example.com/bitnami-shell
# секрет с правами доступа к приватному registry должен быть создан вручную, зашифрованный в Base64
pullSecrets:
- myRegistryKeySecretName
...
# адрес и секрет для приватного registry
image:
registry: registry.example.com/minio
# секрет с правами доступа к приватному registry должен быть создан вручную, зашифрованный в Base64
pullSecrets:
- myRegistryKeySecretName
...
Где формат repository:
- адрес —
registry.example.com ; - путь —
/minio (для контейнера инициализации /bitnami-shell ).
|
Шаг 3: Установка с помощью Helm в Kubernetes-кластер чарта elma365-dbs
Выполните установку чарта elma365-dbs
в namespace elma365-dbs.
Для установки через интернет:
helm upgrade --install elma365-dbs elma365/elma365-dbs -f values-elma365-dbs.yaml -n elma365-dbs --create-namespace
Для офлайн-установки без доступа в интернет перейдите в каталог с загруженным чартом и выполните команду:
helm upgrade --install elma365-dbs ./elma365-dbs -f values-elma365-dbs.yaml -n elma365-dbs --create-namespace
Шаг 4: Подключение к БД и S3
За наименование домена кластера Kubernetes взято cluster.local.
Строка для подключения к PostgreSQL:
postgresql://elma365:SecretPassword@postgres.elma365-dbs.svc.cluster.local:5432/elma365?sslmode=disable
Строка для подключения к MongoDB:
mongodb://elma365:SecretPassword@mongo.elma365-dbs.svc.cluster.local:27017/elma365?ssl=false&replicaSet=rs0&readPreference=nearest
Строка для подключения к RabbitMQ:
amqp://elma365user:SecretPassword@rabbitmq.elma365-dbs.svc.cluster.local:5672/elma365vhost
Строка для подключения к Redis:
redis://redis.elma365-dbs.svc.cluster.local:6379/0
Строка для подключения к Redis в кластерном режиме:
redis://redis.elma365-dbs.svc.cluster.local:26379/0?masterName=mymaster
Параметры для подключения к MinIO:
- address —
elma365_your_domain
; - bucket —
s3elma365
; - region —
ru-central-1
; - access key ID —
PZSF73JG72Ksd955JKU1HIA
; - secret access key —
aFDkj28Jbs2JKbnvJH678MNwiz88zKjsuNBHHs
; - upload method —
PUT
; - enable SSL —
No
.
Удаление чарта elma365-dbs с помощью Helm в Kubernetes-кластере
Начало внимание
Перед удалением чарта elma365-dbs
произведите резервное копирование баз данных и S3-хранилища. Удаление чарта elma365-dbs
приведёт к полной потере данных приложения ELMA365.
Конец внимание
Выполните удаление чарта elma365-dbs
в namespace elma365-dbs:
helm uninstall elma365-dbs -n elma365-dbs