Развёртывание в Kubernetes

Пошаговое руководство по развёртыванию OpenReplay в Kubernetes.

Развёртывание в 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, который является стандартом для установки сообщества.

Затем откройте файл 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

OpenReplay обрабатывает конфиденциальные данные пользователей, поэтому для работы требует HTTPS. Это обязательно, иначе трекер просто не начнёт запись. То же самое касается панели управления: без HTTPS вы не сможете воспроизводить сессии пользователей.

Если ваш кластер Kubernetes находится в облаке (например, EKS, AKS или GKE), то самый простой способ управления SSL — настроить облачный балансировщик нагрузки и запустить ваш кластер за ним. Другой вариант — сгенерировать или использовать собственный SSL-сертификат и направить ваш субдомен (т.е. openreplay.mycompany.com) на ваш кластер. Подробнее об обоих вариантах ниже.

Настройка облачного балансировщика нагрузки (вариант 1)

Section titled Настройка облачного балансировщика нагрузки (вариант 1)

Одно из главных преимуществ работы OpenReplay за облачным балансировщиком нагрузки заключается в том, что сертификатом управляет облачный провайдер. Ниже приведены пошаговые руководства по созданию:

Затем убедитесь, что ваш кластер предоставляет тип службы LoadBalancer, чтобы трафик с облачного балансировщика нагрузки мог направляться на бэкенд OpenReplay. Теперь перейдите к своему DNS-провайдеру и создайте A Record, указывающую на кластер с использованием его общедоступного IP.

Теперь всё готово, OpenReplay должен быть доступен на вашем субдомене. Вы можете создать учётную запись, посетив страницу /signup (т.е. openreplay.mycompany.com/signup).

Используйте/сгенерируйте свой SSL-сертификат (вариант 2)

Section titled Используйте/сгенерируйте свой SSL-сертификат (вариант 2)

В качестве альтернативы созданию балансировщика нагрузки вы можете использовать (или сгенерировать) свой собственный SSL-сертификат.

  1. Сначала перейдите к своему DNS-провайдеру и добавьте A Record. Используйте домен, который вы указали ранее во время шага установки, и направьте его на кластер, используя его общедоступный IP.

  2. Если вы используете собственный сертификат, создайте секрет 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 и следуйте инструкциям.

  1. Если вы хотите включить перенаправление с 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
  1. Наконец, переустановите OpenReplay NGINX:
openreplay -R

Теперь всё готово, OpenReplay должен быть доступен на вашем субдомене. Вы можете создать учётную запись, посетив страницу /signup (т.е. openreplay.mycompany.com/signup).

Пожалуйста, дайте нам знать в Slack или с помощью Github Issue, если у вас возникнут проблемы на вашей платформе. Мы будем рады помочь вам с запуском.