Профили Kubeflow

Profile Kubeflow — это ресурс API-группы kubeflow.org, который создаёт рабочую область для команды или пользователя. О модели прав, SSO и назначении профилей см. раздел Как связаны Штурвал и Kubeflow.

Обратите внимание! Не используйте неймспейсы default и kubeflow-system как рабочие области команд. В default устанавливаются сервисы Kubeflow, а в kubeflow-system — контроллеры обучения (Trainer, JobSet). Для ML-сценариев команды создайте отдельный Profile — неймспейс с тем же именем будет создан автоматически.

Профиль по умолчанию

При установке Kubeflow (kubeflow-step-4) создаётся Profile по умолчанию kflow-user-admin-namespace.

apiVersion: kubeflow.org/v1
kind: Profile
metadata:
  annotations:
    meta.helm.sh/release-name: kubeflow-step-4-<символы>
    meta.helm.sh/release-namespace: default
  creationTimestamp: 2026-08-20T08:17:11Z
  finalizers:
    - profile-finalizer
  generation: 2
  labels:
    app.kubernetes.io/managed-by: Helm
  name: kflow-user-admin-namespace
  resourceVersion: "8245826"
  uid: 7bc
spec:
  owner:
    kind: User
    name: admin
  resourceQuotaSpec: {}

Профиль по умолчанию предоставляет:

  • сразу после установки неймспейс и рабочую область, в которую может зайти администратор платформы (admin);
  • Central Dashboard и API notebooks/pipelines опираются на существующий Profile, без него после SSO не откроется UI;
  • права в этом неймспейсе можно выдать с помощью наборов доступов с ролью Kubeflow, как для любого другого профиля.

Служебный профиль не создавайте вручную и не удаляйте, пока установлен kubeflow-step-4. Для команд и других пользователей создайте отдельный Profile — см. ниже.

Проверьте, что дефолтный профиль есть в кластере:

Администрирование → Кастомные ресурсы → kubeflow.org → Profile: объект kflow-user-admin-namespace, в спецификации owner.name: admin. В списке неймспейсов есть одноимённый неймспейс.
kubectl get profile.kubeflow.org kflow-user-admin-namespace -o yaml
kubectl get namespace kflow-user-admin-namespace --show-labels

Перед тем как создать профиль

Перед созданием профиля Kubeflow в клиентском кластере убедитесь, что:

  • Kubeflow установлен: Установка Kubeflow;
  • CRD profiles.kubeflow.org и служебный Profile kflow-user-admin-namespace существуют.

Сервисы и репозитории → Установленные сервисы: kubeflow-step-0 … kubeflow-step-4 в режиме Авто, состояние Healthy.

Администрирование → Кастомные ресурсы: группа kubeflow.org, ресурс Profile.

kubectl get crd profiles.kubeflow.org
kubectl get ssc kubeflow-step-0 kubeflow-step-1 kubeflow-step-2 kubeflow-step-3 kubeflow-step-4
kubectl get profile.kubeflow.org

Создайте Profile

Имя Profile станет именем неймспейса. В spec.owner.name укажите логин пользователя платформы (как у admin в профиле по умолчанию).

  1. Откройте клиентский кластер.
  2. Импортируйте манифест: импорт манифестов → вставьте YAML → Проверить → Сохранить.
apiVersion: kubeflow.org/v1
kind: Profile
metadata:
  name: team-a
spec:
  owner:
    kind: User
    name: admin
Параметр Обязателен Назначение Откуда взять Пример
spec.owner.kind Да тип владельца профиля всегда User User
spec.owner.name Да логин пользователя платформы, не адрес почты тот же логин, что в управлении доступом и в кастомном ресурсе User (auth.shturval.tech) admin — встроенный администратор

Подставьте своё имя профиля и логин владельца вместо admin, если область нужна другому пользователю.

Профиль также можно создать через Администрирование → Кастомные ресурсы → API-группа kubeflow.org → Profile → + Добавить.

  1. Дождитесь появления неймспейса в списке неймспейсов кластера. Для перехода в UI Kubeflow: страница неймспейса → кнопка Kubeflow.
kubectl apply -f - <<'EOF'
apiVersion: kubeflow.org/v1
kind: Profile
metadata:
  name: team-a
spec:
  owner:
    kind: User
    name: admin
EOF

Подставьте логин владельца вместо admin, если профиль не для администратора. Контроллер создаст неймспейс team-a.

На неймспейсе должен появиться лейбл istio-injection=enabled. Его задаёт profile-controller по ConfigMap namespace-labels-data-* в неймспейсе установки Kubeflow (default).


Проверьте профиль

  1. Кастомные ресурсы → kubeflow.org → Profile: объект есть, в спецификации owner.name — логин, не почта.
  2. Список неймспейсов: есть неймспейс с тем же именем, лейбл istio-injection=enabled.
  3. На странице неймспейса есть кнопка Kubeflow.
export PROFILE_NAME=team-a

kubectl get profile.kubeflow.org "${PROFILE_NAME}"
kubectl get namespace "${PROFILE_NAME}" --show-labels
kubectl get namespace "${PROFILE_NAME}" -o jsonpath='{.metadata.labels.istio-injection}{"\n"}'

Ожидаемый лейбл: enabled.

Назначьте набор доступов Kubeflow владельцу или группе: Настройка разрешений, Назначение доступа.

Доступ, назначенный OIDC-группе, действует при работе через kubectl и при подключении к Notebook с помощью команды Connect. Однако из-за ограничения компонента profiles-kfam неймспейс может не отображаться в списке Kubeflow UI.

Если неймспейс не появился или нет лейбла Istio: устранение неполадок.


Удаление Profile

Удаляйте только рабочие Profile. Служебный профиль kflow-user-admin-namespace не удаляйте — им управляет kubeflow-step-4. Перед удалением проверьте PVC, связанные PV и их reclaimPolicy. Сделайте резервную копию данных, которые необходимо сохранить. Отдельно удалять неймспейс заранее не нужно.

  1. Откройте неймспейс профиля и проверьте его PVC и связанные PV. Сохраните необходимые данные.
  2. Кастомные ресурсы → kubeflow.org → Profile → объект (не kflow-user-admin-namespace) → Удалить.
  3. Убедитесь, что неймспейс удалён, и проверьте состояние PV.
kubectl get pvc -n team-a
kubectl get pv

# Выполните после резервного копирования необходимых данных.
kubectl delete profile.kubeflow.org team-a
kubectl get namespace team-a
kubectl get pv

Удаляйте PV в состоянии Released с reclaimPolicy=Retain вручную только после подтверждения, что сохранённые данные больше не нужны.


Связанные разделы