Перейти к основному содержимому

Манифесты kustomize для встреч

Вариант установки встреч в k8s с помощью манифестов kustomize.

Схема потоков данных

Ниже — схема потоков данных для варианта установки в k8s (с параметрами и портами по умолчанию):

k8s Scheme

Структура папки time-meetings

  • base/cfg/ - содержит файл meetings-envs со списком переменных окружения, которые нужно заполнить!
  • /conference-meeting-api - сервис для управления встречами
  • /conference-users-api - сервис для коммуникации с участниками встреч
  • /videocalls-b2b-api - сервис для межсервисного взаимодействия
  • /videocalls-call-api - сервис для управления видеокомнатами
  • /videocalls-users-api - сервис для коммуникации c участниками видеокомнаты
  • /migrations/base/ - содержит манифест для запуска job миграций баз данных

Подготовка

Перед началом развёртывания встреч, убедитесь что:

  • Вся необходимая инфраструктура и сервер Time настроены и запущены.
  • Настроен и запущен сервер Janus (инструкция).
  • (Опционально) Настроен и запущен STUN/TURN сервер (инструкция).

Базы данных

Для встреч необходимо добавить в PostgreSQL базы данных со схемами onprem:

  • videocalls - база данных для сервиса управления видеокомнатами videocalls
  • conference - база данных для сервиса управления встречами conference

Так же нужно применить миграции. Для применения миграций необходимо заполнить переменные окружения в файле migrations/base/job-liquibase-migrations.yaml:

  • LIQUIBASE_COMMAND_URL - строка подключения к базе данных, заполнить согласно примеру
  • LIQUIBASE_COMMAND_USERNAME - username
  • LIQUIBASE_COMMAND_PASSWORD - password
  • LIQUIBASE_LIQUIBASE_SCHEMA_NAME - схема базы данных, в которой будут создаваться таблицы миграции
  • LIQUIBASE_COMMAND_DEFAULT_SCHEMA_NAME - схема базы данных, в которой будут создаваться таблицы приложения
  • LIQUIBASE_COMMAND_CONTEXT_FILTER - заполнить по аналогии

Обратите внимание, что переменные окружения заполняются отдельно для каждого образа.

Далее нужно запустить job командой:

kustomize build time-kustomize/time-meetings/migrations/base/ [-o time-meetings-migrations.yaml (опция вывода манифестов в файл)]

Убедиться, что job перешёл в состояние Completed, и в базах появилась структура таблиц.

Конфигурирование приложения

Переменные окружения

Для базового конфигурирования приложения необходимо внести изменения в файл base/cfg/meetings-envs — формат ввода указан в качестве примера. Описания переменных:

  • MEETINGS_VC_USERS_API_URL - адрес сервиса videocalls-users-api, который можно сформировать, взяв значение переменной TIME_DOMAIN, заданной при установке Time (https://{TIME_DOMAIN}/video-conference/vc-users-api)
  • MEETINGS_USERS_API_URL - адрес сервиса conference-users-api, который можно сформировать, взяв значение переменной TIME_DOMAIN, заданной при установке Time (https://{TIME_DOMAIN}/video-conference/users-api)
  • COMMON_API_KEY - ключ для авторизации запросов между сервисами. Можно указать любую строку.
  • TIME_API_KEY - ключ для авторизации запросов от сервера Time. Можно указать любую строку.
  • CONFERENCE_POSTGRES_CONNECTION_STRING и VIDEOCALLS_POSTGRES_CONNECTION_STRING - строки подключения к базам данных, заполнить согласно примеру
  • JANUS_ADMIN_API_SECRET и JANUS_API_SECRET - секретные ключи для авторизации запросов к Janus, заполнить любыми строками длинной не менее 16 символов

Тонкое конфигурирование сервисов, как правило, осуществляется в файлах *.vars.patch.yaml, например, тут /videocalls-call-api/base/statefulset.vars.patch.yaml с помощью переменных окружения.

Конфигурирование Time-Server для встреч

Для нормальной работы плагина встреч необходимо так же заполнить значения для переменных в файле /time-kustomize/time-server/base/cfg/time-envs:

  • VIDEO_CONFERENCE_APIKEY - должен иметь такое же значение как и TIME_API_KEY из time-meetings/base/cfg/meeting_envs.
  • VIDEO_CONFERENCE_SERVERURL - адрес сервиса conference-b2b-api. Достаточно указать адрес сервиса внутри кластера k8s (http://svc-conference-b2b-api.time.svc.cluster.local:8080)
  • VIDEO_CONFERENCE_USERAPIURL - адрес сервиса conference-users-api, который можно сформировать, взяв значение переменной TIME_DOMAIN, заданной при установке Time (https://{TIME_DOMAIN}/video-conference/users-api)
  • VIDEO_CONFERENCE_RNNOISEURL - адрес статического ресурса, который можно сформировать, взяв значение переменной TIME_DOMAIN, заданной при установке Time (https://{TIME_DOMAIN}/static/plugins/ru.time.video-conference/assets/widget/rnnoise-worklet-1.0.1.js)
  • VIDEO_CONFERENCE_VIRTUALBACKGROUNDMODELSURL - адрес статического ресурса, который можно сформировать, взяв значение переменной TIME_DOMAIN, заданной при установке Time (https://{TIME_DOMAIN}/static/plugins/ru.time.video-conference/assets/widget)

Подключение Janus и STUN/TURN серверов

Подключение к Janus и STUN/TURN серверам указывается в файле /videocalls-call-api/base/statefulset.vars.patch.yaml Для подключения сервера Janus дополните/измените переменные MediaServersConfig__MediaServers__{index}__XXX согласно примеру:

  • MediaServersConfig__MediaServers__{index}__IsEnabled - использовать этот сервис или нет
  • MediaServersConfig__MediaServers__{index}__JanusEndpoint - адрес сервера Janus IP или имя хоста
  • MediaServersConfig__MediaServers__{index}__Port - порт для работы с Janus в рамках видеокомнат
  • MediaServersConfig__MediaServers__{index}__AdminApiPort - порт админки Janus
  • MediaServersConfig__MediaServers__{index}__UseWss - использовать защищённое соединение (wss) или нет
  • MediaServersConfig__MediaServers__{index}__RecordingsFolder - оставить пустой
  • MediaServersConfig__MediaServers__{index}__RecordingsExternalPath - оставить пустой

Для подключения STUN серверов дополните/измените переменные IceServersConfig__StunServers__{index}__Url.

Для подключения TURN серверов дополните/измените переменные IceServersConfig__TurnServers__{index}__XXX:

  • IceServersConfig__TurnServers__{index}__Url - адрес сервера TURN IP или имя хоста
  • IceServersConfig__TurnServers__{index}__Login - логин пользователя
  • IceServersConfig__TurnServers__{index}__Password - пароль пользователя

Связь между сервисами

Обращаем внимание на то, что почти все сервисы запускаются в k8s с помощью StatefullSet и headless Service. При отправке запросов к таким сервисам-получателям, отправляющий берёт на себя роль балансировщика, и поэтому должен знать о всех репликах сервиса-получателя. Адреса сервисов-получателей указываются в специальных переменных окружения (файлы *.vars.patch.yaml).

Существующие связи:

  • сonference-meeting-api обращается к conference-users-api
    UsersApiClientConfig__Urls = "http://conference-users-api-0.svc-conference-users-api.time.svc.cluster.local:8082,http://conference-users-api-1.svc-conference-users-api.time.svc.cluster.local:8082"
  • conference-users-api обращается к сonference-meeting-api
    MeetingApiClientConfig__Urls = "http://conference-meeting-api-0.svc-conference-meeting-api.time.svc.cluster.local:8080,http://conference-meeting-api-1.svc-conference-meeting-api.time.svc.cluster.local:8080"
  • videocalls-call-api обращается к videocalls-users-api UsersApiClientConfig__Urls = "http://videocalls-users-api-0.svc-videocalls-users-api.time.svc.cluster.local:8082,http://videocalls-users-api-1.svc-videocalls-users-api.time.svc.cluster.local:8082"
  • videocalls-users-api обращается к videocalls-call-api CallApiClientConfig__Urls = "http://videocalls-call-api-0.svc-videocalls-call-api.time.svc.cluster.local:8080,http://videocalls-call-api-1.svc-videocalls-call-api.time.svc.cluster.local:8080"
осторожно

Значения этих переменных нужно определить при первоначальном развёртывании и обновлять при изменении количества реплик, имени сервиса или пространства имён!

Deploy k8s

Для сборки k8s манифестов необходим kustomize (протестировано на версии v4.5.5).

Команды для деплоя приложения будет выглядеть следующим образом:

kustomize build time-kustomize/time-meetings/conference-meeting-api/base/ | kubectl apply -f - -n time

kustomize build time-kustomize/time-meetings/conference-users-api/base/ | kubectl apply -f - -n time

kustomize build time-kustomize/time-meetings/conference-b2b-api/base/ | kubectl apply -f - -n time

kustomize build time-kustomize/time-meetings/videocalls-platform-b2b-api/base/ | kubectl apply -f - -n time

kustomize build time-kustomize/time-meetings/videocalls-platform-users-api/base/ | kubectl apply -f - -n time

kustomize build time-kustomize/time-meetings/videocalls-platform-call-api/base/ | kubectl apply -f - -n time

После выполнения всех действий Встречи должны стать доступны в Time.