Развертывание в Kubernetes
Развертывание OpenReplay основано на Helm Charts, что обеспечивает полную совместимость с Kubernetes. Мы поставляем PostgreSQL и Redis, которые необходимы для OpenReplay. Вот как это сделать.
Предварительные требования
Section titled Предварительные требованияДля развертывания OpenReplay в Kubernetes необходимо:
- Kubernetes v1.18+
- helm 3.10+
- RWX PVC с разрешением RW для пользователя с id 1001 (для общих компонентов, если в кластере более одного узла). Убедитесь, что вы заменили
hostPathименем созданного pvc в/var/lib/openreplay/vars.yaml.
# 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 (архитектура x86) для корректной работы, иначе серверные службы 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 PVC (например, efs, в случае AWS) для обмена данными между контейнерами. Если это один узел, мы будем использовать hostVolume, который является стандартным для установки community.
Затем откройте файл 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
- Наконец, переустановите OpenReplay NGINX:
openreplay -R
Теперь все готово, OpenReplay должен быть доступен на вашем субдомене. Вы можете создать учетную запись, посетив страницу /signup (то есть openreplay.mycompany.com/signup).
Есть вопросы?
Section titled Есть вопросы?Пожалуйста, дайте нам знать в Slack или через Github Issue, если у вас возникли трудности на вашей платформе. Мы будем рады помочь вам запустить его.