Инструкция по установке Lite
Подготовка окружения
Скачивание дистрибутива
Скачайте и распакуйте дистрибутив BAF Lite на машину, где планируется выполнить установку. Для этого можно воспользоваться командой:
$ curl --output baf_lite.zip ссылка на дистрибутив
В curl-запросе укажите ссылку на дистрибутив BAF Lite (zip-файл).
Ссылка на папку, в которой размещен дистрибутив, и сопроводительная документация в формате pdf придут в электронном письме.
Далее переместите файл лицензии face_sdk.lic (файл прикреплен к электронному письму) в папку setup.
Убедитесь, что файл с лицензией называется именно face_sdk.lic. Использование другого имени приведет к ошибкам генерации секретов.
Комплект установки BAF Lite:
- ./cli.sh — точка входа для запуска команд.
- ./cfg — папка с файлами конфигурации.
Дальнейшие команды выполняются в системной консоли из директории setup.
Загрузка образов
Загрузите в локальный registry продуктовые образы из архива:
$ ./cli.sh generic load-images
Загрузите в локальный registry инфраструктурные образы из архива:
$ ./cli.sh smc load-images
Конфигурация BAF Lite
Базовая конфигурация
Ввод переменных окружения
Глобально переменные окружения можно разделить на три категории:
- Переменные окружения системных элементов, не связанных с Helm-чартами;
- Публичные переменные окружения чарта модуля;
- Секретные переменные окружения чарта модуля.
Первая категория использует формат <имя_переменной>=<значение> и представлена следующими файлами:
| Файл конфигурации | Имя переменной | Описание |
| ./cfg/smc.settings.cfg | apiserver_advertise_address | адрес для kube-apiserver, обычно используется внутренний IP-адрес машины. |
| external_ip_address | адрес для ingess-controller, необходимо указать внешний IP-адрес машины. |
Вторая категория использует YAML-формат. Эти настройки впоследствии применяются непосредственно при установке чартов как внешние values для переопределения внутренних значений Helm-чарта. Каждый чарт имеет полный стандартный набор переменных окружения. В файлы внешних values включаются только те переменные, которые требуется изменить.
Для изменения большинства переменных окружения предусмотрен гибкий механизм, позволяющий передавать YAML-объекты напрямую в итоговый шаблон развертывания.
Для сервисов, поддерживающих такую настройку, используется поле envOverride. В этом поле в формате YAML-словаря ключом выступает имя переменной, а значением — YAML-объект, который будет подставлен в итоговый шаблон в качестве переменной окружения сервиса.
Пример:
envOverride:
JWT_CLOCK_SKEW:
value: '1'
Значения переменных всегда должны быть строковыми. В противном случае при развертывании возникнет ошибка.
Гибкая возможность кастомизации переменных окружения представлена в следующих файлах:
| Файл конфигурации | Раздел конфигурации | Название переменной | Значение по умолчанию | Описание |
| ./cfg/authentification-service.values.yaml | authentification_service | JWT_LEEWAY | value: '1' | допустимое расхождение времени серверов (clock skew), используемое при проверке валидности JWT-токена. |
| ./cfg/util-services.values.yaml | client_log | JWT_CLOCK_SKEW | value: '1' | допустимое расхождение времени серверов (clock skew), используемое при проверке валидности JWT-токена. Значение должно соответствовать параметру JWT_LEEWAY в файле authentification-service.values.yaml. |
| ./cfg/video-recorder.values.yaml | video_recorder | UVICORN_CONCURRENCY | value: '30' | количество одновременно обрабатываемых http-соединений для каждой поды. После превышения лимита будет возвращаться ошибка 503. |
| SQLALCHEMY_POOL_SIZE | value: '20' | максимальное количество персистентных соединений, которые будет держать пул sql alchemy для каждой поды. | ||
| SQLALCHEMY_POOL_OVERFLOW | value: '10' | количество соединений сверху персистетного количества, которые будут закрыты после использования для каждой поды. | ||
| RETENTION_BATCH_SIZE | value: '83' | размер пакета видео-контента попыток, который будет удален за один раз. | ||
| RETENTION_BATCH_PAUSE | value: '4' | время в секундах между удалениями пакетов. | ||
| RETENTION_CHECK_FREQUENCY | value: '3600' | частота запуска проверки очистки в секундах. | ||
| JWT_CLOCK_SKEW | value: '1' | допустимое расхождение времени серверов (clock skew), используемое при проверке валидности JWT-токена. Значение должно соответствовать параметру JWT_LEEWAY в файле authentification-service.values.yaml. | ||
| minio | S3_ERROR_DATA_RETENTION_DAYS | value: '3' | период хранения ошибочных данных в днях в хранилище объектов. | |
| MINIO_API_DELETE_CLEANUP_INTERVAL | value: '30s' | интервал, в котором minio удаляет объекты из корзины. | ||
| S3_BUCKETS_PREFIX | value: 'vr' | префикс, который ставится перед всеми именами бакетов в подобном формате: <prefix>.<bucket name> | ||
| S3_USE_HTTPS | value: '0' | флаг, определяющий, следует ли использовать протокол HTTPS для взаимодействия с S3. |
Также существуют классические переменные, которые подставляются в шаблон по значению. Это связано либо со сложной логикой их использования в чартах, либо с отсутствием необходимости в глубокой кастомизации.
Значения, записанные через точку в YAML-файлах, обозначают структуру вложенности.
Список файлов с классическими переменными:
| Файл конфигурации | Путь переменной | Описание |
| ./cfg/authentification-service.values.yaml | ingress.enable | установите значение параметра 1, чтобы предоставить внешний доступ к сервису аутентификации через ingress ресурс. Ingress будет использовать домен из параметра ingress.rules.gateway.host. |
| ./cfg/baf-lite.values.yaml | ingress.rules.gateway.host | доменное имя, используется в ingress для маршрутизации запросов на сервисы Kubernetes для BAF Lite. |
| gateway.dns_resolver | доменное имя DNS сервера, который будет использоватся для резолва имен сервисов kubernetes. | |
| gateway.dns_validity_time | время после которого будет происходить перезолв доменного имени сервиса.. | |
| gateway.cluster_domain | домен кластера k8s, который будет использоваться в пути до сервиса video-recorder | |
| ./cfg/video-recorder.values.yaml | minio.enable | если используете свой сервер minio, установите 0. Примечание: необходимо поменять значения секрета video-recorder-minio в файле ./cfg/video_recorder.secrets.json и значения полей minio.host, minio.port и S3_USE_HTTPS (1 для https, 0 для http) в текущем файле. |
| video_recorder.decoding_enabled | если вам не нужно декодирование видео, установите 0. | |
| video_recorder.decoding_process_count | количество процессов декодирования, запускаемых в одной реплике сервиса. Чем больше процессов, тем больше одновременных сессий декодирования видео будет обрабатывать сервис. | |
| video_recorder.retention_workers_count | количество процессов, выполняющих очистку видео-контента попыток. | |
| postgres.deploy | если у вас собственная БД, установите 0. Примечание: необходимо поменять значения секрета video-recorder-postgres в файле ./cfg/video_recorder.secrets.json и значения полей postgres.host, postgres.port | |
| redis.deploy | если у вас есть собственный redis, установите 0. Примечание: необходимо поменять значения полей redis.host, redis.port | |
| ./cfg/util-services.values.yaml | ingress.rules.gateway.host | должен быть равен домену ingress в файле ./cfg/baf.values.yaml |
| ./cfg/image-api.values.json | processing.enable_ingress | установите значение параметра 1, чтобы предоставить внешний доступ к модулю image-api через ingress ресурс. Ingress будет использовать домен из параметра ingress.host. |
| ingress.host | доменное имя, используется в ingress для маршрутизации запросов на сервисы Kubernetes для модуля image-api. |
Третья категория хранится в JSON-файлах и используется скриптами поставки для создания секретов внутри кластера Kubernetes.
Если требуется использовать собственные секреты, необходимо добавить в envOverride (в файле values.yaml соответствующего модуля) переменную с именем переменной, которая связана с секретом, и описать в ней корректный YAML для получения данных из вашего секрета.
Список файлов секретов и их переменных окружения:
| Файл конфигурации | Название секрета | Описание секрета | Поле в секрете | (Название файла values.yaml)Раздел\Название переменной окружения |
| ./cfg/authentification-service.secrets.json | jwt-keys | данные ключей для шифрования и проверки токенов. | private | authentification_service\JWT_PRIVATE_KEY |
| public |
| |||
| ./cfg/video-recorder.secrets.json | video-recorder-postgres | данные для подключения к базе. | user | video_recorder\POSTGRES_USER |
| password | video_recorder\POSTGRES_PASSWORD | |||
| db | video_recorder\POSTGRES_DB | |||
| video-recorder-token | токен доступа к внутренним API сервиса. | access_token | video_recorder\TOKEN | |
| vr-postgres-root-credentials | имя пользователя и пароль для root пользователя в базе данных. | user |
| |
| password |
| |||
| video-recorder-minio | данные для подключения к базе. | user | minio\MINIO_ROOT_USER | |
| password | minio \ MINIO_ROOT_PASSWORD |
Обновление конфигурации работающего инстанса
Для применения обновлений в values модуля необходимо выполнить команду установки модуля. Если обновление не применилось, сначала удалите модуль, а затем установите его заново.
Для применения обновления ресурсов модуля (всего, что требует отдельной команды установки, например, секретов) выполните команду установки ресурса модуля и перезапустите поды модуля с помощью инструментов Kubernetes, чтобы они применили изменения.
Расширенная конфигурация (опционально)
Настройка Docker для использования GPU
Для установки nvidia-container-runtime в качестве низкоуровневой среды выполнения по умолчанию выполните следующую команду:
./cli.sh smc nvidia install
Настройка использовая GPU в BAF Lite
Чтобы включить GPU в BAF Lite, необходимо переопределить переменную CONFIGS для сервиса face-detector-template-extractor. Это делается в файле ./cfg/image-api.values.yaml.
В раздел processing.services добавьте следующий YAML-объект:
face-detector-template-extractor:
envOverride:
CONFIGS:
value: '{"capturer": {"name": "common_capturer_uld_fda.xml", "params": {"use_avx2": 0, "downscale_rawsamples_to_preferred_size": 0}}, "recognizer": {"name": "method12v1000_recognizer.xml", "params": {"use_avx2": 0, "use_cuda": 1}}}'
Установка и настройка кластера
Если у вас уже есть развернутый кластер, перейдите к пункту «Настройка лицензирования».
Запустите команды для создания и настройки кластера:
./cli.sh smc system-patch
./cli.sh smc install
Эти команды выполняют следующие действия:
- Создание точки монтирования базы данных
- Инициализация кластера
Если вы используете GPU, дополнительно запустите скрипт по установке nvidia-plugin в кластер:
$ ./cli.sh smc nvidia install
Проверка работоспособности кластера
После инициализации главного узла убедитесь, что все узлы готовы к работе и имеют статус Ready. Для проверки выполните следующую команду:
$ kubectl get nodes
В результате в терминале будет отображен следующий вывод:
NAME STATUS ROLES AGE VERSION
master-node Ready control-plane,master 11d v1.23.8
Для проверки всех элементов кластера запустите следующую команду:
$ kubectl get all --all-namespaces
Развертывание BAF Lite
Запуск развертывания
Установка подсистемы image-api.
Запустите команду для установки секретов модуля для кластера:
$ ./cli.sh image-api install-secrets
Запустите установку модуля:
$ ./cli.sh image-api install
Установка подсистемы для аутентификации
Запустите команду для генерации ключей подписи JWT:
$ ./cli.sh authentification-service generate-jwt-keys
В результате вы получите два ECDsa ключа, которые необходимо прописать в файл конфигурации ./cfg/authentification-service.secrets.json в раздел jwt-keys.
Запустите команду для установки секретов:
$ ./cli.sh authentification-service install-secrets
Запустите команду для установки модуля:
$ ./cli.sh authentification-service install
Установка подсистемы для записи видео Video Recorder (VR)
Создайте директорию для хранения данных объектного хранилища и реалионной базы с помощью команд:
$ ./cli.sh video-recorder minio-create-mountpoint
$ ./cli.sh video-recorder postgres-create-mountpoint
Запустите команду для установки секретов Video Recorder:
$ ./cli.sh video-recorder install-secrets
Запустите команду для установки Video Recorder:
$ ./cli.sh video-recorder install
Установка подсистемы инструментальных сервисов Util Services (US)
Для установки Util Services запустите команду:
$ ./cli.sh util-services install
Установка BAF Lite
Запустите установку модуля:
$ ./cli.sh baf-lite install
Для отслеживания процесса развертывания откройте еще одну вкладку терминала и введите следующую команду:
$ watch 'kubectl get pods'
Наличие у всех pods статуса Running означает, что BAF Lite запущен.
Настройка DNS
Для доступа к BAF Lite DNS сервер вашей сети должен содержать запись о том, что домен доступен по адресу <external_ip_address>.
Для тестирования можно указать IP-адрес и домен в файле /etc/hosts на Linux или C:\Windows\System32\drivers\etc\hosts на Windows. Для этого добавьте в конец файла новую строку вида <external_ip_address> <host>, подставив значения соответствующих переменных, и сохраните файл.
Обратите внимание, что для редактирования файла hosts необходимо обладать правами администратора.