Kubeflow Chart 插件

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

  • kfbase:Kubeflow 基础组件,包括认证和授权、中央监控面板、notebook、pvc-viewer、tensorboards、volumes、模型注册 UI、kserve endpoints UI、模型目录 API 服务等。
  • chart-kubeflow-model-registry:Kubeflow 模型注册实例(Helm Chart)
  • 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 基础功能
  • chart-kubeflow-model-registry:Kubeflow 模型注册
  • 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 用户并绑定到 Namespace

首次登录 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. 部署 chart-kubeflow-model-registry(Kubeflow Model Registry)

Catalog管理员 - Marketplace - Chart Repositories 中找到 chart-kubeflow-model-registry,点击“创建”按钮,填写部署名称、项目、命名空间(示例部署位置)、Chart 版本,然后将右侧的 values.yaml 配置复制到左侧,根据集群信息修改以下内容:

注意:必须安装在已绑定 Kubeflow 用户 Profile 的命名空间,否则模型注册 UI 不会显示

  • global.registry.address:当前平台使用的镜像仓库地址
  • mysqlStorageClass:模型注册使用的 mysql 存储类,需要是目标部署集群支持的存储类
  • mysqlStorageSize:模型注册使用的 mysql 存储大小
  • mysqlDataBase:数据库名称(会自动创建)
  • modelRegistryDisplayName:要部署的模型注册实例名称
  • modelRegistryDescription:要部署的模型注册实例简要描述

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

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

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

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

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

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

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