安装 Kubeflow 插件

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

支持的插件:

  • kfbase:Kubeflow 基础组件,包括身份验证和授权、中心监控面板、Notebooks、PVC Viewer、TensorBoards、Volumes、Model Registry UI、KServe Endpoints UI 以及 Model Catalog API service。
  • 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 plugin,即 Alauda Build of LeaderWorkerSet。
  6. 已按如下所述配置 oauth2-proxy 插件。

配置 Dex 重定向

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

管理员 > 系统设置 > 平台参数 中,点击 Platform Access URLs 旁边的 编辑,并添加格式为 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 的 平台管理 > 资源管理 中,更新 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 中,进入 管理员 > MarketPlace > OperatorHub,找到 Alauda Service Mesh v2,打开 All Instances 选项卡,找到类型为 Istio 的实例,例如 default,点击 更新,并在 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 scheduler 支持,请在安装 kftraining 之前先部署 Volcano。

部署步骤

1. 部署 kfbase(Kubeflow Base)

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

部署完成后:

  • 管理员 > 系统设置 > 平台参数 中,确认 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 是一个后台 controller。它不会作为菜单项显示在 Kubeflow UI 中。

5. 部署 Kubeflow Model Registry

管理员 > MarketPlace > OperatorHub 中,找到 Model Registry Operator 并点击 安装

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 plugin,因为 LWS 是 kubeflow-trainer 的依赖项。

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

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