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

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

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

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

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

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

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

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

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

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

Установка чарта 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 выполните скрипт 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. Для создания дампа можно воспользоваться скриптом elma365db.sh:

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

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

  1. Скачайте helm-чарт addons по ссылке в разделе «Ссылки для скачивания helm-чартов».
  2. В чарте addons в файле 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 по ссылке в разделе «Ссылки для скачивания helm-чартов».
  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] 

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

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

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

При использовании microk8s в качестве готового кластера 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

Обратите внимание, при установке Kubernetes при помощи других инструментов дополнительная настройка Ingress-контроллера не требуется.