本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。
KServe是一个开源项目,旨在通过YAML文件提供声明式API,简化Kubernetes上机器学习模型的部署和管理。ack-kserve基于开源KServe进行深度优化,并与阿里云生态(如存储、日志、网络等)深度集成,简化了KServe的部署和运维流程。本文介绍如何在ACK集群中部署和管理ack-kserve组件。
前提条件
- 已创建ACK托管集群Pro版,且集群版本为1.22及以上。具体操作,请参见创建ACK托管集群。 
- 已安装Nginx Ingress Controller组件。具体操作,请参见管理Nginx Ingress Controller组件。 
步骤一: 安装cert-manager组件
- 登录容器服务管理控制台,在左侧导航栏选择集群列表。 
- 在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择。 
- 单击左上方创建,在基本信息页面填写应用名,在Chart区域搜索选中 - cert-manager,然后单击下一步。
- 在参数配置页面,确认Chart 版本和参数信息后,单击确定。 - 部署成功后,可以在Helm页面查看cert-manager的Helm组件信息。 
步骤二:安装ack-kserve组件
ack-kserve组件默认采用RawDeployment模式部署,并与Nginx Ingress Controller组件集成。
- 登录容器服务管理控制台,在左侧导航栏选择集群列表。 
- 在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择。 
- 单击左上方创建,在基本信息页面填写应用名,在Chart区域搜索选中 - ack-kserve,然后单击下一步。
- 在参数配置页面,确认Chart 版本和参数信息后,单击确定。 - 部署成功后,可以在Helm页面查看ack-kserve的Helm组件信息。 
- 校验ack-kserve是否运行。 - 执行以下命令,查看Pod运行状态。 - kubectl get pod -n kserve- 如果预期输出的 - STATUS为- running状态,表明ack-kserve组件已经安装成功。
(可选)步骤三:查看或更新ack-kserve️组件
- 登录容器服务管理控制台,在左侧导航栏选择集群列表。 
- 在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择。 
- 查看ack-kserve️组件详情。 - 在Helm页面,单击ack-kserve组件操作列的详情,即可查看组件的基本信息、参数配置及历史版本。 
- 更新ack-kserve️组件信息。 - 在Helm页面,单击ack-kserve组件操作列的更新,即可更新组件的版本及参数。 
(可选)步骤四:清理资源和卸载组件
- 为避免资源浪费,请在卸载ack-kserve️组件前删除集群内的KServe CR(Custom Resource )及CRD(Custom Resource Definition)资源。 重要- 删除CR和CRD资源之前,请确认业务不再使用CR和CRD资源。删除CRD资源会同步删除对应的CR资源,CR资源一旦删除将无法恢复。 - 确认业务不再使用后,再删除集群内所有的KServe CR资源。删除CR资源可能涉及以下命令: - # 查看集群内所有isvc资源。 kubectl get isvc --all-namespaces # 保存集群内所有isvc资源。 kubectl get isvc --all-namespaces -oyaml > isvc.yaml.bak # 确认业务不再使用后删除isvc资源。 kubectl delete isvc --all
- 删除集群内的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
 
- 卸载ack-kserve组件。 - 登录容器服务管理控制台,在左侧导航栏选择集群列表。 
- 在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择。 
- 在Helm页面,单击ack-kserve组件操作列的删除,即可根据页面提示卸载ack-kserve组件。 
 
- 卸载cert-manager组件。 警告- 卸载cert-manager组件前,请先确认集群中没有其他组件使用cert-manager组件,否则会导致业务不可用。 - 登录容器服务管理控制台,在左侧导航栏选择集群列表。 
- 在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择。 
- 在Helm页面,单击cert-manager组件操作列的删除,即可根据页面提示卸载cert-manager组件。 
 
- 执行以下命令,删除集群内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组件就会出现上述报错。
解决方案:
- 执行以下命令,确认集群中是否已经安装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组件。 
- 执行以下命令,确认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组件,然后再重新安装即可解决报错。