ELMA Bot / Установка ELMA Bot в Kubernetes

Установка ELMA Bot в Kubernetes

ELMA Bot On-Premises можно установить в уже существующий Kubernetes-кластер. ELMA Bot поставляется в виде двух helm-чартов:

  • elma365-dbs — набор баз данных и хранилищ, необходимых для работы ELMA Bot. Также есть возможность использовать собственные базы данных ElasticSearch, MongoDB, Redis, RabbitMQ, хранилище S3, указав строки подключения к ним values чарта elma-bot. При этом в файле values-dbs.yaml установку соответствующих компонентов можно отключить, выставив значение false, например, для PostgreSQL: global.postgresql.enabled. Если все пять компонентов чарта будут выставлены в false, то установка этого чарта не требуется. Подробнее о создании баз данных читайте в разделе «Подготовка внешних баз данных».
  • elma-bot — чарт с ELMA Bot.

Ссылки для скачивания helm-чартов

Подготовка к установке

Перед установкой ELMA Bot необходимо выполнить следующее:

  • настроить kubernetes-кластер в соответствии с требованиями для установки;
  • зарегистрировать домен;
  • получить Wildcard ssl сертификат или uсc ssl сертификат для поддоменов: admin, auth, designer, client, elma365, kb, установить ssl сертификат в kubernetes;
  • в случае использования общего RWX-volume (sharedPVC) предварительно создать pvc с рекомендуемым размером 8Gi.

Чтобы установить ssl сертификат для домена в kubernetes, используйте команду:

kubectl create secret tls example-com-tls [-n namespace] \
--key < private key filename> \
--cert < certificate filename>

Чтобы создать RWX-volume (опционально):

kubectl create -f pvc.yaml

Пример PersistentVolumeClaim манифеста pvc.yaml:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: elmabot
  labels:
    tier: elmabot
spec:
  accessModes:
  - ReadWriteMany
  resources:
    requests:
      storage: 8Gi
  storageClassName: microk8s-hostpath
  volumeMode: Filesystem

Установка helm-чартов

Установка производится с использованием Helm v.3 в два этапа.

1. Установка баз данных (чарт elma365-dbs).

2. Установка ELMA bot (чарт ELMA bot).

Установка баз данных (чарт elma365-dbs)

  1. Скачайте и распакуйте helm-чарт elma365-dbs:

curl -fsSO https://dl.elma365.com/onPremise/chart/latest/elma365-dbs.tar.gz && tar -xvf elma365-dbs.tar.gz

  1. Настройте, задав параметры в файле values-dbs.yaml. Как минимум, необходимо включить elasticsearch и создать s3 buckets: s3elma365,s3elmabot, elmabot-static-files, elmabot-temporary-files:

global:
  elasticsearch:
    enabled: true
minio:
  defaultBuckets: s3elma365,s3elmabot,elmabot-static-files,elmabot-temporary-files

  1. При установке с ELMA365 необходимо настроить ingress и ssl для minio. Пример конфигурации для example.com с сертификатом example-com-tls:

minio:
  defaultBuckets: s3elma365,s3elmabot,elmabot-static-files,elmabot-temporary-files
  apiIngress:
    extraHosts:
      - path: /s3elma365
        name: example.com
    extraTls:
      - hosts:
          - example.com
        secretName: "example-com-tls"

  1. Если требуется создать отдельный namespace, укажите его во всех командах установки.
  2. После настройки values-dbs.yaml установите helm-чарт:

helm upgrade --install elma365-dbs ./elma365-dbs -f values-dbs.yaml [-n namespace]

Установка ELMA Bot (чарт elma-bot)

  1. Скачайте и распакуйте helm-чарт elma-bot:

curl -fsSO https://dl.elma365.com/elma-bot/elmabot.tar.gz && mkdir -p ./elma-bot && tar -xvf elmabot.tar.gz -C ./elma-bot

  1. Заполните параметры в файле values.yaml.

Минимально необходимые параметры — строки подключения к базам данных и s3, host, ssl сертификат:

global:
  host: example.com
  ingress:
    existingTLSSecret: example-com-tls
db:
  mongoUrl: 'mongodb://elma365:mongopassword@mongo:27017/elma365?ssl=false&replicaSet=rs0&readPreference=secondaryPreferred'
  amqpUrl: amqp://elma365:rmqpassword@rabbitmq:5672/elma365
  redisUrl: redis:6379
  elasticsearchUrl: http://elasticsearch:9200
  postgresUrl: 'postgres://postgres:pgpassword@postgres:5432/elma365?sslmode=disable'
  s3:
    accesskeyid: PZSF73JG72Ksd955JKU1HIA
    secretaccesskey: aFDkj28Jbs2JKbnvJH678MNwiz88zKjsuNBHHs
    Url: http://minio:80
    buckets:
      temproraryFiles: elmabot-temporary-files
      staticFiles: elmabot-static-files
      bot: s3elmabot

  1. Установите elma-bot:

helm upgrade --install elma-bot ./elma-bot --timeout=30m --wait [-n namespace]

Настройка интеграции ELMA Bot и Elma365

Интеграция с ELMA365

Для интеграции с Elma365 необходимо соблюсти ряд условий:

  • cо стороны ELMA365:
    • установить с tls;
    • настроить сервисы elmabot-proxy, hydra-adaptor, settings;
    • активировать лицензии платформы и ELMA365 Service. Подробнее об этом читайте в статье «Активация».  
  • cо стороны ELMA Bot:
    • включить провайдер авторизации (сервис hydra);
    • настроить параметры global.elma365Integration.

Пример настройки интеграции Elma365 и ELMA Bot:

  • values.yaml Elma365 helm-чарт:

elmabot-proxy:
  appconfig:
    apiUrl: https://elma365.example.com
    grantType: elma.assistant.auth.grants.impersonation.elma365
    identityServerUrl: https://auth.example.com
    oidcUri: example.com
    scope: elma.assistant.scopes.api.gateways.elma365 elma.assistant.scopes.auth.impersonation
hydra-adaptor:
  appconfig:
    client_id: elma.assistant.clients.external.elma365.server
    client_secret: wvmtLu1KAvf8XjtULBFJ3DP0eB
    hydraAdminURL: http://hydra-admin:4445
    loginEndpoint: https://example.com/ext-api/oidc-adaptor/login
settings:
  appconfig:
    onPremiseCustomEnabledFeatureFlags:
    - allowLinesBots

  • values.yaml ELMA Bot helm-чарт:

global:
  elma365Integration:
    clientSecret: wvmtLu1KAvf8XjtULBFJ3DP0eB
    elma365Uri: example.com
    elma365TlsSecret: example-com-tls
  host: example.com
  ingress:
    existingTLSSecret: example-com-tls
 
hydra:
  enabled: true

Требования к конфигурации Kubernetes

Установленная версия кластера kubernetes должна поддерживать Kubernetes API v.2, Kubernetes version 1.19.

Также должно быть разрешено проксирование из pod’ов во внешнюю сеть.

При использовании microk8s (рекомендуется версия 1.21) в качестве готового кластера Kubernetes убедитесь, что установлены следующие компоненты:

  • storage — Default storage class;
  • dns — CoreDNS;
  • rbac — RBAC;
  • ingress — Ingress controller;
  • helm3 — Helm3.

Для включения используется команда microk8s.enable, например, для ingress:

microk8s.enable ingress

Ingress controller должен быть настроен согласно следующей конфигурации:

extraPortMappings:
  - containerPort: 80
    hostPort: 80
    protocol: TCP
  - containerPort: 443
    hostPort: 443
    protocol: TCP

В случае установки кластера с помощью Kubernetes in Docker (KinD) необходимо включить ingress controller в конфигурационном файле при создании:

kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
  kubeadmConfigPatches:
    kind: InitConfiguration
    nodeRegistration:
      kubeletExtraArgs:
        node-labels: "ingress-ready=true"
  extraPortMappings:
  - containerPort: 80
    hostPort: 80
    protocol: TCP
  - containerPort: 443
    hostPort: 443
    protocol: TCP

Минимальные системные требования

Операционная система:

  • Ubuntu Server 20.04 LTS;
  • Astra Linux.

Дополнительное ПО:

  • tar;
  • bash;
  • curl;
  • для установки системы нужен доступ в интернет;
  • технология виртуализации должна поддерживать AVX2 (важно для сервисов обучения ML моделей распознавания языка).

CPU:

  • 8x2.2Ghz;
  • Рекомендуется Intel Xeon;
  • Должна быть поддержка инструкций AVX2.

RAM:

  • 20Gb.

Диски:

  • 100Gb RAID (ОС + приложения);
  • 500Gb RAID (данные).

Сеть:

  • 1Gb/s для внутренней сети между серверами;
  • 100Mb/s для внешней сети от сервера приложений к администраторам и пользователям.