Kubeflow Chart 插件

在 Alauda AI >= 2.0 中部署 Kubeflow 插件。包括:

  • kfbase:Kubeflow 基础组件,包括认证与授权、中央监控面板、notebook、pvc-viewer、tensorboards、volumes、模型注册 UI、kserve endpoints UI、模型目录 API 服务等。
  • model-registry-operator:Kubeflow Model Registry Operator
  • kfp:Kubeflow Pipeline
  • kftraining:Kubeflow Training Operator(已弃用)
  • kubeflow-trainer:Kubeflow 训练作业管理插件,即 Kubeflow Trainer v2(替代 kftraining)

环境准备

  1. 一个运行中的 ACP 环境
  2. 确保已部署 Alauda AI(要求 Alauda AI 版本 >= 2.0)
  3. 在要部署 Kubeflow 的业务集群中部署 ASM(如果前一步未部署 ASM)(目前支持 ASM v1,未来预计支持 ASM v2)
  4. 部署 LWS(Alauda Build of LeaderWorkerSet)插件,kubeflow-trainer 的依赖插件。
  5. 按照下述说明配置 oauth2-proxy 插件

配置 oauth2-proxy 插件

获取平台 dex CA 证书,供后续在 Global 集群中使用:

crt=$(kubectl get secret -n cpaas-system dex.tls -o jsonpath='{.data.tls\.crt}')
echo -n $crt | base64 -d

然后进入 global 集群或在 acp 平台管理 -> 资源管理 中更新 ServiceMesh 资源,在 spec 字段下添加以下内容:

注意:如果已配置 spec.values.pilot.jwksResolverExtraRootCA,则只能配置 spec.meshConfig.extensionProviders,且只能新增,不能删除原有的 spec.meshConfig.extensionProviders

spec:
  overlays:
    - kind: IstioOperator
      patches:
        - path: spec.values.pilot.env.PILOT_JWT_PUB_KEY_REFRESH_INTERVAL
          value: 1m
        - path: spec.values.pilot.jwksResolverExtraRootCA
          value: |
            -----BEGIN CERTIFICATE-----
            <YOUR_DEX_CA_CERTIFICATE_BASE64_HERE>
            -----END CERTIFICATE-----
        - path: spec.meshConfig.extensionProviders
          value:
            envoyExtAuthzHttp:
              headersToDownstreamOnDeny:
                - content-type
                - set-cookie
              headersToUpstreamOnAllow:
                - authorization
                - path
                - x-auth-request-user
                - x-auth-request-email
                - x-auth-request-access-token
              includeAdditionalHeadersInCheck:
                X-Auth-Request-Redirect: http://%REQ(Host)%%REQ(:PATH)%
              includeRequestHeadersInCheck:
                - authorization
                - cookie
                - accept
              port: "80"
              service: oauth2-proxy.kubeflow-oauth2-proxy.svc.cluster.local
            name: oauth2-proxy-kubeflow

组件接入

获取以下插件的安装包,使用 violet 工具完成接入。

# 注意:替换为您的平台地址、用户名、密码和集群名称。
violet push --platform-address="https://192.168.171.123" \
  --platform-username="admin@cpaas.io" \
  --platform-password="<platform_password>" \
  <your downloaded plugin package file>
  • kfbase:Kubeflow 基础功能
  • model-registry-operator:Kubeflow Model Registry Operator
  • kfp:Kubeflow Pipeline 功能
  • kftraining:Kubeflow Training Operator(已弃用)
  • kubeflow-trainer:Kubeflow 训练作业管理插件(替代 kftraining)

注意:对于 kftraining 插件,如需启用 volcano 调度器支持,需先部署 volcano,再部署 kftraining。

部署步骤

1. 部署 kfbase(Kubeflow Base)

Cluster Plugins 中找到 kfbase(Kubeflow Base)插件,按页面提示填写配置,等待组件部署完成。

部署完成后,需要进行以下操作配置 dex 重定向:

管理员 - 系统设置 - 平台参数 中,点击 平台访问 URL 右侧的“编辑”按钮,添加重定向 URL,格式为 https://<your-kubeflow-domain>:<port>/,例如 https://192.168.139.133:30443/。注意 host 与 kfbase 插件部署页面配置的 oidcRedirectURL 相同,端口与 istioGatewayNodeportHTTPS 相同。

部署完成后,可在 Alauda AI 的 工具 导航下找到 Kubeflow 菜单项,点击进入 Kubeflow 界面。

2. 创建 Kubeflow 用户并绑定命名空间

首次登录 Kubeflow 前,需要将 ACP 用户绑定到命名空间。用户可参考以下示例,创建命名空间 kubeflow-admin-cpaas-io 并将用户 admin@cpaas.io 绑定为其所有者。

注意:如果该 Profile 资源已在 Alauda AI 部署时创建,可跳过此步骤

注意:可能需要降低用户命名空间的 Pod Security Admission 级别,以便创建 Notebook 实例等

apiVersion: kubeflow.org/v1beta1
kind: Profile
metadata:
  name: kubeflow-admin-cpaas-io
spec:
  owner:
    kind: User
    name: "admin@cpaas.io"

3. 若绑定用户到已创建的命名空间,还需完成以下配置:

如果前一步中 Alauda AI 已部署,且已创建 kubeflow-admin-cpaas-io 命名空间和对应的 Profile 资源,但仍无法选择该命名空间,可参考以下资源创建账户的角色绑定。

apiVersion: v1
kind: ServiceAccount
metadata:
  name: default-editor
  namespace: kubeflow-admin-cpaas-io
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: default-editor
  namespace: kubeflow-admin-cpaas-io
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: kubeflow-edit
subjects:
- kind: ServiceAccount
  name: default-editor
  namespace: kubeflow-admin-cpaas-io
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: user-admin-cpaas-io-clusterrole-admin
  namespace: kubeflow-admin-cpaas-io
  annotations:
    role: admin
    user: "admin@cpaas.io"
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: kubeflow-admin
subjects:
  - apiGroup: rbac.authorization.k8s.io
    kind: User
    name: "admin@cpaas.io"
---
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
  name: user-admin-cpaas-io-clusterrole-admin
  namespace: kubeflow-admin-cpaas-io
  annotations:
    role: admin
    user: "admin@cpaas.io"
spec:
  rules:
    - from:
        - source:
            ## 更多信息请参见 KFAM 代码:
            ## https://github.com/kubeflow/kubeflow/blob/v1.8.0/components/access-management/kfam/bindings.go#L79-L110
            principals:
              ## Kubeflow notebooks 所需
              ## 模板:"cluster.local/ns/<ISTIO_GATEWAY_NAMESPACE>/sa/<ISTIO_GATEWAY_SERVICE_ACCOUNT>"
              - "cluster.local/ns/istio-system/sa/istio-ingressgateway-service-account"

              ## Kubeflow pipelines 所需
              ## 模板:"cluster.local/ns/<KUBEFLOW_NAMESPACE>/sa/<KFP_UI_SERVICE_ACCOUNT>"
              - "cluster.local/ns/kubeflow/sa/ml-pipeline-ui"
      when:
        - key: request.headers[kubeflow-userid]
          values:
            - "admin@cpaas.io"

4. 部署 kfp(Kubeflow Pipeline)和 kftrainer(Kubeflow Training Operator)

同上,在 Cluster Plugins 中找到 kfp(Kubeflow Pipeline)和 kftrainer(Kubeflow Training Operator)。

注意:Kubeflow Pipeline 部署完成后,Kubeflow 界面中可使用 Pipeline 相关功能。
注意:Kubeflow Training Operator 是后台任务调度器,不会出现在 UI 菜单和功能中。

5. 部署 Kubeflow Model Registry

管理员 - Marketplace - OperatorHub 中找到 Model Registry Operator,点击“安装”按钮完成 Operator 部署。

Operator 安装完成后,需要在用户命名空间中创建一个 ModelRegistry 实例,切换到 所有实例 标签页,点击“创建”按钮创建实例。

注意:必须在已绑定 Kubeflow 用户 Profile 的命名空间中创建实例,否则 Model Registry UI 不会显示

创建实例时,根据需要配置以下参数:

  • Name:配置 Model Registry 实例名称。
  • Namespace:配置 Model Registry 实例所在命名空间,必须是已绑定 Kubeflow 用户 Profile 的命名空间。
  • MySQL Storage Class:配置 MySQL 存储类,用于存储 Model Registry 的元数据。根据集群中可用的存储类填写,例如 standard
  • MySQL Storage Size:配置 MySQL 存储大小,用于存储 Model Registry 的元数据。默认值为 10Gi,可根据需求调整。
  • DisplayName:Model Registry 实例显示名称。
  • Description:Model Registry 实例简要描述。

注意:Model Registry 实例启动后,刷新 Kubeflow 页面左侧导航的 Model Registry 菜单,即可看到上述步骤部署的实例。首次部署实例前,Kubeflow Model Registry 界面为空。

注意:Model Registry 实例会限制非当前命名空间的网络请求。如需允许更多命名空间访问,需要手动修改 kubectl -n <your-namespace> edit authorizationpolicy <model-registry-name>,并根据 istio 文档添加允许访问的命名空间。

注意:可在不同命名空间安装多个 Model Registry 实例,实例之间相互独立。

6. 部署 kubeflow-trainer(Kubeflow Trainer v2)

注意:如果已部署 kftraining(Kubeflow Training Operator),需先卸载 kftraining 后再部署 kubeflow-trainer。

注意:部署 kubeflow-trainer 前,请确保已安装 LWS(Alauda Build of LeaderWorkerSet)插件,因为 LWS 是 kubeflow-trainer 的依赖。

注意:Kubeflow Trainer v2 要求 Kubernetes 版本最低为 1.32.3,较旧版本可能导致异常问题。

Cluster Plugins 中找到 kubeflow-trainer(Kubeflow Trainer v2),点击“安装”按钮,选择是否启用 JobSet,然后点击“安装”按钮完成部署。