270 lines
No EOL
15 KiB
YAML
270 lines
No EOL
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 |