ELMA365 On-Premises можно установить в уже существующий Kubernetes-кластер. ELMA365 поставляется в виде Helm-чартов:
- elma365-stack — полный стэк ELMA365, включает в себя Helm-пакеты
elma365
,elma365-dbs
иelma365-addons
; - elma365 — пакет приложения ELMA365;
- elma365-dbs — набор баз данных и хранилищ, необходимых для работы ELMA365. Также есть возможность использовать собственные базы данных PostgreSQL, MongoDB, Redis, RabbitMQ, хранилище S3, указав строки подключения к ним
values
пакета elma365. При этом в файлеvalues.yaml
установку соответствующих компонентов можно отключить, выставив значениеfalse
, например, для PostgreSQLglobal.postgresql.enabled
. Если все пять компонентов чарта будут выставлены вfalse
, установка этого чарта не требуется. О создании баз данных читайте в разделе «Подготовка внешних баз данных»; - elma365-addons — дополнения для ELMA365 Enterprise, включающие в себя систему маршрутизации (Service Mesh) Linkerd, систему мониторинга Prometheus + Grafana, а также Descheduler, NodeLocal DNSCache и модуль Аудит безопасности.
начало внимание
Чарты elma365-extension больше не поддерживаются. Переход на чарты elma365-dbs с новыми версиями баз данных выполняется с помощью дампа и его восстановления.
конец внимание
Требования к конфигурации Kubernetes
Установленная версия кластера Kubernetes должна поддерживать Kubernetes API v.2 (версия Kubernetes не ниже 1.21) и содержать следующие компоненты: ingress-nginx контроллер, coredns, rbac, storageclass.
Установка производится с использованием Helm v.3.
Должно быть разрешено проксирование из подов во внешнюю сеть.
Установка ELMA365 с помощью чарта elma365-stack
- Добавьте репозиторий Helm ELMA365 и извлеките список переменных пакета приложения со всеми необходимыми компонентами в файл:
helm repo add elma365 https://charts.elma365.tech
helm repo update
helm show values elma365/elma365-stack > values-elma365-stack.yaml
- Заполните переменные в файле
values-elma365-stack.yaml
, заменив как минимум следующие параметры:
elma365.global.host
— домен (FQDN) или IP-адрес, по которому будет доступна система;elma365.bootstrapCompany.email
— электронная почта администратора;elma365.bootstrapCompany.password
— пароль администратора;elma365.db.psqlUrl
— строка подключения к БД PostgreSQL;elma365.db.mongoUrl
— строка подключения к БД MongoDB для приложения;elma365.db.vahterMongoUrl
— строка подключения к БД MongoDB для сервера авторизации;elma365.db.redisUrl
— строка подключения к Redis;elma365.db.amqpUrl
— строка подключения к RabbitMQ;elma365.db.s3.method
— метод запросов к S3;elma365.db.s3.accesskeyid
— имя пользователя S3;elma365.db.s3.secretaccesskey
— пароль для пользователя S3;elma365.db.s3.bucket
— бакет S3;elma365.db.s3.backend.address
— адрес S3;elma365.db.s3.backend.region
— регион S3;elma365.db.s3.ssl.enabled
— включение SSL S3.
- Если требуется создать отдельный
namespace
, укажите его во всех командах установки. - Сохраните файл
values-elma365-stack.yaml
для последующих обновлений.
Установка баз данных
- При использовании своих баз данных установку встроенных баз можно пропустить, изменив значение в параметре
global.elma365-dbs.enabled
наfalse
в файлеvalues-elma365-stack.yaml
. В случае использования одной или нескольких внешних баз, например, PostgreSQL, можно пропустить его установку, изменив параметрglobal.postgresql.enabled
наfalse
. - Выполните установку баз данных. На этом шаге необходимо отключить установку приложения ELMA365 следующей командой (обратите внимание на параметр
--set global.elma365.enabled=false
):
helm upgrade --install elma365-stack elma365/elma365-stack \
-f values-elma365-stack.yaml \
--set global.elma365.enabled=false \
--timeout=30m --wait \
[-n namespace]
Установка приложения ELMA365
- Если необходимо восстановить дамп, перед установкой ELMA365 вы можете воспользоваться утилитой elma365-backupper или выполнить скрипт
elma365db.sh
из чарта elma365.
Пример выполнения скрипта:
helm pull elma365/elma365-stack --untar
./elma365-stack/charts/elma365/elma365db.sh --restore --path /backup/path/ \
[--kubeconfig /path/to/config --context prod] [-n namespace]
- Выполните установку приложения ELMA365 командой:
helm upgrade --install elma365-stack elma365/elma365-stack \
-f values-elma365-stack.yaml \
--timeout=30m --wait [-n namespace]
- Для создания дампа можно воспользоваться утилитой elma365-backupper или выполнить скрипт
elma365db.sh
из чарта elma365.
Пример использования скрипта:
helm pull elma365/elma365-stack --untar
./elma365-stack/charts/elma365/elma365db.sh --dump --path /backup/path/ \
[--kubeconfig /path/to/config --context prod] [-n namespace]
Установка средств мониторинга (опционально)
- В файле
values-elma365-stack.yaml
отключите неиспользуемые компоненты, изменив значение в параметрахglobal.linkerd2.enabled
,global.descheduler.enabled
,global.node-local-dns.enabled
иglobal.audit.enabled
наfalse
, так как для их установки необходимы предварительные настройки. - В параметрах
elma365-addons.kube-prometheus-stack
иelma365-addons.grafana
укажите требуемыйnamespace
для сервиса мониторинга (например,namespaceOverride: monitoring
), адрес, по которому будет доступен сервис мониторинга и включите дэшборды, изменив значение в параметреelma365.global.dashboard.enabled
наtrue
. - Создайте
namespace
для сервиса мониторинга командой:
kubectl create namespace monitoring
- Выполните установку следующей командой (обратите внимание на параметр
--set global.elma365-addons.enabled=true
):
helm upgrade --install elma365-stack elma365/elma365-stack \
-f values-elma365-stack.yaml \
--set global.elma365-addons.enabled=true \
--timeout=30m --wait \
[-n namespace]
Установка Linkerd и автомасштабирование сервисов (опционально)
Linkerd — это выделенный уровень инфраструктуры, который помогает обрабатывать связь между сервисами, автоматически шифровать соединения, обрабатывать повторные запросы и тайм-ауты, использовать телеметрию (коэффициент успешности, задержки) и т. д.
- Сгенерируйте сертификаты с помощью
openssl
, выполнив команды ниже. Linkerd требует сертификат привязки доверия и сертификаты эмитента с соответствующим ключом для поддержки взаимных TLS-соединений между сервисами, для всех сертификатов требуется алгоритм ECDSA P-256.
# Создать закрытый ключ CA
openssl ecparam -name prime256v1 -genkey -noout -out ca-private.pem
# Создать открытый ключ CA
openssl ec -in ca-private.pem -pubout -out ca-public.pem
# Создать самоподписанный сертификат CA
openssl req -x509 -new -key ca-private.pem -days 365 \
-out ca.crt -subj "/CN=root.linkerd.cluster.local"
# Создать закрытый ключ эмитента
openssl ecparam -name prime256v1 -genkey -noout -out issuer-private.pem
# Создать открытый ключ эмитента
openssl ec -in issuer-private.pem -pubout -out issuer-public.pem
# Создать запрос на подпись сертификата
openssl req -new -key issuer-private.pem -out issuer.csr \
-subj "/CN=identity.linkerd.cluster.local" \
-addext basicConstraints=critical,CA:TRUE
# Создать сертификат эмитента, подписав запрос
openssl x509 \
-extfile /etc/ssl/openssl.cnf \
-extensions v3_ca \
-req \
-in issuer.csr \
-days 180 \
-CA ca.crt \
-CAkey ca-private.pem \
-CAcreateserial \
-extensions v3_ca \
-out issuer.crt
# Удалить запрос на подпись сертификата
rm issuer.csr
- В файле
values-elma365-stack.yaml
отключите неиспользуемые компоненты, изменив значение в параметрахglobal.kube-prometheus-stack.enabled
,global.grafana.enabled
,global.descheduler.enabled
,global.node-local-dns.enabled
иglobal.audit.enabled
наfalse
, так как для их установки необходимы предварительные настройки. - В параметрах
elma365-addons.linkerd2
укажите требуемыйnamespace
для сервиса Linkerd (например,namespace: linkerd
), содержимое сертификатов, ключа и срок действия сертификатаcrtExpiry
. Обратите внимание, значение должно соответствовать дате истечения срока действия сертификата эмитента.
identityTrustAnchorsPEM: |
-----BEGIN CERTIFICATE-----
содержимое сертификата ca.crt
-----END CERTIFICATE-----
identity:
issuer:
crtExpiry: 2023-03-30T05:28:39Z
tls:
crtPEM: |
-----BEGIN CERTIFICATE-----
содержимое сертификата issuer.crt
-----END CERTIFICATE-----
keyPEM: |
-----BEGIN EC PRIVATE KEY-----
содержимое сертификата issuer-private.pem
-----END EC PRIVATE KEY-----
- Включите автомасштабирование сервисов, изменив значение в параметре
elma365.global.autoscaling.enabled
наtrue
. - Выполните установку следующей командой (обратите внимание на параметр
--set global.elma365-addons.enabled=true
):
helm upgrade --install elma365-stack elma365/elma365-stack \
-f values-elma365-stack.yaml --set global.elma365-addons.enabled=true \
--timeout=30m --wait [-n namespace]
- Добавьте аннотацию на
namespace
с приложением ELMA365 для автоматической инъекции контейнеров Linkerd-proxy в сервисы ELMA365 командой:
kubectl annotate namespace default linkerd.io/inject=enabled
- Перезапустите все сервисы командой:
kubectl rollout restart deploy [-n namespace] && kubectl rollout restart ds [-n namespace]
Установка NodeLocal DNS Cache (опционально)
Установка NodeLocal DNS Cache позволяет снизить нагрузку по DNS-запросам в кластере Kubernetes и повысить стабильность преобразования DNS-имён. Это позволит избежать правил DNAT, connection tracking и ограничений по количеству соединений.
- Получите IP-адрес сервиса kube-dns:
kubectl get svc kube-dns -n kube-system -o jsonpath={.spec.clusterIP}
- В файле
values-elma365-stack.yaml
отключите неиспользуемые компоненты, изменив значение в параметрахglobal.kube-prometheus-stack.enabled
,global.grafana.enabled
,global.descheduler.enabled
,global.linkerd2.enabled
иglobal.audit.enabled
наfalse
, так как для их установки необходимы предварительные настройки. - В параметрах
elma365-addons.node-local-dns
укажите следующие параметры:
pillar_dns_domain
— домен кластера;pillar_dns_server
— IP-адрес сервиса kube-dns;pillar_local_dns
— локальный IP-адрес для NodeLocal DNS Cache.
- Выполните установку командой (обратите внимание на параметр
--set global.elma365-addons.enabled=true
):
helm upgrade --install elma365-stack elma365/elma365-stack \
-f values-elma365-stack.yaml --set global.elma365-addons.enabled=true \
--timeout=30m --wait [-n namespace]
Установка Kyverno (опционально)
Kyverno позволяет управлять специфическими конфигурациями среды независимо от конфигураций ресурсов, применять передовые методы настройки для своих кластеров, в частности, путём блокировки или изменения запросов API.
Политика добавления пользовательских сертификатов CA во все контейнеры
В некоторых случаях требуется доверять пользовательским сертификатам CA. Kyverno позволяет автоматически монтировать их в контейнеры. Политика добавляет том, содержащий сертификат, ко всем контейнерам с меткой tier=elma365.
- Создайте ConfigMap с сертификатом корневого CA.
kubectl create configmap elma365-onpremise-ca --from-file=/etc/ssl/certs/rootCA.pem [-n namespace]
- В файле
values-elma365-stack.yaml
включите Kyverno, изменив значение параметраglobal.kyverno.enabled
наtrue
. Затем отключите неиспользуемые компоненты, изменив значение у дополнения в параметреglobal
наfalse
, так как для их установки необходимы предварительные настройки. - В параметрах
elma365-addons.kyverno
укажите требуемыйnamespace
для сервиса Kyverno, например,namespace: kyverno
. Затем включите политику добавления сертификатов, изменив значение в параметреelma365-addons.kyverno.injectСerts.enabled
наtrue
, укажите имя ConfigMap с сертификатом корневого CA. В параметреinjectNamespace
укажите списокnamespace
, в которых будет применена политика добавления сертификатов. - Создайте
namespace
для сервиса Kyverno командой:
kubectl create namespace kyverno
- Выполните установку следующей командой (обратите внимание на параметр
--set global.elma365-addons.enabled=true
:
helm upgrade --install elma365-stack elma365/elma365-stack \
-f values-elma365-stack.yaml --set global.elma365-addons.enabled=true \
--timeout=30m --wait [-n namespace]
- Перезапустите все сервисы командой:
kubectl rollout restart deploy [-n namespace] && kubectl rollout restart ds [-n namespace]
Обновление версии ELMA365
- Обновите список чартов в репозитории, выполнив команду:
helm repo update
- Используйте файл
values-elma365-stack.yaml
, сохранённый на этапе установки, а затем выполните команду:
helm upgrade --install elma365-stack elma365/elma365-stack -f values-elma365-stack.yaml --timeout=30m --wait [-n namespace]
В случае изменения строк подключения (сonnection strings) к БД при обновлении приложения перезапустите все сервисы командой:
kubectl default rollout restart deploy [-n namespace] && kubectl default rollout restart ds [-n namespace]
Удаление чарта elma365
Для удаления пакета ELMA365 посмотрите список установленных релизов, а затем выполните команду удаления:
helm list [-n namespace]
helm uninstall elma365-stack [-n namespace]
Параметры чарта elma365-stack
Имя |
Описание |
Значение по умолчанию |
Глобальные параметры |
||
|
Включить установку приложения ELMA365 |
|
|
Включить установку баз данных |
|
|
Включить PostgreSQL в установку баз данных |
|
|
Включить MongoDB в установку баз данных |
|
|
Включить Redis в установку баз данных |
|
|
Включить RabbitMQ в установку баз данных |
|
|
Включить MinIO для S3 хранилища в установку баз данных |
|
|
Включить Elasticsearch в установку баз данных (включается для ELMA Bot) |
|
|
Включить установку дополнений для ELMA365 |
|
|
Включить Prometheus в установку дополнений для ELMA365 (перед установкой необходимо создать |
|
|
Включить Grafana в установку дополнений для ELMA365 |
|
|
Включить Linkerd в установку дополнений для ELMA365 |
|
|
Включить Descheduler в установку дополнений для ELMA365 (необходимо не менее 3 узлов в кластере) |
|
|
Включить NodeLocal DNS Cache в установку дополнений для ELMA365 |
|
|
Включить сервис Аудит безопасности в установку дополнений для ELMA365 |
|
Глобальные параметры ELMA365 |
||
|
Домен (FQDN) или IP-адрес, по которому будет доступна система |
|
|
Включение |
|
|
Включение https |
|
|
Имя секрета с сертификатами для работы https |
|
|
Включение сертификата корневого CA для работы https с самоподписанным сертификатом |
|
|
Имя конфигмапы с сертификатом корневого CA для работы https с самоподписанным сертификатом |
|
|
Аннотации для ingress |
|
|
Включение автомасштабирования сервисов |
|
|
Минимальное количество реплик |
1 |
|
Максимальное количество реплик |
9 |
|
Включение дэшбордов для Grafana |
|
|
Адрес для registry |
|
|
Адрес для registry |
" " |
|
Секрет с правами доступа к приватному registry, должен быть создан вручную, зашифрованный в Base64 |
|
Дополнительные параметры |
||
|
Максимальное количество подключений к главному узлу PostgreSQL в пуле незанятых подключений |
50 |
|
Максимальное количество открытых подключений к главному узлу PostgreSQL из пула |
150 |
|
Максимальное время жизни подключения к главному узлу PostgreSQL из пула |
1m |
|
Максимальное количество подключений к репликам PostgreSQL в пуле незанятых подключений |
50 |
|
Максимальное количество открытых подключений к репликам PostgreSQL из пула |
150 |
|
Максимальное время жизни подключения к репликам PostgreSQL из пула |
5m |
|
Максимальный размер ответов |
8388608 |
|
Максимальная задержка между попытками установки GRPC-соединения |
2s |
|
Количество секунд, которое отводится всему Job на выполнение |
3000 |
|
Количество секунд, которое отводится Job на выполнение создания компании |
1800 |
|
Количество секунд, которое отводится Job на выполнение миграции |
3000 |
Общие параметры |
||
|
Включить режим отладки платформы |
|
|
Электронная почта администратора |
|
|
Пароль администратора |
test |
|
Язык установленной системы, возможные варианты: ru-RU, en-US, sk-SK |
ru-RU |
|
Язык установленной системы, возможные варианты: ru-RU, en-US, sk-SK |
ru-RU |
Строки подключения (сonnection strings) для подключения к БД |
||
|
Строка подключения к БД PostgreSQL |
|
|
Имя секрета со строкой подключения к БД PostgreSQL, зашифрованной в Base64 (ключ PSQL_URL) |
" " |
|
Строка подключения к БД PostgreSQL только для чтения |
" " |
|
Имя секрета со строкой подключения к БД PostgreSQL только для чтения, зашифрованной в Base64 (ключ RO_POSTGRES_URL) |
" " |
|
Строка подключения к БД MongoDB для приложения |
|
|
Имя секрета со строкой подключения к БД MongoDB для приложения, зашифрованной в Base64 (ключ MONGO_URL) |
" " |
|
Строка подключения к БД MongoDB для сервера авторизации |
|
|
Имя секрета со строкой подключения к БД MongoDB для сервера авторизации |
" " |
|
Строка подключения к Redis |
|
|
Имя секрета со строкой подключения к Redis, зашифрованной в Base64 (ключ REDIS_URL) |
" " |
|
Строка подключения к RabbitMQ |
|
|
Имя секрета со строкой подключения к RabbitMQ, зашифрованной в Base64 (ключ AMQP_URL) |
" " |
|
Метод запросов |
PUT |
|
Имя пользователя |
|
|
Пароль для пользователя |
|
|
Список бакетов |
|
|
Адрес S3 |
|
|
Регион |
|
|
Включение SSL |
" |
|
Имя секрета с подключением к S3 хранилищу файлов, зашифрованной в Base64 # (ключи S3_BACKEND_ADDRESS, S3_REGION, S3_KEY, S3_SECRET, S3_BUCKET, S3_SSL_ENABLED, S3_UPLOAD_METHOD) |
" " |
Настройки для подключения к SMTP-серверу отправки почты |
||
|
Адрес SMTP-сервера |
" " |
|
Порт SMTP-сервера |
" " |
|
Адрес отправителя электронной почты |
" " |
|
Пользователь для авторизации на SMTP-сервере |
" " |
|
Пароль для авторизации на SMTP-сервере |
" " |
|
Используется ли шифрование |
|
Глобальные параметры сервиса «Аудит безопасности» |
||
|
Строка подключения к БД PostgreSQL |
|
|
Адрес для registry |
|
|
Секрет с правами доступа к приватному registry, должен быть создан вручную, зашифрованный в Base64 |
|