Профили 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и служебный Profilekflow-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 в профиле по умолчанию).
- Откройте клиентский кластер.
- Импортируйте манифест: импорт манифестов → вставьте 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 → + Добавить.
- Дождитесь появления неймспейса в списке неймспейсов кластера. Для перехода в 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).
Проверьте профиль
- Кастомные ресурсы →
kubeflow.org→ Profile: объект есть, в спецификацииowner.name— логин, не почта. - Список неймспейсов: есть неймспейс с тем же именем, лейбл
istio-injection=enabled. - На странице неймспейса есть кнопка 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. Сделайте резервную копию данных, которые необходимо сохранить. Отдельно удалять неймспейс заранее не нужно.
- Откройте неймспейс профиля и проверьте его PVC и связанные PV. Сохраните необходимые данные.
- Кастомные ресурсы →
kubeflow.org→ Profile → объект (неkflow-user-admin-namespace) → Удалить. - Убедитесь, что неймспейс удалён, и проверьте состояние 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 вручную только после подтверждения, что сохранённые данные больше не нужны.