Манифесты kustomize для встреч
Вариант установки встреч в k8s с помощью манифестов kustomize.
Схема потоков данных
Ниже — схема потоков данных для варианта установки в k8s (с параметрами и портами по умолчанию):

Структура папки 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- usernameLIQUIBASE_COMMAND_PASSWORD- passwordLIQUIBASE_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- порт админки JanusMediaServersConfig__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.