安装 Kubeflow 插件

本页介绍如何在 Alauda AI 2.0 及更高版本中部署 Kubeflow 相关插件。

支持的插件:

  • kfbase:Kubeflow 基础组件,包括认证和授权、中央监控面板、Notebooks、PVC Viewer、TensorBoards、Volumes、Model Registry UI、KServe Endpoints UI,以及 Model Catalog API 服务。
  • model-registry-operator:Kubeflow Model Registry Operator。
  • kfp:Kubeflow Pipelines。
  • kftraining:Kubeflow Training Operator。此插件已弃用。
  • kubeflow-trainer:用于训练作业管理的 Kubeflow Trainer v2。此插件替代 kftraining

环境准备

在开始之前,请确保满足以下前提条件:

  1. ACP 环境可用且正在运行。
  2. 已部署 Alauda AI。需要 Alauda AI 2.0 或更高版本。
  3. 已安装 Alauda Build of KServe。
  4. Kubeflow 将运行的业务集群中已部署 ASM。如果尚未安装 ASM,请先完成部署再继续。ASM v1 已弃用,尽可能使用 ASM v2。
  5. 如果计划部署 kubeflow-trainer,请先安装 LWS 插件,即 Alauda Build of LeaderWorkerSet。
  6. 按如下所述配置 oauth2-proxy 插件。

配置 Dex 重定向

注意: 在安装 kfbase 插件之前,请先为 Dex 重定向配置平台访问 URL。此步骤可能会更新平台 CA 证书。如果在配置 oauth2-proxy 后证书发生变化,oauth2-proxy 配置可能会失败。

Administrator > System Settings > Platform Parameters 中,单击 Platform Access URLs 旁边的 Edit,并添加一个格式为 https://<your-kubeflow-domain> 的重定向 URL,例如 https://kubeflow.example.com

  • <your-kubeflow-domain> 必须与为 kfbase 插件配置的 kubeflowDomain 值一致。

配置 oauth2-proxy 插件

获取平台 Dex CA 证书,以便稍后在 Global 集群中使用:

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

配置 ASM v1(已弃用)

在 global 集群中,或在 ACP Platform Management > Resource Management 中,更新 ServiceMesh 资源,并在 spec 下添加以下内容:

注意: 如果已配置 spec.values.pilot.jwksResolverExtraRootCA,则只更新 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

配置 ASM v2

注意: 如果仍存在任何 ASM v1 webhook,请先删除它们。否则 Kubeflow 认证可能会失败。

kubectl delete validatingwebhookconfigurations istiod-default-validator
kubectl delete mutatingwebhookconfigurations istio-sidecar-injector-1-22
kubectl delete mutatingwebhookconfigurations istio-revision-tag-default

在 ACP 中,进入 Administrator > MarketPlace > OperatorHub,找到 Alauda Service Mesh v2,打开 All Instances 选项卡,定位类型为 Istio 的实例,例如 default,单击 Update,并在 spec 下添加以下内容:

spec:
  values:
    pilot:
      env:
        PILOT_JWT_PUB_KEY_REFRESH_INTERVAL: 1m
      jwksResolverExtraRootCA: |
        -----BEGIN CERTIFICATE-----
        <YOUR_DEX_CA_CERTIFICATE_BASE64_HERE>
        -----END CERTIFICATE-----
    meshConfig:
      extensionProviders:
        - 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 上传:

# Replace the platform address, username, password, and plugin package path.
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 Pipelines。
  • kftraining:Kubeflow Training Operator。此插件已弃用。
  • kubeflow-trainer:Kubeflow Trainer v2。此插件替代 kftraining

注意: 如果要为 kftraining 启用 Volcano 调度器支持,请在安装 kftraining 之前先部署 Volcano。

部署步骤

1. 部署 kfbase(Kubeflow Base)

Cluster Plugins 中找到 kfbase 插件,完成页面上的配置,然后等待部署完成。

部署后:

  • Administrator > System Settings > Platform Parameters 中,确认 Platform Access URLs 包含一个格式为 https://<your-kubeflow-domain> 的地址,其中 <your-kubeflow-domain> 是为 kfbase 插件配置的 kubeflowDomain
  • 配置 DNS 解析,或添加本地 hosts 记录,使 <your-kubeflow-domain> 解析到 kubectl -n istio-system get gateway kubeflow-external-gateway 分配的 IP 地址。

部署完成后,Kubeflow 入口会显示在 Alauda AI 的 Tools 下。

有关升级相关操作,请参见 升级 Kubeflow 插件

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

在用户首次登录 Kubeflow 之前,请先将 ACP 用户绑定到某个命名空间。以下示例将创建命名空间 kubeflow-admin-cpaas-io,并将 admin@cpaas.io 设为所有者。

注意: 如果在 Alauda AI 部署期间已经创建了此 Profile 资源,则可以跳过此步骤。

注意: 在创建 Notebook 实例及类似工作负载之前,可能需要降低该用户命名空间的 Pod Security Admission 级别。

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 也可能已经存在。如果该命名空间在 Kubeflow 中仍未显示,请创建以下资源,将账号绑定到该命名空间:

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:
            ## for more information see the KFAM code:
            ## https://github.com/kubeflow/kubeflow/blob/v1.8.0/components/access-management/kfam/bindings.go#L79-L110
            principals:
              ## required for Kubeflow notebooks
              ## TEMPLATE: "cluster.local/ns/<ISTIO_GATEWAY_NAMESPACE>/sa/<ISTIO_GATEWAY_SERVICE_ACCOUNT>"
              - "cluster.local/ns/istio-system/sa/istio-ingressgateway-service-account"

              ## required for Kubeflow pipelines
              ## TEMPLATE: "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. 部署 kfpkftraining(已弃用)

Cluster Plugins 中找到 kfpkftraining,并按需部署。

注意: 部署 kfp 后,Kubeflow UI 中将可用与 pipeline 相关的功能。

注意: kftraining 是一个后台控制器,不会作为菜单项显示在 Kubeflow UI 中。

5. 部署 Kubeflow Model Registry

Administrator > MarketPlace > OperatorHub 中找到 Model Registry Operator,然后单击 Install

安装 Operator 后,打开 All Instances 选项卡,并在用户命名空间中创建一个 ModelRegistry 实例。

注意: 请在已经绑定到 Kubeflow Profile 的命名空间中创建该实例。否则不会显示 Model Registry UI。

创建实例时,请根据需要配置以下字段:

  • Name:Model Registry 实例名称。
  • Namespace:实例运行所在的命名空间。该命名空间必须已绑定到 Kubeflow Profile
  • MySQL Storage Class:用于 Model Registry 元数据的存储类,例如 standard
  • MySQL Storage Size:元数据数据库的存储大小。默认值为 10Gi
  • DisplayName:Model Registry 实例的显示名称。
  • Description:实例的简短描述。

注意: 实例启动后,请刷新 Kubeflow 左侧导航中的 Model Registry 条目以查看新实例。在创建第一个实例之前,Model Registry 页面为空。

注意: Model Registry 实例会限制来自其他命名空间的网络请求。如需允许其他命名空间访问,请编辑该实例的 authorizationpolicy,例如 kubectl -n <your-namespace> edit authorizationpolicy <model-registry-name>,并根据 Istio 文档更新策略。

注意: 你可以在不同命名空间中部署多个 Model Registry 实例。每个实例都是独立的。

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

注意: 如果 kftraining 已经部署,请先卸载它,再部署 kubeflow-trainer

注意: 在部署 kubeflow-trainer 之前,请先安装 LWS 插件,因为 LWS 是 kubeflow-trainer 的依赖项。

注意: Kubeflow Trainer v2 需要 Kubernetes 1.32.3 或更高版本。较旧的 Kubernetes 版本可能会导致非预期行为。

Cluster Plugins 中找到 kubeflow-trainer,单击 Install,选择是否启用 JobSet,然后完成安装。