KServe是一个开源项目,旨在简化在Kubernetes上部署和运行机器学习模型的过程,支持多种机器学习框架、具备弹性扩容能力。KServe通过定义简单的YAML文件,提供声明式的API来部署模型,使得配置和管理模型服务变得更加容易。本文介绍如何在ACK集群中部署和管理ack-kserve组件以及常见问题的解决方案。
前提条件
已创建ACK集群Pro版,且集群版本为1.22及以上。具体操作,请参见创建ACK托管集群。
已安装Nginx Ingress Controller组件。具体操作,请参见管理Nginx Ingress Controller组件。
步骤一: 安装cert-manager组件
如果您的集群中已经安装cert-manager组件,请跳过此步骤。
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在Helm页面单击创建,然后在创建页面,将应用名设置为
cert-manager
,在Chart区域的搜索栏搜索并选中cert-manager
,完成后单击下一步,在弹出的对话框中单击是,确认采用cert-manager为Chart的默认的命名空间。在参数配置页面,确认Chart 版本和参数信息后,单击确定。
部署成功后,页面自动跳转至Helm页面,供您查看cert-manager的Helm组件信息。
步骤二:安装ack-kserve组件
ack-kserve组件默认采用RawDeployment模式部署,并与Nginx Ingress Controller组件集成。
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在Helm页面单击创建,然后在创建页面,将应用名设置为
ack-kserve
,在Chart区域的搜索栏搜索并选中ack-kserve
,完成后单击下一步,在弹出的对话框中单击是,确认采用kserve为Chart的默认的命名空间。在参数配置页面,确认Chart 版本和参数信息后,单击确定。
部署成功后,页面自动跳转至Helm页面,供您查看ack-kserve的Helm组件信息。
校验ack-kserve是否运行。
执行以下命令,查看
kserve
命名空间下的Pod是否处于running
状态。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组件,然后再重新安装即可解决报错。