Nova AI. Установка
1. Пререквезиты
Перед установкой убедитесь, что выполнены условия:
-
У вас есть доступ к кластеру с учетной записью, имеющей роль
cluster-adminв Kubernetes. -
Вы установили утилиту
kubectlдля работы с Kubernetes. -
Если необходима установка ресурса MLCluster только на определнные ноды в платформе, то необходимо заранее поставить labels и tolerations в конфигурацию ноды до установки ресурса. В конфигурации самого ресурса задать поля
spec.nodeSelector(spec.<component>.nodeSelector) иspec.tolerations(spec.<component>.tolerations) по необходимости.
Для установки MLCluster
-
Необходимо подготовить хранилище с поддержкой формата RWX или использовать решение Longhorn, развернутое в кластере. Подробнее с документацией по Longhorn ознакомьтесь в статье Longhorn.
-
При необходимости настройки tls-взаимодействия с внешними s3/db и git, необходимо предварительно создать configMap (пример представлен ниже) в Namespace
nova-cert-managementс указанием лейблаnova-platform.io/trusted-ca-bundle-inject: enabled. Подробнее с деталями по работе с доверенными сертификатами ознакомьтесь в статье Управление цепочками сертификатов.
Пример configMap с сертификатом
apiVersion: v1
kind: ConfigMap
metadata:
name: external-git-ca-cert
namespace: nova-cert-management
labels:
nova-platform.io/trusted-ca-bundle-inject: enabled
data:
ca.crt: |
-----BEGIN CERTIFICATE-----
MIIEQDCCAyigAwIBAgIUa562g9g18o89Ha71kj5furb0D4swDQYJKoZIhvcNAQEM
BQAwZTELMAkGA1UEBhMCVVMxDTALBgNVBAgMBFRlc3QxETAPBgNVBAcMCFRlc3RD
aXR5MRkwFwYDVQQKDBBUZXN0T3JnYW5pemF0aW9uMRkwFwYDVQQDDBB0ZXN0LmV4
YW1wbGUuY29tMB4XDTI1MTAyMTEwMzc1MloXDTM1MTAxOTEwMzc1MlowZTELMAkG
A1UEBhMCVVMxDTALBgNVBAgMBFRlc3QxETAPBgNVBAcMCFRlc3RDaXR5MRkwFwYD
VQQKDBBUZXN0T3JnYW5pemF0aW9uMRkwFwYDVQQDDBB0ZXN0LmV4YW1wbGUuY29t
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx1jL86Q736WEWKce7gmZ
8pZ5ozjn/oU7BiAJu+H7xS3iSoHN7lVIiNKul9v6mZMvEW0kGX6QOXd4MMFNLDgT
+o4AZy4t2lc2APsGlobjKtx90cQo66BqnRteJe+xmFek6G9vsVV92jR8rR5f9tzT
09kMYpKMsNqXYFatqtS2x07PJDvihDlu+xn3J1iNFR0A5R/CWcUwk0DU1kSJg00k
VnfEYotpHYzupTh/m6sbxFDYSKoVRmDtQfiS6jbum+HdrbJIuuSq9piXh0koDxk0
sSrZy2m9ZqdSGOICPksFBx57UHC4T8qNKxqcHm9Ca+c1sKGWfU16Zwa08pdaBf9q
kwIDAQABo4HnMIHkMB0GA1UdDgQWBBR4taMemgLYpcQI4/3G6JuYN9SgeDAfBgNV
HSMEGDAWgBR4taMemgLYpcQI4/3G6JuYN9SgeDBlBgNVHREEXjBcghB0ZXN0LmV4
YW1wbGUuY29tghIqLnRlc3QuZXhhbXBsZS5jb22CC2V4YW1wbGUuY29tgg0qLmV4
YW1wbGUuY29tggp0ZXN0LmxvY2FsggwqLnRlc3QubG9jYWwwDgYDVR0PAQH/BAQD
AgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAMBgNVHRMBAf8EAjAA
MA0GCSqGSIb3DQEBDAUAA4IBAQA0QvtGchPsJhe0KuI9rUJaSMEBDBsxZGsLRcTx
bSpMXbyviN4ICgh8SmDLHN2et6tbVRaRRBwmxff7iRbLidHHfuF36fKsRTMTB0CH
ukRmKrm4Cy6h9FMiNiS+nLfVk8srip5OhHHj9JNsvhnid1CMBtcrWraPOEVTnO1x
mpNvb3ho8TaFTnPqv6LIJRm77zpMzU6XdhMW1ywqqmGq5QY7i1ZpDqymK8H/Z/2T
dH1r3s1tbIVI0fiK+eARKU8jap8gVduorpbEXMB6DtAsSBq0wm4k6fPbaPIBgzrl
VXZl0EWTjvpmiq8MD6oUIZIjPQJOcLHK8P7liWNhmJC0kxJY
-----END CERTIFICATE-----
-
Для корректного подключения компонентов к внешним хранилищам и базам данных необходимо заранее создать в StarVault секреты с учетными данными для подключения. Секреты должны располагаться строго по пути
nova-secrets/data/credentials/external-integrationsи быть указаны в манифесте (см. пример манифеста)
Для установки MLInfrastructure
-
Установлены пакеты с драйверами GPU по инструкции.
Применимо при использовании нагрузки на GPU и наличии соответствующих ресурсов в кластере.
|
Модули MLInfrastructure и MLCluster могут устанавливаться независимо друг от друга в зависимости от требований.
|
2. Установка MLInfrastructure
2.1. С помощью CLI
-
Установите оператор nova-ml-infra-operator. Для этого сохраните представленный ниже манифест в файл, например
MlInfraOperator.yaml.Пример манифеста для установки nova-ml-infra-operator
apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: nova-ml-infra-operator namespace: nova-operators spec: channel: stable installPlanApproval: Automatic name: nova-ml-infra-operator source: nova-catalog sourceNamespace: nova-operatorhub startingCSV: nova-ml-infra-operator.v1.0.0 -
Установите манифест в кластер Kubernetes, выполнив команду:
kubectl apply -f MlInfraOperator.yaml -
Проверьте состояние оператора после установки.
kubectl get pods -n nova-operatorsПример вывода:NAME READY STATUS RESTARTS AGE nova-ml-infra-operator-79458965d9-qxhc2 1/1 Running 1 (44h ago) 5dУбедитесь, что оператор находится в статусе
Running. В столбцеREADYдолжно быть1/1. -
Сохраните пример манифеста ниже в файл, например,
MLInfrastructure.yaml.Пример манифеста
apiVersion: mlinfra.nova-platform.io/v1alpha1 kind: MLInfrastructure metadata: name: nova-ml-infrastructure (1) spec: nvidiaGpuOperator: (2) mig: (3) enabled: true (4) strategy: single (5) configRef: mig-config (6) timeSlicing: (7) enabled: true (8) configRef: time-slicing-config nvidiaNetworkOperator: (9) enabled: false (10)1 metadata.name(тип: string) - название ресурса MLInfrastructure.Возможна установка только одного ресурса в кластер!
2 spec.nvidiaGpuOperator(тип: object) - объект в котором задается конфигурация Nvidia GPU Operator.3 spec.nvidiaGpuOperator.mig(тип: object) - конфигурация multi instance GPU. Подробнее можно ознакомиться в статье Multi-Instance GPU.4 spec.nvidiaGpuOperator.mig.enabled(тип: bool) - включение функционала. Если значениеtrue, то параметры объектаspec.nvidiaGpuOperator.migобязательны к заполнению.5 spec.nvidiaGpuOperator.mig.strategy(тип: string (enum)) - в данное поле вы можете подставить одну из перечисленных ниже стратегий:-
single - все GPU будут настроены одинаково, один и тот же MIG-профиль на всех устройствах;
-
mixed - разные GPU могут иметь разные MIG профили.
6 spec.nvidiaGpuOperator.mig.configRef(тип: string) - ConfigMap конфигурации MIG профилей.7 spec.nvidiaGpuOperator.timeSlicing(тип: object) - конфигурация функционала для виртуального разделения одной физической GPU между несколькими подами на уровне рабочего узла Nvidia GPU Operator. Подробнее можно ознакомиться в статье Time-Slicing GPUs in Kubernetes.8 spec.nvidiaGpuOperator.timeSlicing.enabled(тип: bool) - включение функционала timeSlicing. Если значениеtrue, то параметры объектаspec.nvidiaGpuOperator.timeSlicingобязательны к заполнению.9 spec.nvidiaNetworkOperator (тип: object) - объект в котором задается конфигурация Nvidia Network Operator. 10 spec.nvidiaNetworkOperator.enabled (тип: bool) - флаг, показывающий, устанавливать компонент или нет. -
-
Установите манифест в кластер, выполнив команду:
kubectl apply -f MLInfrastructure.yaml -
Для проверки после установки выполните следующую команду, чтобы вывести все пространства имен:
kubectl describe mlinfrastructures.apps.nova-platform.io nova-ml-infrastructure --all-namespacesУбедитесь, что поле
Status.Phaseнаходится в статусеReady.
2.2. С помощью Nova Console
Установите MLInfrastructure через Nova Console OperatorHUB. Для этого выполните следующие шаги.
-
Установите оператор Nova ML Infra Operator. В Nova Console в главном меню выберите Operators → OperatorHUB. Выберите Nova ML Infra Operator. Нажмите кнопку Установить.
Заполните поля формы по примеру, представленному на скриншоте.
Подтвердите установку, нажав Установить.
-
Перейдите в раздел Operators → Установленные операторы. Выберите Nova ML Infra Operator или сразу после установки нажмите Открыть оператор.
-
Перейдите ко вкладке MLInfrastructure и нажмите на кнопку Создать MLInfrastructure.
-
Заполнить настройки MLInfrastructure можно двумя способами:
-
С помощью формы
-
Имя - имя должно быть уникальным в пределах пространства имен.
-
NvidiaGpuOperator - объект в котором задается конфигурация Nvidia GPU Operator.
-
mig - конфигурация multi instance GPU. Подробнее можно ознакомиться в статье Multi-Instance GPU.
-
enabled - включение функционала
-
-
timeSlicing - конфигурация функционала для виртуального разделения одной физической GPU между несколькими подами на уровне рабочего узла Nvidia GPU Operator. Подробнее можно ознакомиться в статье Time-Slicing GPUs in Kubernetes.
-
enabled - включение функционала
-
-
-
С помощью манифеста:
Пример манифеста
apiVersion: mlinfra.nova-platform.io/v1alpha1 kind: MLInfrastructure metadata: name: nova-ml-infrastructure (1) spec: nvidiaGpuOperator: (2) mig: (3) enabled: true (4) strategy: single (5) configRef: mig-config (6) timeSlicing: (7) enabled: true (8) configRef: time-slicing-config nvidiaNetworkOperator: (9) enabled: false (10)1 metadata.name(тип: string) - название ресурса MLInfrastructure.Возможна установка только одного ресурса в кластер!
2 spec.nvidiaGpuOperator(тип: object) - объект в котором задается конфигурация Nvidia GPU Operator.3 spec.nvidiaGpuOperator.mig(тип: object) - конфигурация multi instance GPU. Подробнее можно ознакомиться в статье Multi-Instance GPU.4 spec.nvidiaGpuOperator.mig.enabled(тип: bool) - включение функционала. Если значениеtrue, то параметры объектаspec.nvidiaGpuOperator.migобязательны к заполнению.5 spec.nvidiaGpuOperator.mig.strategy(тип: string (enum)) - в данное поле вы можете подставить одну из перечисленных ниже стратегий:-
single - все GPU будут настроены одинаково, один и тот же MIG-профиль на всех устройствах;
-
mixed - разные GPU могут иметь разные MIG профили.
6 spec.nvidiaGpuOperator.mig.configRef(тип: string) - ConfigMap конфигурации MIG профилей.7 spec.nvidiaGpuOperator.timeSlicing(тип: object) - конфигурация функционала для виртуального разделения одной физической GPU между несколькими подами на уровне рабочего узла Nvidia GPU Operator. Подробнее можно ознакомиться в статье Time-Slicing GPUs in Kubernetes.8 spec.nvidiaGpuOperator.timeSlicing.enabled(тип: bool) - включение функционала timeSlicing. Если значениеtrue, то параметры объектаspec.nvidiaGpuOperator.timeSlicingобязательны к заполнению.9 spec.nvidiaNetworkOperator (тип: object) - объект в котором задается конфигурация Nvidia Network Operator. 10 spec.nvidiaNetworkOperator.enabled (тип: bool) - флаг, показывающий, устанавливать компонент или нет. -
-
-
Нажмите Создать. Отслеживайте статус на вкладке MLInfrastructure на странице оператора.
3. Удаление MLInfrastructure
4. Установка MLCluster
4.1. С помощью CLI
-
Установите оператор nova-ml-platform-operator. Для этого сохраните представленный ниже манифест в файл, например
MlOperator.yaml.Пример манифеста для установки nova-ml-platform-operator
apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: nova-ml-platform-operator namespace: nova-operators spec: channel: stable installPlanApproval: Automatic name: nova-ml-platform-operator source: nova-catalog sourceNamespace: nova-operatorhub startingCSV: nova-ml-platform-operator.v1.0.0 -
Установите манифест в кластер Kubernetes, выполнив команду:
kubectl apply -f MlOperator.yaml -
Проверьте состояние оператора после установки.
kubectl get pods -n nova-operatorsПример вывода:NAME READY STATUS RESTARTS AGE nova-ml-platform-operator-64db76c558-84g72 1/1 Running 1 (44h ago) 5dУбедитесь, что оператор находится в статусе
Running. В столбцеREADYдолжно быть1/1. -
Сохраните один из представленных ниже манифестов в файл, например,
MLCluster.yaml.Для кластера в минимальной конфигурации
apiVersion: mlplatform.nova-platform.io/v1alpha1 kind: MLCluster metadata: name: nova-ml-cluster spec: mlBaseDomain: "apps.example.platform" storageClass: longhorn-storage-single-replica jupyterHub: enabled: true airFlow: enabled: true logVolumeSize: 5G mlFlow: enabled: true kubeRay: enabled: true kserve: enabled: true postgreSQL: enabled: true minIO: enabled: true driveCount: 1 driveSize: 25GiДля кластера в рекомендуемой конфигурации
apiVersion: mlplatform.nova-platform.io/v1alpha1 kind: MLCluster metadata: name: nova-ml-cluster (1) spec: mlBaseDomain: "example" (2) jupyterHub: (3) enabled: true (4) nodeSelector: "node-role.kubernetes.io/infra": "" "node-role.kubernetes.io/master": "" tolerations: - key: "node-role.kubernetes.io/main" operator:"Exists" effect:"NoSchedule" - key: gpu operator: "Exists" effect: "NoSchedule" storageClass: longhorn-storage-single-replica ttlConfig: (5) enabled: true (6) users: true adminUsers: true timeout: 4800 every: 60 concurrency: 5 maxAge: 0 notebookProfileList: (7) - displayName: "Example_Ml" description: "Example_Ml" default: false storageSize: 5Gi acceleratorType: ndidia.com/gpu acceleratorCount: 1 extraNodeSelector: gpu-type: nvidia-a100 extraTolerations: key: nvidia.com/gpu operator: Exists value: "" effect: NoSchedule externalDatabase: enabled: false host: "psql-postgresql.nova-postgresql.svc" port: 5432 database: airflow starVaultUserSecretPath: "nova-secrets/data/credentials/ml/postgresql/new_username" starVaultPassSecretPath: "nova-secrets/data/credentials/ml/postgresql#new_password" airFlow: (8) enabled: true (6) nodeSelector: "node-role.kubernetes.io/infra": "" "node-role.kubernetes.io/master": "" tolerations: - key: "node-role.kubernetes.io/main" operator: "Exists" effect: "NoSchedule" - key: gpu operator: "Exists" effect: "NoSchedule" storageClass: longhorn-storage-single-replica (9) logVolumeSize: 40Gi (10) externalGit: enabled: false repo: "https://nova-release-git-main.${dnsBaseDomain}/container-platform/airflow.git" branch: dev starVaultUserSecretPath: "nova-secrets/data/credentials/external-integrations#new_username" starVaultPassSecretPath: "nova-secrets/data/credentials/external-integrations#new_password" externalDatabase: enabled: false host: "psql-postgresql.nova-postgresql.svc" port: 5432 database: airflow starVaultUserSecretPath: "nova-secrets/data/credentials/external-integrations#new_pg_user" starVaultPassSecretPath: "nova-secrets/data/credentials/external-integrations#new_pg_password" mlFlow: (11) enabled: true (6) nodeSelector: "node-role.kubernetes.io/infra": "" "node-role.kubernetes.io/master": "" tolerations: - key: "node-role.kubernetes.io/main" operator:"Exists" effect:"NoSchedule" - key: gpu operator: "Exists" effect: "NoSchedule" externalDatabase: enabled: true host: "psql-postgresql.nova-postgresql.svc" port: 5432 database: mlflow userDatabase: mlflow_auth starVaultUserSecretPath: "nova-secrets/data/credentials/external-integrations#pg_password" starVaultPassSecretPath: "nova-secrets/data/credentials/external-integrations#pg_password" externalS3: enabled: true host: "minio.nova-minio.svc" port: 443 bucketRegion: "ru-nova-1" bucket: "ml" starVaultUserSecretPath: "nova-secrets/data/credentials/external-integrations#root_user" starVaultPassSecretPath: "nova-secrets/data/credentials/external-integrations#root_password" kubeRay: (12) enabled: true (6) nodeSelector: "node-role.kubernetes.io/infra": "" "node-role.kubernetes.io/master": "" tolerations: - key: "node-role.kubernetes.io/main" operator:"Exists" effect:"NoSchedule" - key: gpu operator: "Exists" effect: "NoSchedule" postgreSQL: (13) enabled: false (6) minIO: (14) enabled: false kserve: (15) enabled: true (6) nodeSelector: "node-role.kubernetes.io/infra": "" "node-role.kubernetes.io/master": "" tolerations: - key: "node-role.kubernetes.io/main" operator:"Exists" effect:"NoSchedule" - key: gpu operator: "Exists" effect: "NoSchedule" externalS3: enabled: true host: "minio.nova-minio.svc" port: 443 bucket: "ml" bucketRegion: "ru-nova-1" starVaultUserSecretPath: "nova-secrets/data/credentials/external-integrations#root_user" starVaultPassSecretPath: "nova-secrets/data/credentials/external-integrations#root_password"1 metadata. name(тип данных: string) - название ресурса MLCluster.Возможна установка только одного ресурса в кластер!
2 spec.mlBaseDomain(тип данных: string) - базовый DNS-домен для настройки и публикации служебных веб-сервисов через Ingress-контроллер.3 spec.jupyterHub(тип данных: object) - конфигурирование компонента JupyterHub.4 spec.jupyterHub.enabled(тип данных: bool) - необходимость установки компонента.5 spec.jupyterHub.ttlConfig(тип данных: object) - профиль конфигурации времени жизни пода.6 spec.<название_компонента>.enabled(тип данных: bool) - необходимость установки компонента.7 spec.notebookProfileList(тип данных: array of object) - профиль конфигурации ноутбука8 spec.airFlow(тип данных: object) - конфигурирование компонента AirFlow.9 spec.<название_компонента>.storageClass(тип данных: string) - переопределение storageClass.10 spec.airFlow.logVolumeSize(тип данных: string) - размер PV для хранения логов.11 spec.mlFlow(тип данных: object) - конфигурирование компонента MlFlow.12 spec.kubeRay(тип данных: object) - конфигурирование компонента KubeRay.13 spec.postgreSQL(тип данных: object) - конфигурирование компонента PostgreSQL.14 spec.minIO(тип данных: object) - конфигурирование компонента minIO.15 spec.kserve(тип данных: object) - конфигурирование компонента kserve.При примении манифеста есть валидация, которая не позволяет установить MinIo и postgreSQL, если все компоненты используют внешние интеграции или в случае когда ни один из включенных компонентов не требует интеграции с MinIo и postgreSQL. В таких случаях необходимо указывать в манифесте
minio/postgresql.enabled=false. -
Для проверки после установки выполните следующую команду, чтобы вывести все пространства имен:
kubectl describe mlclusters.apps.nova-platform.io nova-ml-cluster --all-namespacesПример вывода для MlCluster:
Name: nova-ml-cluster Namespace: Labels: <none> Annotations: <none> API Version: mlinfra.nova-platform.io/v1alpha1 Kind: MLCluster Metadata: Creation Timestamp: 2025-10-08T12:32:28Z Finalizers: apps.nova-platform.io/mlcluster-finalizer Generation: 2 Resource Version: 13058667 UID: 519c37ea-65d0-41e1-b4d5-0a408f1cc4c1 Spec: Air Flow: Enabled: false External Database: Database: airflow Enabled: true Existing Secret Name: nova-airflow-external-psql-credentials Host: 172.31.0.254 Port: 5432 External Git: Enabled: false Jupyter Hub: Enabled: false External Database: Kserve: Enabled: false externalS3: Kube Ray: Enabled: false Min IO: Drive Count: 4 Drive Size: 10Gi Enabled: true Node Count: 1 Ml Base Domain: ml-ai.universe.internal Ml Flow: Enabled: false External Database: externalS3: Replicas: 1 Postgre SQL: Enabled: true Ha: Volume Size: 2Gi Storage Class: longhorn-storage-single-replica Status: Components: (1) Message: All referenced Kustomizations are in a ready state. (2) Name: nova-ml-supplemental (3) Reason: AllKustomizationsReady (4) Status: true (5) Type: ready (6) Conditions: (7) Last Transition Time: 2025-10-08T12:32:58Z (8) Message: All referenced Kustomizations are in a ready state. (9) Reason: AllKustomizationsReady (10) Status: true (11) Type: ready (12) Observed Generation: 2 (13) Phase: Ready (14) Events: <none>1 Status.Components- статус готовности устанавливаемого компонента (применимо в случае, еслиphase==Ready / Error)2 Status.Components.Message- описание состояния. Возможные значения:3 Status.Components.Name- наименование компонента4 Status.Components.Reason- краткая причина5 Status.Components.Status- статус завершения этапа (условия)6 Status.Components.Type- тип этапа (условия)7 Status.Conditions- набор условий, описывающих текущие этапы обработки ресурса8 Status.Conditions.Last Transition Time- время последнего изменения этого условия9 Status.Conditions.Message- описание состояния10 Status.Conditions.Reason- краткая причина11 Status.Conditions.Status- статус завершения этапа (условия)12 Status.Conditions.Type- тип этапа (условия)13 Status.Observed Generation- номер generation ресурса, к которому относится этот статус14 Status.Phase- фаза жизненного цикла ресурса. Возможные значения:-
Pending- ресурс создан, ожидает начала reconciler; -
Reconciling- оператор выполняет действия (патчинг, ожидание); -
Ready- все необходимые Kustomization применены и в состоянииReady; -
Error- произошла ошибка на каком-либо этапе.
Убедитесь, что поле
Status.Phaseнаходится в статусеReady. -
4.2. С помощью Nova Console
Установите MLCluster через Nova Console OperatorHUB. Для этого выполните следующие шаги.
-
Установите операторNova ML Cluster Operator. В Nova Console в главном меню выберите Operators → OperatorHUB. Выберите Nova ML Cluster Operator. Нажмите кнопку Установить.
Заполните поля формы по примеру, представленному на скриншоте.
Подтвердите установку, нажав Установить.
-
Перейдите в раздел Operators → Установленные операторы. Выберите Nova ML Cluster Operator или сразу после установки нажмите Открыть оператор.
-
Перейдите ко вкладке MLCluster и нажмите на кнопку Создать MLCluster.
-
Заполнить настройки MLCluster можно двумя способами:
-
С помощью формы
Ниже перечислены обязательные поля для заполнения:
-
Имя - имя должно быть уникальным в пределах пространства имен.
-
mlBaseDomain - базовый DNS-домен для настройки и публикации служебных веб-сервисов через Ingress-контроллер.
-
jupyterHub - конфигурирование компонента JupyterHub.
-
enabled - включение компонента.
-
-
jupyterHub - конфигурирование компонента MlFlow.
-
enabled - включение компонента.
-
-
postgreSQL - конфигурирование компонента postgreSQL.
-
enabled - включение компонента.
-
-
airFlow - конфигурирование компонента airFlow.
-
enabled - включение компонента.
-
-
kubeRay - конфигурирование компонента kubeRay.
-
enabled - включение компонента.
-
-
-
С помощью манифеста:
Для кластера в минимальной конфигурации
apiVersion: mlplatform.nova-platform.io/v1alpha1 kind: MLCluster metadata: name: nova-ml-cluster spec: mlBaseDomain: "apps.example.platform" storageClass: longhorn-storage-single-replica jupyterHub: enabled: true airFlow: enabled: true logVolumeSize: 5G mlFlow: enabled: true kubeRay: enabled: true kserve: enabled: true postgreSQL: enabled: true minIO: enabled: true driveCount: 1 driveSize: 25GiДля кластера в рекомендуемой конфигурации
apiVersion: mlplatform.nova-platform.io/v1alpha1 kind: MLCluster metadata: name: nova-ml-cluster (1) spec: mlBaseDomain: "example" (2) jupyterHub: (3) enabled: true (4) nodeSelector: "node-role.kubernetes.io/infra": "" "node-role.kubernetes.io/master": "" tolerations: - key: "node-role.kubernetes.io/main" operator:"Exists" effect:"NoSchedule" - key: gpu operator: "Exists" effect: "NoSchedule" storageClass: longhorn-storage-single-replica ttlConfig: (5) enabled: true (6) users: true adminUsers: true timeout: 4800 every: 60 concurrency: 5 maxAge: 0 notebookProfileList: (7) - displayName: "Example_Ml" description: "Example_Ml" default: false storageSize: 5Gi acceleratorType: ndidia.com/gpu acceleratorCount: 1 extraNodeSelector: gpu-type: nvidia-a100 extraTolerations: key: nvidia.com/gpu operator: Exists value: "" effect: NoSchedule externalDatabase: enabled: false host: "psql-postgresql.nova-postgresql.svc" port: 5432 database: airflow starVaultUserSecretPath: "nova-secrets/data/credentials/ml/postgresql/new_username" starVaultPassSecretPath: "nova-secrets/data/credentials/ml/postgresql#new_password" airFlow: (8) enabled: true (6) nodeSelector: "node-role.kubernetes.io/infra": "" "node-role.kubernetes.io/master": "" tolerations: - key: "node-role.kubernetes.io/main" operator: "Exists" effect: "NoSchedule" - key: gpu operator: "Exists" effect: "NoSchedule" storageClass: longhorn-storage-single-replica (9) logVolumeSize: 40Gi (10) externalGit: enabled: false repo: "https://nova-release-git-main.${dnsBaseDomain}/container-platform/airflow.git" branch: dev starVaultUserSecretPath: "nova-secrets/data/credentials/external-integrations#new_username" starVaultPassSecretPath: "nova-secrets/data/credentials/external-integrations#new_password" externalDatabase: enabled: false host: "psql-postgresql.nova-postgresql.svc" port: 5432 database: airflow starVaultUserSecretPath: "nova-secrets/data/credentials/external-integrations#new_pg_user" starVaultPassSecretPath: "nova-secrets/data/credentials/external-integrations#new_pg_password" mlFlow: (11) enabled: true (6) nodeSelector: "node-role.kubernetes.io/infra": "" "node-role.kubernetes.io/master": "" tolerations: - key: "node-role.kubernetes.io/main" operator:"Exists" effect:"NoSchedule" - key: gpu operator: "Exists" effect: "NoSchedule" externalDatabase: enabled: true host: "psql-postgresql.nova-postgresql.svc" port: 5432 database: mlflow userDatabase: mlflow_auth starVaultUserSecretPath: "nova-secrets/data/credentials/external-integrations#pg_password" starVaultPassSecretPath: "nova-secrets/data/credentials/external-integrations#pg_password" externalS3: enabled: true host: "minio.nova-minio.svc" port: 443 bucketRegion: "ru-nova-1" bucket: "ml" starVaultUserSecretPath: "nova-secrets/data/credentials/external-integrations#root_user" starVaultPassSecretPath: "nova-secrets/data/credentials/external-integrations#root_password" kubeRay: (12) enabled: true (6) nodeSelector: "node-role.kubernetes.io/infra": "" "node-role.kubernetes.io/master": "" tolerations: - key: "node-role.kubernetes.io/main" operator:"Exists" effect:"NoSchedule" - key: gpu operator: "Exists" effect: "NoSchedule" postgreSQL: (13) enabled: false (6) minIO: (14) enabled: false kserve: (15) enabled: true (6) nodeSelector: "node-role.kubernetes.io/infra": "" "node-role.kubernetes.io/master": "" tolerations: - key: "node-role.kubernetes.io/main" operator:"Exists" effect:"NoSchedule" - key: gpu operator: "Exists" effect: "NoSchedule" externalS3: enabled: true host: "minio.nova-minio.svc" port: 443 bucket: "ml" bucketRegion: "ru-nova-1" starVaultUserSecretPath: "nova-secrets/data/credentials/external-integrations#root_user" starVaultPassSecretPath: "nova-secrets/data/credentials/external-integrations#root_password"1 metadata. name(тип данных: string) - название ресурса MLCluster;Возможна установка только одного ресурса в кластер!
2 spec.mlBaseDomain(тип данных: string) - базовый DNS-домен для настройки и публикации служебных веб-сервисов через Ingress-контроллер.3 spec.jupyterHub(тип данных: object) - конфигурирование компонента JupyterHub.4 spec.jupyterHub.enabled(тип данных: bool) - необходимость установки компонента.5 spec.jupyterHub.ttlConfig(тип данных: object) - профиль конфигурации времени жизни пода.6 spec.<название_компонента>.enabled(тип данных: bool) - необходимость установки компонента.7 spec.notebookProfileList(тип данных: array of object) - профиль конфигурации ноутбука8 spec.airFlow(тип данных: object) - конфигурирование компонента AirFlow.9 spec.<название_компонента>.storageClass(тип данных: string) - переопределение storageClass.10 spec.airFlow.logVolumeSize(тип данных: string) - размер PV для хранения логов.11 spec.mlFlow(тип данных: object) - конфигурирование компонента MlFlow.12 spec.kubeRay(тип данных: object) - конфигурирование компонента KubeRay.13 spec.postgreSQL(тип данных: object) - конфигурирование компонента PostgreSQL.14 spec.minIO(тип данных: object) - конфигурирование компонента minIO.15 spec.kserve(тип данных: object) - конфигурирование компонента kserve.
-
-
Нажмите Создать. Отслеживайте статус на вкладке MLCluster на странице оператора.