apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: # имя, должно соответствовать спецификации ниже, и быть в формате . name: experimentpipelines.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: ExperimentPipeline является определением ресурса ExperimentPipeline. ExperimentPipeline - пайплайн, этапы которого выполняются как контейнеры. properties: spec: type: object description: ExperimentPipelineSpec определяет пайплайн. Содержит спецификацию этапов с входными и выходными переменными, подсоединенных ящиков. properties: vars: type: array description: Список всех переменных пайплайна. items: maxItems: 32 type: object description: Определение переменной. properties: name: type: string description: имя переменной path: type: string maxLength: 255 description: Путь внутри контейнера, куда монтируется значение переменной как файл или директория с файлами. Может быть не задано, тогда используется путь, заданный в конфигурации присоединенного ящика по умолчанию. mountFrom: type: object description: Определение конфигурации монтирования файлов входной переменной. Если не задано, то используется конфигурация присоединенного ящика по умолчанию. properties: box: type: object description: Настройки монтирования файлов входной переменной с помощью присоединенных ящиков. properties: name: type: string description: Имя присоединенного ящика. boxPath: type: string description: Путь внутри присоединенного ящика. Если атрибут задан, то переменная ассоциирована с данными в ящике, ее значение нельзя задать при запуске пайплайна. required: [ "name" ] required: [ "name" ] stages: type: array description: Список этапов пайплайна. items: maxItems: 32 type: object description: Определение этапа пайплайна. properties: name: type: string description: Имя этапа пайплайна. image: type: object description: Определяет используемый образ для этапа. properties: existingImageName: description: Имя существующего образа. type: string oneOf: - properties: existingImageName: {} required: ["existingImageName"] # may be newImage inputs: type: array description: Список входных переменных этапа. items: maxItems: 32 type: object description: Определение входной переменной этапа. properties: name: type: string description: Имя входной переменной. path: type: string maxLength: 255 description: Префикс пути внутри контейнера, куда монтируется значение входной переменной как файл или директория с файлами. Может быть не задано, тогда используется путь, заданный в конфигурации присоединенного ящика по умолчанию. mountFrom: type: object description: Определение конфигурации монтирования файлов входной переменной. Если не задано, то используется конфигурация присоединенного ящика по умолчанию. properties: box: type: object description: Настройки монтирования файлов входной переменной с помощью присоединенных ящиков. properties: name: type: string description: Имя присоединенного ящика. boxPath: type: string description: Путь внутри присоединенного ящика. Если атрибут задан, то переменная ассоциирована с данными в ящике, ее значение нельзя задать при запуске пайплайна. required: ["name"] required: ["name"] outputs: type: array description: Список выходных переменных этапа. items: maxItems: 32 type: object description: Определение выходной переменной этапа. properties: name: type: string description: Имя выходной переменной. path: type: string maxLength: 255 description: Префикс пути внутри контейнера, куда монтируется значение выходной переменной как директория с файлами. Может быть не задано, тогда используется путь, заданный в конфигурации присоединенного ящика по умолчанию. mountFrom: type: object description: Определение конфигурации монтирования файлов выходной переменной. Если не задано, то используется конфигурация присоединенного ящика по умолчанию. properties: box: type: object description: Настройки монтирования файлов выходной переменной с помощью присоединенных ящиков. properties: name: type: string description: Имя присоединенного ящика. required: ["name"] required: ["name"] entryPoint: type: object description: Определяет параметры точки входа для старта этапа. properties: cmd: type: array description: Команда запуска этапа. items: maxItems: 32 type: string required: ["cmd"] envFrom: type: array description: Определяет список ссылок на Secret и ConfigMap, из которых добавляются переменные окружения. items: maxItems: 32 type: object properties: configMapRef: type: object properties: name: type: string required: ["name"] secretRef: type: object properties: name: type: string required: ["name"] oneOf: - properties: configMapRef: {} required: ["configMapRef"] - properties: secretRef: {} required: ["secretRef"] configFrom: type: array description: Определяет список подключаемых как файлов Secret и ConfigMap items: maxItems: 32 type: object properties: path: type: string configMap: type: object properties: name: type: string items: type: array items: maxItems: 32 type: object properties: key: type: string path: type: string required: ["key", "path"] required: ["name"] secret: type: object properties: name: type: string items: type: array items: maxItems: 32 type: object properties: key: type: string path: type: string required: ["key", "path"] required: ["name"] oneOf: - properties: path: {} configMap: {} required: ["path", "configMap"] - properties: path: {} secret: {} required: ["path", "secret"] env: type: array description: Определяет список переменных окружения. items: maxItems: 32 type: object properties: name: type: string value: type: string required: ["name", "value"] resourceLimits: type: object description: Определяет ограничения по CPU и оперативной памяти для этапа пайплайна. properties: cpu: type: string description: Ограничение по использованию CPU в формате <числовое значение><единица измерения>. Поддерживаются все единицы измерения ресурсов Kubernetes. memory: type: string description: Ограничение по использованию оперативной памяти в формате <числовое значение><единица измерения>. Поддерживаются все единицы измерения ресурсов Kubernetes. gpu: type: string description: Ограничение по использованию ресурсов графических ускорителей. Поддерживается формат <числовое значение> для задания числа используемых графических ускорителей узла. required: ["image", "inputs", "outputs"] connectedBoxes: type: array description: Определяет присоединенные ящики данных - ресурсы вида DataBox. items: maxItems: 32 type: object properties: name: type: string maxLength: 255 description: Имя присоединенного ящика. path: type: string maxLength: 255 description: Путь внутри контейнера. Смысл зависит от типа присоединения ящика. Для MountS3Box - директория, используемая для монтирования S3 ящика. default: type: boolean default: false mountS3Box: type: object description: Определение присоединения S3 ящика типа "монтирование". properties: s3BoxName: type: string description: Имя ящика. required: ["s3BoxName"] mountDataset: type: object description: Определение присоединения ящика датасета типа "монтирование". properties: datasetReferenceName: type: string description: Имя ящика-ссылки на датасет. required: ["datasetReferenceName"] required: ["name"] oneOf: - properties: mountS3Box: {} required: ["mountS3Box"] - properties: mountDataset: {} required: ["mountDataset"] continueWith: type: object description: Определяет пайплайн, который должен быть запущен после выполнения текущего папйлайна. properties: name: type: string description: Имя пайплайна. maxLength: 255 required: ["name"] # oneOf: # - properties: # simplePipeline: {} # required: ["simplePipeline"] # - properties: # mldevPipeline: {} # required: ["mldevPipeline"] required: ["stages", "connectedBoxes"] status: x-kubernetes-preserve-unknown-fields: true type: object properties: conditions: type: array items: maxItems: 32 type: object properties: type: type: string conditionStatus: type: string observedGeneration: type: integer lastTransitionTime: type: string reason: type: string message: type: string required: [ "type", "conditionStatus", "lastTransitionTime", "reason", "message"] validation: type: object properties: validationPodName: type: string nullable: true default: {} subresources: status: {} # Namespaced or Cluster scope: Namespaced names: # имя во множественном числе, используемое в URL: /apis/// plural: experimentpipelines # имя в единственном числе, используемое в CLI и для отображения singular: experimentpipeline # вид, обычно CamelCased в единственном числе, указывается в манифестах ресурсов kind: ExperimentPipeline # короткие имена для использования в операциях с ресурсами в CLI shortNames: - exppipeline - exppipelines - exppln - expplns categories: - all