﻿# Установка ELMA365 в Kubernetes

> [HTML Version](install-kubernetes.html)

````
Начало внимание

````
В статье приведена устаревшая инструкция для ELMA365 On-Premises. Об актуальной установке в Kubernetes читайте в статье [«Установка ELMA365 Enterprise в Kubernetes»](installing-elma365-enterprise.md).

````
Конец внимание

````
ELMA365 On‑Premises можно установить с использованием Helm в уже существующий Kubernetes-кластер. Поддерживаемые версии Kubernetes и Helm смотрите в статье [«Системные требования ELMA365 On-Premises»](elma365-enterprise-on-premises.md#kubernetes).

Должно быть также разрешено проксирование из подов во внешнюю сеть.

ELMA365 поставляется в виде двух Helm-чартов, которые устанавливаются поочерёдно:

- **elma365-dbs** — набор баз данных и хранилищ, необходимых для работы ELMA365. Также есть возможность использовать собственные базы данных PostgreSQL, MongoDB, Redis, RabbitMQ, хранилище S3, указав строки подключения к ним \[OBJECT\] чарта **elma365**. При этом в файле \[OBJECT\] установку соответствующих компонентов можно отключить, выставив значение \[OBJECT\], например для PostgreSQL: \[OBJECT\]. Если все пять компонентов чарта будут выставлены в \[OBJECT\], то установка этого чарта не требуется. Узнать больше о создании баз данных вы можете из раздела [«Подготовка внешних баз данных»](postgresql.md);

- **elma365 **— чарт с ELMA365.

````
начало внимание

````
Чарты **elma365-extension** больше не поддерживаются. Переход на чарты **elma365-dbs** с новыми версиями баз данных выполняется с помощью дампа и его восстановления.

````
конец внимание

## ````
Ссылки для скачивания Helm-чартов

- **elma365-dbs** — [https://dl.elma365.com/onPremise/latest/elma365-dbs-latest.tar.gz](https://dl.elma365.com/onPremise/latest/elma365-dbs-latest.tar.gz);

- **elma365** — [https://dl.elma365.com/onPremise/latest/elma365-latest.tar.gz](https://dl.elma365.com/onPremise/latest/elma365-latest.tar.gz).

Подробнее об адресах для скачивания ELMA365 читайте в статье [«Ссылки для скачивания дистрибутивов ELMA365 On‑Premises»](links-for-install-elma365.md#links-for-install-helm). 

## Установка чарта elma365-dbs

1. Заполните переменные в файле \[OBJECT\]. При использовании своих баз данных установку встроенных баз можно отключить.

2. Если требуется создать отдельный \[OBJECT\], укажите его во всех командах установки.

3. Выполните команду: 

````
helm upgrade --install elma365-dbs ./elma365-dbs -f values-dbs.yaml \[-n namespace\]

````
Обратите внимание, аргументы в квадратных скобках опциональны. Если вы используете такой аргумент, указывайте его без скобок.

## Установка чарта elma365

1. Заполните переменные в файле \[OBJECT\].

2. Если необходимо восстановить дамп, перед установкой ELMA365 вы можете воспользоваться утилитой [elma365-backupper](database-backup-and-recovery.md) или выполнить скрипт \[OBJECT\] из чарта **elma365**.

Пример выполнения скрипта:

````
./elma365db.sh --restore --namespace elma365 --path /backup/path/ \[--kubeconfig /path/to/config --context prod\]

3. ````
Выполните установку командой: 

````
helm upgrade --install elma365 ./elma365 -f values-elma365.yaml --timeout=30m --wait \[-n namespace\]

4. ````
Сохраните файл \[OBJECT\] для последующих обновлений.

5. Для создания дампа можно воспользоваться утилитой [elma365-backupper](database-backup-and-recovery.md) или скриптом \[OBJECT\].

Пример выполнения скрипта:

````
./elma365db.sh --dump --namespace elma365 --path /backup/path/ \[--kubeconfig /path/to/config --context prod\]

## ````
Установка средств мониторинга (опционально)

1. Скачайте Helm-чарт дополнительного набора инструментов **addons** по ссылке: [https://dl.elma365.com/onPremise/latest/addons-latest.tar.gz](https://dl.elma365.com/onPremise/latest/addons-latest.tar.gz).

2. В файле \[OBJECT\] в блоке \[OBJECT\] и \[OBJECT\] укажите требуемый \[OBJECT\] для сервиса мониторинга, например \[OBJECT\], и адрес, по которому будет доступен сервис мониторинга.

3. Создайте \[OBJECT\] для сервиса мониторинга командой:

````
kubectl create namespace monitoring

4. ````
Выполните установку чарта командой:

````
helm upgrade --install addons ./addons -f values-addons.yaml

5. ````
В файле ````
\[OBJECT\]````
 чарта **elma365** включите дэшборды:

````
dashboard:  
enabled:true

6. ````
Обновите приложение ELMA365 командой:

````
helm upgrade elma365 ./elma365 -f values-elma365.yaml --timeout=30m

## ````
Установка Linkerd и автомасштабирование сервисов (опционально)

**Linkerd** — это выделенный уровень инфраструктуры, который помогает обрабатывать связь между сервисами, автоматически шифровать соединения, обрабатывать повторные запросы и тайм-ауты, использовать телеметрию (коэффициент успешности, задержки) и т. д.

1. Скачайте Helm-чарт дополнительного набора инструментов **addons** по ссылке: [https://dl.elma365.com/onPremise/latest/addons-latest.tar.gz](https://dl.elma365.com/onPremise/latest/addons-latest.tar.gz).

2. Сгенерируйте сертификаты с помощью \[OBJECT\], выполнив команды ниже. 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

3. ````
Включить параметр ````
\[OBJECT\]````
 в файле ````
\[OBJECT\]````
 чарта **addons**:

````
linkerd2:  
  enabled:true

4. ````
В разделе \[OBJECT\] укажите требуемый \[OBJECT\] для сервиса Linkerd (например, \[OBJECT\]) и содержимое сертификатов, ключа и срок действия сертификата \[OBJECT\]. Обратите внимание, значение должно соответствовать дате истечения срока действия сертификата эмитента.

````
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-----

5. ````
Выполните установку чарта командой:

````
helm upgrade --install addons ./addons -f values-addons.yaml

6. ````
Добавьте аннотацию на \[OBJECT\] с приложением ELMA365 для автоматической инъекции контейнеров **Linkerd-proxy** в сервисы ELMA365 командой:

````
kubectl annotate namespace default linkerd.io/inject=enabled

7. ````
Включить автомасштабирование сервисов параметром \[OBJECT\] в файле \[OBJECT\] через **elma365**:

````
autoscaling:  
    enabled:true

8. ````
Обновите приложение ELMA365 командой:

````
helm upgrade elma365 ./elma365 -f values-elma365.yaml --timeout=30m

9. ````
Перезапустите все сервисы командой:

````
kubectl rollout restart deploy \[-n namespace\] \&\& kubectl rollout restart ds \[-n namespace\]

## ````
Установка NodeLocal DNS Cache (опционально)

Установка \[OBJECT\] позволяет снизить нагрузку по DNS-запросам в кластере Kubernetes и повысить стабильность преобразования DNS-имён. Это позволит избежать правил DNAT, connection tracking и ограничений по количеству соединений.

Для установки: 

1. Скачайте Helm-чарт дополнительного набора инструментов **addons** по ссылке: [https://dl.elma365.com/onPremise/latest/addons-latest.tar.gz](https://dl.elma365.com/onPremise/latest/addons-latest.tar.gz).

2. Получите IP-адрес сервиса kube-dns:

````
kubectl get svc kube-dns -n kube-system -o jsonpath=\{.spec.clusterIP\}

3. ````
В чарте **addons** в файле \[OBJECT\] в блоке \[OBJECT\] настройте следующие параметры:

- \[OBJECT\] — домен кластера;

- \[OBJECT\] — IP-адрес сервиса kube-dns;

- \[OBJECT\] — локальный IP-адрес для NodeLocal DNS Cache. 

4. Выполните установку чарта командой:

````
helm upgrade --install addons ./addons -f values-addons.yaml

## ````
Обновление версии ELMA365

В новом чарте замените файл \[OBJECT\] файлом, сохранённым на этапе установки, а затем выполните команду: 

````
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\] 
````