Перейти к содержанию

Платформа

Развертывание и подготовка 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

3. Установите kubectl и helm

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. В противном случае компоненты потеряют сетвую связность.