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-чартов
elma365-dbs: https://dl.elma365.com/onPremise/chart/latest/elma365-dbs.tar.gz
elma365: https://dl.elma365.com/onPremise/chart/latest/elma365.tar.gz
addons: https://dl.elma365.com/onPremise/chart/latest/addons.tar.gz
Также можно скачать конкретную версию, например, для 2022.7.5:
elma365: https://dl.elma365.com/onPremise/chart/master/elma365-2022.7.5.tar.gz
Установка чарта elma365-dbs
- Заполните переменные в файле values-dbs.yaml. При использовании своих баз данных установку встроенных баз можно отключить.
- Если требуется создать отдельный namespace, укажите его во всех командах установки.
- Выполните команду:
helm upgrade --install elma365-dbs ./elma365-dbs -f values-dbs.yaml [-n namespace]
Установка чарта elma365
- Заполните переменные в файле values-elma365.yaml.
- Если необходимо восстановить дамп, перед установкой чарта elma365 выполните скрипт elma365db.sh из чарта elma365:
./elma365db.sh --restore --namespace elma365 --path /backup/path/ [--kubeconfig /path/to/config --context prod]
- Выполните установку командой:
helm upgrade --install elma365 ./elma365 -f values-elma365.yaml --timeout=30m --wait [-n namespace]
- Сохраните файл values-elma365.yaml для последующих обновлений.
- Для создания дампа можно воспользоваться скриптом elma365db.sh:
./elma365db.sh --dump --namespace elma365 --path /backup/path/ [--kubeconfig /path/to/config --context prod]
Установка средств мониторинга (опционально)
- Скачайте helm-чарт addons по ссылке в разделе «Ссылки для скачивания helm-чартов».
- В чарте addons в файле values-addons.yaml в блоке grafana и kube-prometheus-stack укажите требуемый namespace для сервиса мониторинг, например namespaceOverride: monitoring, и адрес, по которому будет доступен сервис мониторинга.
- Создайте namespace для сервиса мониторинга командой:
kubectl create namespace monitoring
- Выполните установку чарта командой:
helm upgrade --install addons ./addons -f values-addons.yaml
- В файле values-elma365.yaml чарта elma365 включите дэшборды:
dashboard:
enabled:true
- Обновите приложение ELMA365 командой:
helm upgrade elma365 ./elma365 -f values-elma365.yaml --timeout=30m
Установка Linkerd и автомасштабирование сервисов (опционально)
Linkerd — это выделенный уровень инфраструктуры, который помогает обрабатывать связь между сервисами, автоматически шифровать соединения, обрабатывать повторные запросы и тайм-ауты. Также он предоставит вам телеметрию (коэффициент успешности, задержки) и многое другое.
- Скачайте helm-чарт addons по ссылке в разделе «Ссылки для скачивания helm-чартов».
- Сгенерируйте сертификаты с помощью 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
- Включить параметр linkerd2 в файле values-addons.yaml чарта addons:
linkerd2:
enabled:true
- В разделе 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-----
- Выполните установку чарта командой:
helm upgrade --install addons ./addons -f values-addons.yaml
- Добавьте аннотацию на namespace с приложением ELMA365 для автоматической инъекции контейнеров Linkerd-proxy в сервисы ELMA365 командой:
kubectl annotate namespace default linkerd.io/inject=enabled
- Включить автомасштабирование сервисов параметром autoscaling в файле values-elma365.yaml через elma365:
autoscaling:
enabled:true
- Обновите приложение ELMA365 командой:
helm upgrade elma365 ./elma365 -f values-elma365.yaml --timeout=30m
- Перезапустите все сервисы командой:
kubectl rollout restart deploy [-n namespace] && kubectl rollout restart ds [-n namespace]
Установка NodeLocal DNS Cache (опционально)
Установка NodeLocal DNS Cache позволяет снизить нагрузку по DNS-запросам в кластере Kubernetes и повысить стабильность преобразования DNS имён. Это позволит избежать правил DNAT, connection tracking и ограничений по количеству соединений.
Для установки:
- Скачайте helm-чарт addons по ссылке в разделе «Ссылки для скачивания helm-чартов».
- Получите IP-адрес сервиса kube-dns:
kubectl get svc kube-dns -n kube-system -o jsonpath={.spec.clusterIP}
- В чарте addons в файле values-addons.yaml в блоке node-local-dns настройте следующие параметры:
- pillar_dns_domain — домен кластера;
- pillar_dns_server — IP-адрес сервиса kube-dns;
- pillar_local_dns — локальный IP-адрес для NodeLocal DNS Cache.
- Выполните установку чарта командой:
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-контроллера не требуется.