270 lines
15 KiB
YAML
270 lines
15 KiB
YAML
|
|
apiVersion: apiextensions.k8s.io/v1
|
|||
|
|
kind: CustomResourceDefinition
|
|||
|
|
metadata:
|
|||
|
|
# имя, должно соответствовать спецификации ниже, и быть в формате <plural>.<group>
|
|||
|
|
name: mlcomponents.unified-platform.cs.hse.ru
|
|||
|
|
spec:
|
|||
|
|
# имя группы, используемое в REST API: /apis/<group>/<version>
|
|||
|
|
group: unified-platform.cs.hse.ru
|
|||
|
|
# Список версий, поддерживаемых этим определением CustomResourceDefinition
|
|||
|
|
versions:
|
|||
|
|
- name: v1
|
|||
|
|
# Каждая версия может быть влкючена или выключена при помощи served флага.
|
|||
|
|
served: true
|
|||
|
|
# Только одна версия может быть отмечена как storage версия.
|
|||
|
|
storage: true
|
|||
|
|
schema:
|
|||
|
|
openAPIV3Schema:
|
|||
|
|
type: object
|
|||
|
|
description: MLComponent является определением ресурса MLComponent.
|
|||
|
|
MLComponent - сервис с функцией инференса, который выполняется
|
|||
|
|
внутри контейнера.
|
|||
|
|
properties:
|
|||
|
|
spec:
|
|||
|
|
type: object
|
|||
|
|
description: MLComponentSpec определяет желаемое состояние сервиса.
|
|||
|
|
Содержит спецификацию подсоединенных ящиков, образа сервиса, используемой модели.
|
|||
|
|
properties:
|
|||
|
|
image:
|
|||
|
|
type: object
|
|||
|
|
description: Определяет используемый образ для сервиса.
|
|||
|
|
properties:
|
|||
|
|
existingImageName:
|
|||
|
|
description: Имя существующего образа.
|
|||
|
|
type: string
|
|||
|
|
oneOf:
|
|||
|
|
- properties:
|
|||
|
|
existingImageName: {}
|
|||
|
|
required: ["existingImageName"] # may be newImage
|
|||
|
|
servicePort:
|
|||
|
|
type: integer
|
|||
|
|
minimum: 1
|
|||
|
|
maximum: 65535
|
|||
|
|
default: 8002
|
|||
|
|
description: Определяет порт сервиса внутри контейнера.
|
|||
|
|
envFrom:
|
|||
|
|
type: array
|
|||
|
|
description: Определяет список ссылок на Secret и ConfigMap,
|
|||
|
|
из которых добавляются переменные окружения.
|
|||
|
|
items:
|
|||
|
|
maxItems: 32
|
|||
|
|
type: object
|
|||
|
|
properties:
|
|||
|
|
configMapRef:
|
|||
|
|
type: object
|
|||
|
|
description: Ссылка на ConfigMap.
|
|||
|
|
properties:
|
|||
|
|
name:
|
|||
|
|
type: string
|
|||
|
|
description: Имя ConfigMap.
|
|||
|
|
required: ["name"]
|
|||
|
|
secretRef:
|
|||
|
|
type: object
|
|||
|
|
description: Ссылка на Secret.
|
|||
|
|
properties:
|
|||
|
|
name:
|
|||
|
|
type: string
|
|||
|
|
description: Имя Secret.
|
|||
|
|
required: ["name"]
|
|||
|
|
oneOf:
|
|||
|
|
- properties:
|
|||
|
|
configMapRef: {}
|
|||
|
|
required: ["configMapRef"]
|
|||
|
|
- properties:
|
|||
|
|
secretRef: {}
|
|||
|
|
required: ["secretRef"]
|
|||
|
|
env:
|
|||
|
|
type: array
|
|||
|
|
description: Определяет список переменных окружения.
|
|||
|
|
items:
|
|||
|
|
maxItems: 32
|
|||
|
|
type: object
|
|||
|
|
properties:
|
|||
|
|
name:
|
|||
|
|
type: string
|
|||
|
|
description: Имя переменной окружения.
|
|||
|
|
value:
|
|||
|
|
type: string
|
|||
|
|
description: Значение переменной окружения.
|
|||
|
|
required: ["name", "value"]
|
|||
|
|
resourceLimits:
|
|||
|
|
type: object
|
|||
|
|
description: Определяет ограничения по CPU и оперативной памяти для сервиса.
|
|||
|
|
properties:
|
|||
|
|
cpu:
|
|||
|
|
type: string
|
|||
|
|
description: Ограничение по использованию CPU в формате
|
|||
|
|
<численное значение><единица измерения>.
|
|||
|
|
Поддерживаются все единицы измерения ресурсов Kubernetes.
|
|||
|
|
memory:
|
|||
|
|
type: string
|
|||
|
|
description: Ограничение по использованию оперативной памяти в формате
|
|||
|
|
<численное значение><единица измерения>.
|
|||
|
|
Поддерживаются все единицы измерения ресурсов Kubernetes.
|
|||
|
|
gpu:
|
|||
|
|
type: string
|
|||
|
|
description: Ограничение по использованию ресурсов графических ускорителей.
|
|||
|
|
Поддерживается формат <числовое значение> для задания числа используемых
|
|||
|
|
графических ускорителей узла.
|
|||
|
|
mlService:
|
|||
|
|
type: object
|
|||
|
|
description: Определяет параметры сервиса.
|
|||
|
|
properties:
|
|||
|
|
packageRegistryName:
|
|||
|
|
type: string
|
|||
|
|
description: Имя секрета с реквизитами доступа к реестру пакетов Python,
|
|||
|
|
в котором содержится библиотека unip-mlcmp, используемая для запуска
|
|||
|
|
сервиса.
|
|||
|
|
packageVersionSpec:
|
|||
|
|
type: string
|
|||
|
|
description: Спецификация версии Python библиотеки unip-mlcmp, например ">=2, <3"
|
|||
|
|
inference:
|
|||
|
|
type: object
|
|||
|
|
description: Определяет параметры инференса.
|
|||
|
|
properties:
|
|||
|
|
fileExchange:
|
|||
|
|
type: object
|
|||
|
|
description: Определяет параметры обмена файлами
|
|||
|
|
для использования файлового API.
|
|||
|
|
properties:
|
|||
|
|
fileBox:
|
|||
|
|
type: string
|
|||
|
|
description: Имя присоединенного ящика из элемента списка connectedBoxes.
|
|||
|
|
inferenceFilesPath:
|
|||
|
|
type: string
|
|||
|
|
description: Путь к директории внутри контейнера, которая будет использоваться
|
|||
|
|
для хранения временных файлов.
|
|||
|
|
required: ["fileBox", "inferenceFilesPath"]
|
|||
|
|
model:
|
|||
|
|
type: object
|
|||
|
|
description: Определяет параметры используемой для инференса модели.
|
|||
|
|
properties:
|
|||
|
|
modelBox:
|
|||
|
|
type: string
|
|||
|
|
description: Имя присоединенного ящика из элемента списка connectedBoxes.
|
|||
|
|
modelKind:
|
|||
|
|
type: string
|
|||
|
|
description: Вид модели, передается в контейнер в переменной окружения
|
|||
|
|
INFERENCE_MODEL_KIND.
|
|||
|
|
modelPath:
|
|||
|
|
type: string
|
|||
|
|
description: Путь к модели внутри контейнера.
|
|||
|
|
required: ["modelBox", "modelPath"]
|
|||
|
|
entryPoint:
|
|||
|
|
type: object
|
|||
|
|
description: Определяет параметры точки входа для выполнения инференса.
|
|||
|
|
properties:
|
|||
|
|
pythonPath:
|
|||
|
|
type: string
|
|||
|
|
description: Должен указывать на директорию с исходным кодом инференс функции
|
|||
|
|
и исходным кодом всех необходимых для инференса зависимостей
|
|||
|
|
(не включая зависимости, установленные как пакеты).
|
|||
|
|
Добавляется к PYTHONPATH внутри контейнера.
|
|||
|
|
pythonFunction:
|
|||
|
|
type: string
|
|||
|
|
description: Полное имя функции, которая выполняет инференс.
|
|||
|
|
required: ["pythonFunction"]
|
|||
|
|
required: ["fileExchange", "model", "entryPoint"]
|
|||
|
|
license:
|
|||
|
|
type: object
|
|||
|
|
description: Определяет параметры используемого файла лицензии
|
|||
|
|
properties:
|
|||
|
|
licenseLocalPath:
|
|||
|
|
type: string
|
|||
|
|
description: Путь к файлу лицензии внутри контейнера.
|
|||
|
|
Используется если другой способ получения лицензии не указан,
|
|||
|
|
или по нему не получается получить лицензию.
|
|||
|
|
licenseBox:
|
|||
|
|
type: string
|
|||
|
|
description: Имя присоединенного ящика из элемента списка connectedBoxes.
|
|||
|
|
licensePath:
|
|||
|
|
type: string
|
|||
|
|
description: Путь к файлу лицензии внутри контейнера.
|
|||
|
|
anyOf:
|
|||
|
|
- properties:
|
|||
|
|
required: ["licenseLocalPath"]
|
|||
|
|
- properties:
|
|||
|
|
required: ["licenseBox", "licensePath"]
|
|||
|
|
api:
|
|||
|
|
type: object
|
|||
|
|
description: Определяет настройки API
|
|||
|
|
properties:
|
|||
|
|
prefix:
|
|||
|
|
type: string
|
|||
|
|
description: Префикс, который используется самим сервисом
|
|||
|
|
при формировании путей к точкам доступа API сервиса.
|
|||
|
|
Формируемые пути будут иметь вид /<app-name>/<prefix>/<endpoint path>
|
|||
|
|
required: ["packageRegistryName", "inference"]
|
|||
|
|
connectedBoxes:
|
|||
|
|
type: array
|
|||
|
|
description: Определяет присоединенные ящики данных - ресурсы вида DataBox.
|
|||
|
|
items:
|
|||
|
|
maxItems: 32
|
|||
|
|
type: object
|
|||
|
|
properties:
|
|||
|
|
name:
|
|||
|
|
type: string
|
|||
|
|
maxLength: 255
|
|||
|
|
description: Имя присоединенного ящика.
|
|||
|
|
path:
|
|||
|
|
type: string
|
|||
|
|
maxLength: 255
|
|||
|
|
description: Путь внутри контейнера. Смысл зависит от типа присоединения ящика.
|
|||
|
|
Для CopyS3Box - директория, используемая для хранения копируемых из и в S3 ящик
|
|||
|
|
данных.
|
|||
|
|
Для MountS3Box - директория, используемая для монтирования S3 ящика.
|
|||
|
|
copyS3Box:
|
|||
|
|
type: object
|
|||
|
|
description: Определение присоединения S3 ящика типа "копирование".
|
|||
|
|
properties:
|
|||
|
|
subPath:
|
|||
|
|
type: string
|
|||
|
|
description: Путь внутри ящика.
|
|||
|
|
s3BoxName:
|
|||
|
|
type: string
|
|||
|
|
description: Имя ящика.
|
|||
|
|
required: ["s3BoxName"]
|
|||
|
|
mountS3Box:
|
|||
|
|
type: object
|
|||
|
|
description: Определение присоединения S3 ящика типа "монтирование".
|
|||
|
|
properties:
|
|||
|
|
subPath:
|
|||
|
|
type: string
|
|||
|
|
description: Путь внутри ящика.
|
|||
|
|
s3BoxName:
|
|||
|
|
type: string
|
|||
|
|
description: Имя ящика.
|
|||
|
|
required: ["s3BoxName"]
|
|||
|
|
required: ["name"]
|
|||
|
|
oneOf:
|
|||
|
|
- properties:
|
|||
|
|
copyS3Box: {}
|
|||
|
|
required: ["copyS3Box"]
|
|||
|
|
- properties:
|
|||
|
|
mountS3Box: {}
|
|||
|
|
required: [ "mountS3Box" ]
|
|||
|
|
oneOf:
|
|||
|
|
- properties:
|
|||
|
|
mlService: {}
|
|||
|
|
required: ["mlService"]
|
|||
|
|
required: ["image", "connectedBoxes"]
|
|||
|
|
status:
|
|||
|
|
x-kubernetes-preserve-unknown-fields: true
|
|||
|
|
type: object
|
|||
|
|
subresources:
|
|||
|
|
status: {}
|
|||
|
|
# Namespaced or Cluster
|
|||
|
|
scope: Namespaced
|
|||
|
|
names:
|
|||
|
|
# имя во множественном числе, используемое в URL: /apis/<group>/<version>/<plural>
|
|||
|
|
plural: mlcomponents
|
|||
|
|
# имя в единственном числе, используемое в CLI и для отображения
|
|||
|
|
singular: mlcomponent
|
|||
|
|
# вид, обычно CamelCased в единственном числе, указывается в манифестах ресурсов
|
|||
|
|
kind: MLComponent
|
|||
|
|
# короткие имена для использования в операциях с ресурсами в CLI
|
|||
|
|
shortNames:
|
|||
|
|
- mlcmp
|
|||
|
|
- mlcmps
|
|||
|
|
categories:
|
|||
|
|
- all
|