apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: # имя, должно соответствовать спецификации ниже, и быть в формате . name: mlcomponents.unified-platform.cs.hse.ru spec: # имя группы, используемое в REST API: /apis// 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 сервиса. Формируемые пути будут иметь вид /// 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/// plural: mlcomponents # имя в единственном числе, используемое в CLI и для отображения singular: mlcomponent # вид, обычно CamelCased в единственном числе, указывается в манифестах ресурсов kind: MLComponent # короткие имена для использования в операциях с ресурсами в CLI shortNames: - mlcmp - mlcmps categories: - all