Развёртывание в Kubernetes
Развёртывание OpenReplay основано на Helm Charts, что делает его полностью совместимым с Kubernetes. Мы поставляем PostgreSQL и Redis, которые необходимы для OpenReplay. Вот как это сделать.
Предварительные требования
Section titled Предварительные требованияДля развёртывания OpenReplay в Kubernetes необходимы:
- Kubernetes v1.18+
- helm 3.10+
- RWX PVC с правами RW для пользователя с id 1001 (для общих компонентов, если в кластере более одного узла). Убедитесь, что вы раскомментировали приведённый ниже блок в
/var/lib/openreplay/vars.yamlи обновили имя PVC для компонентов sink, storage и chalice:
# In case of multiple nodes in the kubernetes cluster,
# You'll have to create an RWX PVC for shared components.
# If it's a single node, we'll use hostVolume, which is the default for the community/oss edition.
pvcRWXName: "hostPath"
OpenReplay также требует 2 vCPUs, 8 GB of RAM, 50 GB of storage для корректной работы, иначе серверные службы OpenReplay просто не запустятся. Этих характеристик достаточно для умеренного объёма, но если вы ожидаете высокий трафик, вам следует масштабироваться отсюда.
Развёртывание было протестировано на следующих платформах:
- Локальный одноузловой кластер Kube
- Google Kubernetes Engine (GKE)
- Amazon Elastic Kubernetes Service (EKS)
- Microsoft Azure Kubernetes Service (AKS)
- Scaleway Elements Kubernetes (Kapsule)
Развёртывание OpenReplay
Section titled Развёртывание OpenReplayПодключитесь к своему кластеру и клонируйте репозиторий OpenReplay:
git clone https://github.com/openreplay/openreplay.git
cd openreplay/scripts/helmcharts
Если в кластере Kubernetes несколько узлов, вам потребуется создать RWX (например, efs, в случае AWS) PVC, чтобы контейнеры могли совместно использовать данные. Если это один узел, мы будем использовать hostVolume, который является значением по умолчанию для установки сообщества.
Затем откройте файл vars.yaml командой vim vars.yaml и подставьте:
domainName: это адрес, по которому будет доступен OpenReplay (т. е. openreplay.mycompany.com)postgresqlPassword: пароль Postgres (задайте его или сгенерируйте случайный)accessKey: требуется для службы объектного хранилища (используйте случайно сгенерированную строку)secretKey: требуется для службы объектного хранилища (используйте случайно сгенерированную строку)jwt_secret: требуется для API (используйте случайно сгенерированную строку)
Убедитесь, что у вас установлен helm, затем настройте OpenReplay:
cd openreplay/scripts/helmcharts
helm upgrade --install databases ./databases -n db --create-namespace --wait -f ./vars.yaml --atomic
helm upgrade --install openreplay ./openreplay -n app --create-namespace --wait -f ./vars.yaml --atomic
Настройка TLS/SSL
Section titled Настройка TLS/SSLOpenReplay работает с конфиденциальными данными пользователей и поэтому требует HTTPS для работы. Это обязательно, иначе трекер просто не начнёт запись. То же самое касается панели управления: без HTTPS вы не сможете воспроизводить сессии пользователей.
Если ваш кластер Kubernetes находится в облаке (например, EKS, AKS или GKE), то самый простой способ работы с SSL — настроить облачный балансировщик нагрузки и запустить кластер за ним. Другой вариант — сгенерировать или использовать собственный SSL-сертификат и направить ваш субдомен (т. е. openreplay.mycompany.com) на кластер. Подробнее об обоих вариантах ниже.
Настройка облачного балансировщика нагрузки (вариант 1)
Section titled Настройка облачного балансировщика нагрузки (вариант 1)Одно из главных преимуществ запуска OpenReplay за облачным балансировщиком нагрузки — управление сертификатом со стороны облачного провайдера. Ниже приведены пошаговые руководства по созданию:
- AWS - Elastic Load Balancing
- Google - Cloud Load Balancing
- Azure - Load Balancer
- Digital Ocean - Настройка TLS/SSL
Затем убедитесь, что ваш кластер предоставляет тип службы LoadBalancer, чтобы трафик от облачного балансировщика нагрузки мог направляться на серверную часть OpenReplay. Теперь перейдите к своему поставщику услуг DNS и создайте A Record, указывающий на кластер по его публичному IP-адресу.
Наконец, включите use-forwarded-headers, раскомментировав приведённую ниже строку в разделе ingress-nginx в /var/lib/openreplay/vars.yaml:
ingress-nginx: &ingress-nginx
controller:
config:
use-forwarded-headers: true
Теперь всё готово, OpenReplay должен быть доступен на вашем субдомене. Вы можете создать учётную запись, посетив страницу /signup (т. е. openreplay.mycompany.com/signup).
Предоставьте/сгенерируйте свой SSL-сертификат (вариант 2)
Section titled Предоставьте/сгенерируйте свой SSL-сертификат (вариант 2)В качестве альтернативы созданию балансировщика нагрузки вы можете предоставить (или сгенерировать) собственный SSL-сертификат.
-
Сначала перейдите к своему поставщику услуг DNS и добавьте
A Record. Используйте домен, который вы ранее указали на этапе установки, и направьте его на кластер по его публичному IP-адресу. -
Если вы используете собственный сертификат, создайте SSL-секрет с помощью следующей команды:
kubectl create secret tls openreplay-ssl -n app --key="private_key_file.pem" --cert="certificate.crt".
Примечание: Если у вас нет сертификата, сгенерируйте автоматически обновляемый сертификат для вашего субдомена (того, что был указан при установке) с помощью Let’s Encrypt. Просто подключитесь к экземпляру OpenReplay, выполните
cd /var/lib/openreplay/openreplay/scripts/helmcharts && bash certmanager.shи следуйте инструкциям.
- Если вы хотите включить перенаправление с http на https (рекомендуется), раскомментируйте приведённый ниже блок в разделе
ingress-nginxв/var/lib/openreplay/vars.yaml:
ingress-nginx: &ingress-nginx
controller:
config:
ssl-redirect: true
force-ssl-redirect: true
Стоит отметить, что наш ingress-nginx по умолчанию работает на портах 80|443, но это можно легко изменить при необходимости в vars.yaml:
ingress-nginx: &ingress-nginx
controller:
service:
ports:
http: 80
https: 443
- Наконец, переустановите NGINX OpenReplay:
openreplay -R
Теперь всё готово, OpenReplay должен быть доступен на вашем субдомене. Вы можете создать учётную запись, посетив страницу /signup (т. е. openreplay.mycompany.com/signup).
Есть вопросы?
Section titled Есть вопросы?Пожалуйста, сообщите нам в Slack или через Github Issue, если у вас возникли проблемы на вашей платформе. Мы будем рады помочь вам запустить его.