ELMA365 On-Premises > Дополнительно / Установка ELMA365 stack

Установка ELMA365 stack

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, например, для PostgreSQL global.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

  1. Добавьте репозиторий Helm ELMA365 и извлеките список переменных пакета приложения со всеми необходимыми компонентами в файл:

helm repo add elma365 https://charts.elma365.tech
helm repo update
helm show values elma365/elma365-stack > values-elma365-stack.yaml

  1. Заполните переменные в файле 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.
  1. Если требуется создать отдельный namespace, укажите его во всех командах установки.
  2. Сохраните файл values-elma365-stack.yaml для последующих обновлений.

Установка баз данных

  1. При использовании своих баз данных установку встроенных баз можно пропустить, изменив значение в параметре global.elma365-dbs.enabled на false в файле values-elma365-stack.yaml. В случае использования одной или нескольких внешних баз, например, PostgreSQL, можно пропустить его установку, изменив параметр global.postgresql.enabled на false.
  2. Выполните установку баз данных. На этом шаге необходимо отключить установку приложения 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

  1. Если необходимо восстановить дамп, перед установкой 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]

  1. Выполните установку приложения ELMA365 командой:

helm upgrade --install elma365-stack elma365/elma365-stack \
-f values-elma365-stack.yaml \
--timeout=30m --wait [-n namespace]

  1. Для создания дампа можно воспользоваться утилитой 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]

Установка средств мониторинга (опционально)

  1. В файле values-elma365-stack.yaml отключите неиспользуемые компоненты, изменив значение в параметрах global.linkerd2.enabled, global.descheduler.enabled, global.node-local-dns.enabled и global.audit.enabled на false, так как для их установки необходимы предварительные настройки.
  2. В параметрах elma365-addons.kube-prometheus-stack и elma365-addons.grafana укажите требуемый namespace для сервиса мониторинга (например, namespaceOverride: monitoring), адрес, по которому будет доступен сервис мониторинга и включите дэшборды, изменив значение в параметре elma365.global.dashboard.enabled на true.
  3. Создайте namespace для сервиса мониторинга командой:

kubectl create namespace monitoring

  1. Выполните установку следующей командой (обратите внимание на параметр --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 — это выделенный уровень инфраструктуры, который помогает обрабатывать связь между сервисами, автоматически шифровать соединения, обрабатывать повторные запросы и тайм-ауты, использовать телеметрию (коэффициент успешности, задержки) и т. д.

  1. Сгенерируйте сертификаты с помощью 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

  1. В файле values-elma365-stack.yaml отключите неиспользуемые компоненты, изменив значение в параметрах global.kube-prometheus-stack.enabled, global.grafana.enabled, global.descheduler.enabled, global.node-local-dns.enabled и global.audit.enabled на false, так как для их установки необходимы предварительные настройки.
  2. В параметрах 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-----

  1. Включите автомасштабирование сервисов, изменив значение в параметре elma365.global.autoscaling.enabled на true.
  2. Выполните установку следующей командой (обратите внимание на параметр --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]

  1. Добавьте аннотацию на namespace с приложением ELMA365 для автоматической инъекции контейнеров Linkerd-proxy в сервисы ELMA365 командой:

kubectl annotate namespace default linkerd.io/inject=enabled

  1. Перезапустите все сервисы командой:

kubectl rollout restart deploy [-n namespace] && kubectl rollout restart ds [-n namespace]

Установка NodeLocal DNS Cache (опционально)

Установка NodeLocal DNS Cache позволяет снизить нагрузку по DNS-запросам в кластере Kubernetes и повысить стабильность преобразования DNS-имён. Это позволит избежать правил DNAT, connection tracking и ограничений по количеству соединений.

  1. Получите IP-адрес сервиса kube-dns:

kubectl get svc kube-dns -n kube-system -o jsonpath={.spec.clusterIP}

  1. В файле values-elma365-stack.yaml отключите неиспользуемые компоненты, изменив значение в параметрах global.kube-prometheus-stack.enabled, global.grafana.enabled, global.descheduler.enabled, global.linkerd2.enabled и global.audit.enabled на false, так как для их установки необходимы предварительные настройки.
  2. В параметрах elma365-addons.node-local-dns укажите следующие параметры:
  • pillar_dns_domain — домен кластера;
  • pillar_dns_server — IP-адрес сервиса kube-dns;
  • pillar_local_dns — локальный IP-адрес для NodeLocal DNS Cache.
  1. Выполните установку командой (обратите внимание на параметр --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.

  1. Создайте ConfigMap с сертификатом корневого CA.

kubectl create configmap elma365-onpremise-ca --from-file=/etc/ssl/certs/rootCA.pem  [-n namespace]

  1. В файле values-elma365-stack.yaml включите Kyverno, изменив значение параметра global.kyverno.enabled на true. Затем отключите неиспользуемые компоненты, изменив значение у дополнения в параметре global на false, так как для их установки необходимы предварительные настройки.
  2. В параметрах elma365-addons.kyverno укажите требуемый namespace для сервиса Kyverno, например, namespace: kyverno. Затем включите политику добавления сертификатов, изменив значение в параметре elma365-addons.kyverno.injectСerts.enabled на true, укажите имя ConfigMap с сертификатом корневого CA. В параметре injectNamespace укажите список namespace, в которых будет применена политика добавления сертификатов. 
  3. Создайте namespace для сервиса Kyverno командой:

kubectl create namespace kyverno

  1. Выполните установку следующей командой (обратите внимание на параметр --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]

  1. Перезапустите все сервисы командой:

kubectl rollout restart deploy [-n namespace] && kubectl rollout restart ds [-n namespace]

Обновление версии ELMA365

  1. Обновите список чартов в репозитории, выполнив команду:

helm repo update

  1. Используйте файл 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

 

Имя

Описание

Значение по умолчанию

Глобальные параметры

global.elma365.enabled

Включить установку приложения ELMA365

true

global.elma365-dbs.enabled

Включить установку баз данных

true

global.postgresql.enabled

Включить PostgreSQL в установку баз данных

true

global.mongodb.enabled

Включить MongoDB в установку баз данных

true

global.redis.enabled

Включить Redis в установку баз данных

true

global.rabbitmq.enabled

Включить RabbitMQ в установку баз данных

true

global.minio.

Включить MinIO для S3 хранилища в установку баз данных

true

global.elasticsearch.enabled

Включить Elasticsearch в установку баз данных (включается для ELMA Bot)

false

global.elma365-addons.enabled

Включить установку дополнений для ELMA365

false

global.kube-prometheus-stack.enabled

Включить Prometheus в установку дополнений для ELMA365 (перед установкой необходимо создать namespace monitoring)

true

global.grafana.enabled

Включить Grafana в установку дополнений для ELMA365

true

global.linkerd2.enabled

Включить Linkerd в установку дополнений для ELMA365

true

global.descheduler.enabled

Включить Descheduler в установку дополнений для ELMA365 (необходимо не менее 3 узлов в кластере)

false

global.node-local-dns.enabled

Включить NodeLocal DNS Cache в установку дополнений для ELMA365

true

global.audit.enabled

Включить сервис Аудит безопасности в установку дополнений для ELMA365

true

Глобальные параметры ELMA365

elma365.global.host

Домен (FQDN) или IP-адрес, по которому будет доступна система

example.ru

elma365.global.ingress.hostEnabled

Включение host в ingress (значение берётся из global.host).

false

elma365.global.ingress.onpremiseTls.enabled

Включение https

false

elma365.global.ingress.onpremiseTls.secret

Имя секрета с сертификатами для работы https

"elma365-onpremise-tls"

elma365.global.ingress.onpremiseTls.enabledCA

Включение сертификата корневого CA для работы https с самоподписанным сертификатом

false

elma365.global.ingress.onpremiseTls.configCA

Имя конфигмапы с сертификатом корневого CA для работы https с самоподписанным сертификатом

"elma365-onpremise-ca"

elma365.global.ingress.annotations

Аннотации для ingress

{"kubernetes.io/ingress.class": "nginx"}

elma365.global.autoscaling.enabled

Включение автомасштабирования сервисов

true

elma365.global.autoscaling.minReplicas

Минимальное количество реплик

1

elma365.global.autoscaling.maxReplicas

Максимальное количество реплик

9

elma365.global.dashboard.enabled

Включение дэшбордов для Grafana

false

elma365.global.image.repository

Адрес для registry

hub.elma365.tech

elma365.global.image.dockerRegistry

Адрес для registry

" "

elma365.global.image.pullSecret

Секрет с правами доступа к приватному registry, должен быть создан вручную, зашифрованный в Base64

[yandexsecret]

Дополнительные параметры

elma365.global.postgres.maxIdleConns

Максимальное количество подключений к главному узлу PostgreSQL в пуле незанятых подключений

50

elma365.global.postgres.maxOpenConns

Максимальное количество открытых подключений к главному узлу PostgreSQL из пула

150

elma365.global.postgres.maxConnLife

Максимальное время жизни подключения к главному узлу PostgreSQL из пула

1m

elma365.global.postgres.poolMaxIdleConns

Максимальное количество подключений к репликам PostgreSQL в пуле незанятых подключений

50

elma365.global.postgres.poolMaxOpenConns

Максимальное количество открытых подключений к репликам PostgreSQL из пула

150

elma365.global.postgres.poolConnMaxLifetime

Максимальное время жизни подключения к репликам PostgreSQL из пула

5m

elma365.global.maxGrpcMessageSize

Максимальный размер ответов

8388608

elma365.global.maxGrpcBackoffDelay

Максимальная задержка между попытками установки GRPC-соединения

2s

elma365.global.activeDeadlineSeconds

Количество секунд, которое отводится всему Job на выполнение

3000

elma365.global.curlCreateCompanyMaxTime

Количество секунд, которое отводится Job на выполнение создания компании

1800

elma365.global.curlMigrationsMaxTime

Количество секунд, которое отводится Job на выполнение миграции

3000

Общие параметры

elma365.debug

Включить режим отладки платформы

false

elma365.bootstrapCompany.email

Электронная почта администратора

admin@mail.com

elma365.bootstrapCompany.password

Пароль администратора

test

elma365.bootstrapCompany.locale

Язык установленной системы, возможные варианты: ru-RU, en-US, sk-SK

ru-RU

elma365.language.default

Язык установленной системы, возможные варианты: ru-RU, en-US, sk-SK

ru-RU

Строки подключения (сonnection strings) для подключения к БД

elma365.db.psqlUrl

Строка подключения к БД PostgreSQL

"db.psqlUrl: 'postgres:// postgres:pgpassword@ postgres.default.svc.cluster. local:5432/elma365?sslmode=disable"

elma365.db.psqlSecret

Имя секрета со строкой подключения к БД PostgreSQL, зашифрованной в Base64 (ключ PSQL_URL)

" "

elma365.db.roPsqlUrl

Строка подключения к БД PostgreSQL только для чтения

" "

elma365.db.roPsqlSecret

Имя секрета со строкой подключения к БД PostgreSQL только для чтения, зашифрованной в Base64 (ключ RO_POSTGRES_URL)

" "

elma365.db.mongoUrl

Строка подключения к БД MongoDB для приложения

"mongodb://elma365:mongopassword@ mongo.default.svc.cluster.local: 27017/elma365?ssl=false&replicaSet= rs0&readPreference= secondaryPreferred"

elma365.db.mongoSecret

Имя секрета со строкой подключения к БД MongoDB для приложения, зашифрованной в Base64 (ключ MONGO_URL)

" "

elma365.db.vahterMongoUrl

Строка подключения к БД MongoDB для сервера авторизации

"mongodb://elma365:mongopassword@ mongo.default.svc.cluster.local: 27017/elma365?ssl=false&replicaSet= rs0&readPreference= secondaryPreferred"

elma365.db.vahterMongoSecret

Имя секрета со строкой подключения к БД MongoDB для сервера авторизации

" "

elma365.db.redisUrl

Строка подключения к Redis

"redis://redis.default.svc.cluster.local:6379/0"

elma365.db.redisSecret

Имя секрета со строкой подключения к Redis, зашифрованной в Base64 (ключ REDIS_URL)

" "

elma365.db.amqpUrl

Строка подключения к RabbitMQ

"amqp://elma365:rmqpassword@ rabbitmq.default.svc. cluster.local:5672/elma365"

elma365.db.amqpSecret

Имя секрета со строкой подключения к RabbitMQ, зашифрованной в Base64 (ключ AMQP_URL)

" "

elma365.db.s3.method

Метод запросов

PUT

elma365.db.s3.accesskeyid

Имя пользователя

PZSF73JG72Ksd955JKU1HIA

elma365.db.s3.secretaccesskey

Пароль для пользователя

aFDkj28Jbs2JKbnvJH678MNwiz88zKjsuNBHHs

elma365.db.s3.bucket

Список бакетов

s3elma365

elma365.db.s3.backend.address

Адрес S3

example.ru

elma365.db.s3.backend.region

Регион

us-east-1

elma365.db.s3.ssl.enabled

Включение SSL

"false"

elma365.db.s3Secret

Имя секрета с подключением к S3 хранилищу файлов, зашифрованной в Base64

 # (ключи S3_BACKEND_ADDRESS, S3_REGION, S3_KEY, S3_SECRET, S3_BUCKET, S3_SSL_ENABLED, S3_UPLOAD_METHOD)

" "

Настройки для подключения к SMTP-серверу отправки почты

elma365.mailer.smtp.host

Адрес SMTP-сервера

" "

elma365.mailer.smtp.port

Порт SMTP-сервера

" "

elma365.mailer.smtp.from

Адрес отправителя электронной почты

" "

elma365.mailer.smtp.user

Пользователь для авторизации на SMTP-сервере

" "

elma365.mailer.smtp.password

Пароль для авторизации на SMTP-сервере

" "

elma365.mailer.smtp.needTLS

Используется ли шифрование

false

Глобальные параметры сервиса «Аудит безопасности»

elma365-addons.audit.global.psql_url

Строка подключения к БД PostgreSQL

"postgresql://postgres:pgpassword@ postgres.default.svc.cluster. local:5432/audit?sslmode=disable"

elma365-addons.audit.image.repository

Адрес для registry

hub.elma365.tech

elma365-addons.audit.image.pullSecret

Секрет с правами доступа к приватному registry, должен быть создан вручную, зашифрованный в Base64

[yandexsecret]