unip-controller/deploy/crd/ml-component.yaml
2025-04-15 20:56:15 +03:00

270 lines
No EOL
15 KiB
YAML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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