Платформа¶
Развертывание и подготовка kubernetes кластера¶
Существует несколько дистрибутивов Kubernetes со своими способами разворачивания. В данной документации для иллюстрации описан процесс установки k3s, однако подготовка production-кластера должна осуществляться квалицифированным инженерно-техническим персоналом.
Ключевые моменты подготовки развернутого кластера:
- Образы контейнеров дистрибутива дожны быть доступны на каждой ноде кластера.
- В кластер должны быть установлены Prometheus Operator CRDs. Они необходимы для работы мониторинга.
- На нодах с GPU должны быть установлены драйвера Nvidia и Nvidia Container Runtime .
Пример развертывания однонодового кластера дистрибутивом k3s¶
1. Установите дистрибутив k3s
curl -sfL https://get.k3s.io | sh -s - --default-runtime nvidia
Совет
Не указывайте опцию --default-runtime nvidia, если не предполагается работа с GPU-ускорителем.
2. Скопируйте kubeconfig для удобства дальнейшей работы с кластером
mkdir -p ~/.kube/
sudo cp /etc/rancher/k3s/k3s.yaml ~/.kube/config
sudo chown -R $(id -u):$(id -g) ~/.kube/config
chmod 600 ~/.kube/config
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
4. Установите Prometheus Operator CRDs
helm -n monitoring install --create-namespace -g oci://ghcr.io/prometheus-community/charts/prometheus-operator-crds
5. Импортируйте образы NTechCity из дистрибутива
sudo k3s ctr image import ntech-city-images-tag-city-<version number>.tar
где <version number> — номер версии загружаемых образов (например, 1.4.2).
6. Импортируйте образы FF Server из дистрибутива
sudo k3s ctr image import ntech-city-ffserver-<version number>.tar
где <version number> — номер версии загружаемых образов (например, 12.250328).
Совет
В случае полноценного kubernetes кластера удобно использовать containter registry, а не импортировать образы на каждой ноде. Настройка container registy зависит от выбранного дистрибутива kubernetes.
Установка NTLS¶
1. Добавьте публичный helm репозиторий Ntechlab
helm repo add ntech https://charts.ntechlab.com
helm repo update
2. Получите base64 закодированную строку от файла лицензии
base64 <license-file>.lic | tr -d '\n'; echo
3. Установите NTLS
helm install ntls ntechcity/ntls --set image.repository=docker.int.ntl/ntech/universe/ntls --set image.version=<version-number> --set license="AQBRRVJTBvJrtKDXzK5OlAsyOGDnD41asv..."
<version number> — номер версии загруженных образов FF Server (например, 12.250328).
Установка платформы¶
1. Создайте директорию, в которой будет размещены файлы helm чартов и конфигурационные файлы, например так:
mkdir -p ~/ntechcity
2. Перейдите в созданную директорию и разместите в ней полученный из дистрибутива архив с helm чартом платформы.
3. Распакуйте из архива конфигурационный values.yaml файл и переименуйте для дальнейшего удобства использования.
tar -xzf platform-<version>.tgz -C ~/ntechcity --strip-components=1 platform/values.yaml && mv values.yaml platform.values.yaml
<version number> — номер версии (например, 1.4.2).
4. Ознакомьтесь с файлом конфигурации и переопределите обязательные параметры
- адрес NTLS в конфигурации
main-api,extraction-api,video-worker - теги загруженных образов
ffupload,extraction-apiиvideo-worker - конфигурацию нейросетевых моделей из дистрибутива для
extraction-apiиvideo-worker
Пример минимальной конфигурации:
ffserver_version: &ffserver_version "<ffserver-version>"
main_api:
config:
ntls_client:
base_url: "http://ntls:3185"
extraction:
image:
repository: <extraction-api-image-name>
version: *ffserver_version
ntlsAddr: ntls:3133
config: # (1)!
detectors:
max_batch_size: 4
models:
body:
aliases:
- body
model: detector/bodydet.kali_accurate.023.gpu.fnk
options:
min_object_size: 16
resolutions: [1280x720,1920x1080]
objects:
body:
base_normalizer: facenorm/cropbbox.v2.gpu.fnk
quality_attribute: ""
normalizers:
max_batch_size: 4
models:
crop1x:
model: facenorm/crop1x.v2_maxsize400.gpu.fnk
crop2x:
model: facenorm/crop2x.v2_maxsize400.gpu.fnk
cropbbox:
model: facenorm/cropbbox.v2.gpu.fnk
norm200:
model: facenorm/bee.v3.gpu.fnk
carlicplate:
model: carnorm/carnorm.briacon.v3.gpu.fnk
extractors:
max_batch_size: 4
models:
body_handface: pedattr/pedattr.handface.v1.gpu.fnk
body_quality: pedattr/pedattr.quality.v0.gpu.fnk
body_protective_equipment: pedattr/pedattr.protective.v1.gpu.fnk
video-manager:
image:
version: *ffserver_version
video-worker:
image:
repository: <video-worker-image-name>
version: *ffserver_version
config:
ntls_addr: ntls:3133
models: #(2)!
detectors:
body:
fnk_path: /usr/share/findface-data/models/detector/bodydet.gustav_accurate.023.gpu.fnk
min_size: 100
min_size_for_resolutions:
1280x720: 45
1920x1080: 60
2560x1440: 80
2688x1520: 85
2592x1920: 93
3840x2160: 120
normalizers:
crop1x:
fnk_path: /usr/share/findface-data/models/facenorm/crop1x.v2_maxsize400.gpu.fnk
crop2x:
fnk_path: /usr/share/findface-data/models/facenorm/crop2x.v2_maxsize400.gpu.fnk
cropbbox:
fnk_path: /usr/share/findface-data/models/facenorm/cropbbox.v2.gpu.fnk
norm200:
fnk_path: /usr/share/findface-data/models/facenorm/bee.v3.gpu.fnk
objects:
body:
normalizer: cropbbox
quality: body_quality
extractors:
body_quality:
fnk_path: /usr/share/findface-data/models/pedattr/pedattr.quality.v0.gpu.fnk
normalizer: cropbbox
ffupload:
image:
version: *ffserver_version
<ffserver-version> — номер версии загруженных образов FF Server (например, 12.250328)
- <extraction-api-image-name> — название образа extraction-api из дистрибутива (например, docker.int.ntl/ntech/city/core/eapi-hc-ntl-tbo-master-gpu)
- <video-worker-image-name> — название образа video-worker из дистрибутива (например, docker.int.ntl/ntech/city/core/vw-hc-magpie-classic-gpu)
Важно
Если парсер конфигурационных файлов NTechCity не находит необходимой пары ключ-значение, то подставляет значение по умолчанию из кода приложения. Поэтому из релизного файла конфигурации рекомендуется удалить значения, которые не переопределены. Это поможет избежать проблем с null значением и более удобно в дальнейшем управлении.
5. Установите платформу командой
helm install platform platform-<version>.tgz -f platform.values.yaml
Предупреждение
Название helm релиза должно начинаться с platform. В противном случае компоненты потеряют сетвую связность.