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

Установка ELMA365 в Kubernetes

Начало внимание

В статье приведена устаревшая инструкция для ELMA365 On-Premises. Об актуальной установке в Kubernetes читайте в статье «Установка ELMA365 Enterprise».

Конец внимание

ELMA365 On-Premises можно установить с использованием Helm v.3 в уже существующий Kubernetes-кластер.

Установленная версия кластера должна поддерживать Kubernetes API версии не ниже 1.21. Должно быть также разрешено проксирование из подов во внешнюю сеть.

ELMA365 поставляется в виде двух Helm-чартов, которые устанавливаются поочерёдно:

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

начало внимание

Чарты elma365-extension больше не поддерживаются. Переход на чарты elma365-dbs с новыми версиями баз данных выполняется с помощью дампа и его восстановления.

конец внимание

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

Также можно скачать конкретную версию, например, для 2024.4.4:

Установка чарта elma365-dbs

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

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

Обратите внимание, аргументы в квадратных скобках опциональны. Если вы используете такой аргумент, указывайте его без скобок.

Установка чарта elma365

  1. Заполните переменные в файле values-elma365.yaml.
  2. Если необходимо восстановить дамп, перед установкой ELMA365 вы можете воспользоваться утилитой elma365-backupper или выполнить скрипт elma365db.sh из чарта elma365.

Пример выполнения скрипта:

./elma365db.sh --restore --namespace elma365 --path /backup/path/ [--kubeconfig /path/to/config --context prod]

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

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

  1. Сохраните файл values-elma365.yaml для последующих обновлений.
  2. Для создания дампа можно воспользоваться утилитой elma365-backupper или скриптом elma365db.sh.

Пример выполнения скрипта:

./elma365db.sh --dump --namespace elma365 --path /backup/path/ [--kubeconfig /path/to/config --context prod]

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

  1. Скачайте Helm-чарт дополнительного набора инструментов addons по ссылке: https://dl.elma365.com/onPremise/chart/latest/addons.tar.gz.
  2. В файле values-addons.yaml в блоке grafana и kube-prometheus-stack укажите требуемый namespace для сервиса мониторинга, например namespaceOverride: monitoring, и адрес, по которому будет доступен сервис мониторинга.
  3. Создайте namespace для сервиса мониторинга командой:

kubectl create namespace monitoring

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

helm upgrade --install addons ./addons -f values-addons.yaml

  1. В файле values-elma365.yaml чарта elma365 включите дэшборды:

dashboard:
enabled:true

  1. Обновите приложение ELMA365 командой:

helm upgrade elma365 ./elma365 -f values-elma365.yaml --timeout=30m

Установка Linkerd и автомасштабирование сервисов (опционально)

Linkerd — это выделенный уровень инфраструктуры, который помогает обрабатывать связь между сервисами, автоматически шифровать соединения, обрабатывать повторные запросы и тайм-ауты, использовать телеметрию (коэффициент успешности, задержки) и т. д.

  1. Скачайте helm-чарт addons по ссылке в разделе «Ссылки для скачивания helm-чартов».
  2. Сгенерируйте сертификаты с помощью 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. Включить параметр linkerd2 в файле values-addons.yaml чарта addons:

linkerd2:
  enabled:true

  1. В разделе 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. Выполните установку чарта командой:

helm upgrade --install addons ./addons -f values-addons.yaml

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

kubectl annotate namespace default linkerd.io/inject=enabled

  1. Включить автомасштабирование сервисов параметром autoscaling в файле values-elma365.yaml через elma365:

autoscaling:
    enabled:true

  1. Обновите приложение ELMA365 командой:

helm upgrade elma365 ./elma365 -f values-elma365.yaml --timeout=30m

  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. Скачайте Helm-чарт addons по ссылке: https://dl.elma365.com/onPremise/chart/latest/addons.tar.gz.
  2. Получите IP-адрес сервиса kube-dns:

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

  1. В чарте addons в файле values-addons.yaml в блоке node-local-dns настройте следующие параметры:
  • pillar_dns_domain — домен кластера;
  • pillar_dns_server — IP-адрес сервиса kube-dns;
  • pillar_local_dns — локальный IP-адрес для NodeLocal DNS Cache.
  1. Выполните установку чарта командой:

helm upgrade --install addons ./addons -f values-addons.yaml

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

В новом чарте замените файл values-elma365.yaml  файлом, сохранённым на этапе установки, а затем выполните команду:

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

В случае изменения строк подключения (сonnection strings) к БД при обновлении приложения, перезапустите все сервисы командой:

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

Удаление

Для удаления чартов выполните команды:

helm uninstall elma365 [-n namespace]
helm uninstall elma365-dbs [-n namespace]