unip-controller/deploy/crd/ml-component.yaml

270 lines
15 KiB
YAML
Raw Normal View History

2025-01-29 13:13:51 +00:00
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