在ACK集群中部署和管理ack-kserve组件

重要

本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。

KServe是一个开源项目,旨在简化在Kubernetes上部署和运行机器学习模型的过程,支持多种机器学习框架、具备弹性扩容能力。KServe通过定义简单的YAML文件,提供声明式的API来部署模型,使得配置和管理模型服务变得更加容易。本文介绍如何在ACK集群中部署和管理ack-kserve组件以及常见问题的解决方案。

前提条件

步骤一: 安装cert-manager组件

如果您的集群中已经安装cert-manager组件,请跳过此步骤。

  1. 登录容器服务管理控制台,在左侧导航栏选择集群

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择应用 > Helm

  3. Helm页面单击创建,然后在创建页面,将应用名设置为cert-manager,在Chart区域的搜索栏搜索并选中cert-manager,完成后单击下一步,在弹出的对话框中单击,确认采用cert-manager为Chart的默认的命名空间。

  4. 参数配置页面,确认Chart 版本参数信息后,单击确定

    部署成功后,页面自动跳转至Helm页面,供您查看cert-manager的Helm组件信息。

步骤二:安装ack-kserve组件

ack-kserve组件默认采用RawDeployment模式部署,并与Nginx Ingress Controller组件集成。

  1. 登录容器服务管理控制台,在左侧导航栏选择集群

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择应用 > Helm

  3. Helm页面单击创建,然后在创建页面,将应用名设置为ack-kserve,在Chart区域的搜索栏搜索并选中ack-kserve,完成后单击下一步,在弹出的对话框中单击,确认采用kserve为Chart的默认的命名空间。

  4. 参数配置页面,确认Chart 版本参数信息后,单击确定

    部署成功后,页面自动跳转至Helm页面,供您查看ack-kserve的Helm组件信息。

  5. 校验ack-kserve是否运行。

    执行以下命令,查看kserve命名空间下的Pod是否处于running状态。

    kubectl get pod -n kserve

    如果预期输出的STATUSrunning状态,表明ack-kserve组件已经安装成功。

(可选)步骤三:查看或更新ack-kserve️组件

  1. 登录容器服务管理控制台,在左侧导航栏选择集群

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择应用 > Helm

  3. 查看ack-kserve️组件详情。

    Helm页面,单击ack-kserve组件操作列的详情,即可查看组件的基本信息、参数配置及历史版本。

  4. 更新ack-kserve️组件信息。

    Helm页面,单击ack-kserve组件操作列的更新,即可更新组件的版本及参数。

(可选)步骤四:清理资源和卸载组件

  1. 为避免资源浪费,请在卸载ack-kserve️组件前删除集群内的KServe CR(Custom Resource )及CRD(Custom Resource Definition)资源。

    重要

    删除CR和CRD资源之前,请确认业务不再使用CR和CRD资源。删除CRD资源会同步删除对应的CR资源,CR资源一旦删除将无法恢复。

    1. 确认业务不再使用后,再删除集群内所有的KServe CR资源。删除CR资源可能涉及以下命令:

      # 查看集群内所有isvc资源。
      kubectl get isvc --all-namespaces
      
      # 保存集群内所有isvc资源。
      kubectl get isvc --all-namespaces -oyaml > isvc.yaml.bak
      
      # 确认业务不再使用后删除isvc资源。
      kubectl delete isvc --all
    2. 删除集群内的KServe CRD资源。

      在删除CRD之前,应确保先删除所有依赖于该CRD的CR,否则会导致CRD删除失败。

      kubectl delete crd clusterservingruntimes.serving.kserve.io
      kubectl delete crd clusterstoragecontainers.serving.kserve.io
      kubectl delete crd inferencegraphs.serving.kserve.io
      kubectl delete crd inferenceservices.serving.kserve.io
      kubectl delete crd predictors.serving.kserve.io
      kubectl delete crd servingruntimes.serving.kserve.io
      kubectl delete crd trainedmodels.serving.kserve.io
  2. 卸载ack-kserve组件。

    1. 登录容器服务管理控制台,在左侧导航栏选择集群

    2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择应用 > Helm

    3. Helm页面,单击ack-kserve组件操作列的删除,即可根据页面提示卸载ack-kserve组件。

  3. 卸载cert-manager组件。

    警告

    卸载cert-manager组件前,请先确认集群中没有其他组件使用cert-manager组件,否则会导致业务不可用。

    1. 登录容器服务管理控制台,在左侧导航栏选择集群

    2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择应用 > Helm

    3. Helm页面,单击cert-manager组件操作列的删除,即可根据页面提示卸载cert-manager组件。

  4. 执行以下命令,删除集群内cert-manager的CRD资源。

    kubectl delete crd certificaterequests.cert-manager.io
    kubectl delete crd certificates.cert-manager.io
    kubectl delete crd challenges.acme.cert-manager.io
    kubectl delete crd clusterissuers.cert-manager.io
    kubectl delete crd issuers.cert-manager.io
    kubectl delete crd orders.acme.cert-manager.io

常见问题及解决方案

常见问题:安装ack-kserve组件时出现报错failed to call webhook: Post "https://cert-manager-webhook.cert-manager.svc:443/validate?timeout=30s": tls: failed to verify certificate: x509: certificate signed by unknown authority

问题原因:ack-kserve组件强依赖于cert-manager组件,如果当前集群中未安装cert-manager组件或者cert-manager组件未就绪,此时安装ack-kserve组件就会出现上述报错。

解决方案

  1. 执行以下命令,确认集群中是否已经安装cert-manager组件。

    kubectl get crd |grep certificates.cert-manager.io

    预期输出如下所示,表明集群中已经安装cert-manager组件。

    certificates.cert-manager.io                         2024-05-06T07:09:17Z

    如集群中没有cert-manager的CRD资源,请参见步骤一安装cert-manager组件。

  2. 执行以下命令,确认cert-manager组件是否已经就绪。

    kubectl -n cert-manager get po

    预期输出如下所示,表明cert-manager组件的Pod均已就绪。

    NAME                                       READY   STATUS    RESTARTS   AGE
    cert-manager-7f4bb44d5b-jrrfn              1/1     Running   0          23h
    cert-manager-cainjector-79544456cc-qp5pp   1/1     Running   0          23h
    cert-manager-webhook-f74ccb647-7m5dt       1/1     Running   0          23h

    如果所有Pod均为Ready状态,请参见上文先卸载ack-kserve组件,然后再重新安装即可解决报错。