Дополнительная информация#
В данном разделе приводится следующая дополнительная информация:
- шаги по созданию секрета для авторизации в реестре Docker
- шаги по запуску Lambda
- нюансы использования GPU в Minikube
- пример компиляции библиотеки VLMatch для Oracle
Создание секрета для авторизации в реестре Docker#
Чтобы скачивать образы с сервисами LUNA PLATFORM нужно авторизироваться в реестре Docker.
Создайте файл с учетными данными, например, vlabs-credentials.json
, содержащий логин и пароль:
{
"auths": {
"dockerhub.visionlabs.ru": {
"username": "your_username",
"password": "your_password"
}
}
}
Предоставьте Kubernetes доступ к реестру с образами Docker.
kubectl create secret generic my-dockerhub-secret --from-file=.dockerconfigjson=vlabs-credentials.json --type=kubernetes.io/dockerconfigjson
Если вы ранее уже авторизировались через команду docker login
, то можно предоставить доступ Kubernetes с помощью следующей команды:
kubectl create secret generic my-dockerhub-secret --from-file=.dockerconfigjson=$HOME/.docker/config.json --type=kubernetes.io/dockerconfigjson
Секрет можно указать во время настройки Helm чартов.
Запуск Lambda#
Для запуска Lambda необходимо выполнить некоторые дополнительные действия.
Подготовка пользовательского Docker реестра для Lambda#
Примечание. Пропустите данный раздел если не собираетесь использовать сервис Lambda.
Необходимо подготовить пользовательский реестр для хранения образов Lambda. Перенесите базовые образы и образ инструмента для сборки контейнеров в свой реестр с помощью нижеперечисленных команд.
Загрузите образы из удаленного репозитория в локальное хранилище образов:
docker pull dockerhub.visionlabs.ru/luna/lpa-lambda-base-fsdk:v.0.5.29
docker pull dockerhub.visionlabs.ru/luna/lpa-lambda-base:v.0.5.29
Загрузите используемый образ инструмента для сборки контейнеров:
docker pull dockerhub.visionlabs.ru/luna/kaniko-executor:latest
Добавьте новые имена образам, заменив new-registry
на свои. Имена базовых образов в пользовательском реестре должны быть такими же, как и в реестре dockerhub.visionlabs.ru/luna
.
docker tag dockerhub.visionlabs.ru/luna/lpa-lambda-base-fsdk:v.0.5.29 new-registry/lpa-lambda-base-fsdk:v.0.5.29
docker tag dockerhub.visionlabs.ru/luna/lpa-lambda-base:v.0.5.29 new-registry/lpa-lambda-base:v.0.5.29
docker tag dockerhub.visionlabs.ru/luna/kaniko-executor:latest new-registry/kaniko-executor:latest
Отправьте локальные образы в свой удаленный репозиторий, заменив new-registry
на свои.
docker push new-registry/lpa-lambda-base-fsdk:v.0.5.29
docker push new-registry/lpa-lambda-base:v.0.5.29
docker push new-registry/kaniko-executor:latest
Настройка доступа для Lambda#
Примечание. Пропустите данный раздел если не собираетесь использовать сервис Lambda.
Для корректной работы сервиса Lambda необходимо правильно настроить доступ к ресурсам Kubernetes, чтобы обеспечить безопасность и эффективное управление сервисом. Это можно сделать, например, путем определения ролей и привязок ролей с помощью механизма управления доступом на основе ролей (RBAC).
Приведенный ниже пример показывает, как настроить доступы с использованием RBAC в Kubernetes для сервиса Lambda:
- Определите объект типа
ServiceAccount
, который представляет собой идентификатор, используемый сервисом для взаимодействия с Kubernetes API сервером:
apiVersion: v1
kind: ServiceAccount
metadata:
name: lambda-user
- Определите тип объекта
Role
, который определяет набор разрешений для ресурсов, с которыми ваш сервис будет работать:
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
namespace: production
name: lambda-admin-role
rules:
- apiGroups: ["", "apps", "networking.k8s.io"]
resources: ["deployments", "pods", "pods/log", "pods/status", "services", "services/proxy", "ingresses"]
verbs: ["get", "watch", "list", "create", "delete", "patch"]
Здесь services/proxy
означает возможность отправки запросов к ресурсу /lambdas/\{lambda_id\}/proxy
сервиса Lambda.
- Определите тип объекта
RoleBinding
, который связывает роль с созданным типомServiceAccount
, определяя, какие ресурсы и операции доступны сервису Lambda:
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: admin-lambda
namespace: production
subjects:
- kind: ServiceAccount
name: lambda-user
namespace: production
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: lambda-admin-role
Запуск установки Helm чарта для Lambda#
Перейдите в директорию с Helm чартами.
cd /var/lib/luna/current/extras/k8s
Запустите установку Helm чартов для сервиса Lambda с помощью следующих команд:
helm install --wait --timeout 10m luna-lambda ./luna-lambda
Использование GPU в Minikube#
Minikube — это инструмент для локальной установки и управления кластером Kubernetes. Он используется разработчиками и тестировщиками для создания и тестирования приложений в локальной среде перед их развертыванием в более крупных кластерах Kubernetes.
Использование GPU в Minikube поддерживается только с версии 1.32.
Каждый сервис LUNA PLATFORM, поддерживающий работу на GPU, автоматически создает процессы на GPU, независимо от того, какие ресурсы (CPU или GPU) установлены. Если запускается более одного сервиса на GPU, то ресурсы графического процессора необходимо делить между ними чтобы избежать возможных ошибок, вызванных конфликтом доступа к видеокарте.
См. официальную документацию NVIDIA для более подробной информации о разделении ресурсов GPU.
Для изоляции сервисов от GPU и предотвращения создания ими дополнительных процессов следует установить переменную окружения CUDA_VISIBLE_DEVICES
/NVIDIA_VISIBLE_DEVICES
на none
для тех сервисов, которые используют GPU и не должны использоваться.
env:
- name: CUDA_VISIBLE_DEVICES
value: none
Компиляция библиотеки VLMatch для Oracle#
Примечание. В следующей инструкции описана установка для Oracle 21c.
Все файлы, требуемые для компиляции расширения, заданного пользователем (UDx), в VLMatch, можно найти в следующей директории:
/var/lib/luna/current/extras/VLMatch/oracle
Для компиляции функции VLMatch UDx необходимо:
- Установить требуемое окружение, см. требования:
sudo yum install gcc g++
- Поменяйте переменную
SDK_HOME
— oracle sdk root (по умолчанию$ORACLE_HOME/bin
, проверьте, что переменная окружения$ORACLE_HOME
задана) в makefile.
vi /var/lib/luna/current/extras/VLMatch/oracle/make.sh
- Откройте директорию и запустите файл "make.sh".
cd /var/lib/luna/current/extras/VLMatch/oracle
chmod +x make.sh
./make.sh
- Определите библиотеку и функцию внутри базы данных (из консоли базы данных):
CREATE OR REPLACE LIBRARY VLMatchSource AS '$ORACLE_HOME/bin/VLMatchSource.so';
CREATE OR REPLACE FUNCTION VLMatch(descriptorFst IN RAW, descriptorSnd IN RAW, length IN BINARY_INTEGER)
RETURN BINARY_FLOAT
AS
LANGUAGE C
LIBRARY VLMatchSource
NAME "VLMatch"
PARAMETERS (descriptorFst BY REFERENCE, descriptorSnd BY REFERENCE, length UNSIGNED SHORT, RETURN FLOAT);
- Протестируйте функцию посредством вызова (из консоли базы данных):
SELECT VLMatch(HEXTORAW('1234567890123456789012345678901234567890123456789012345678901234'), HEXTORAW('0123456789012345678901234567890123456789012345678901234567890123'), 32) FROM DUAL;
Результат должен быть равен "0.4765625".
Перенесите сгенерированный файл VLMatchSource.so
в СУБД Oracle.