KServe(原KFServing)是云原生环境的的一个模型服务器和推理引擎,可以支持自动缩放、零缩放、金丝雀部署等能力。本文将介绍如何结合阿里云服务网格ASM和阿里云容器服务平台Kubernetes(ACK)来部署。
前提条件
- 创建Kubernetes集群。
- 创建阿里云服务网格ASM企业版实例,版本需要>=v1.12.4.58-g3e422e2a-aliyun
- 本文以KServe v0.8版本为例进行安装。
添加数据面集群
在集群与工作负载管理->Kubernetes集群中,将数据面集群到阿里云服务网格ASM管理。
启用数据面KubeAPI访问
在基本信息页,选择启用数据面KubeAPI访问。
安装KServe组件
如果已经在数据面集群安装过KServe,可以跳过此步骤。
1. 安装Knative Serving
这里以 Knative Serving v0.7为例,需求Kubernetes版本>=v1.17。。
- 通过运行以下命令安装Knative Serving所需的自定义资源:
kubectl apply -f https://raw.githubusercontent.com/AliyunContainerService/asm-labs/kserve/kserve-0.7/serving-crds.yaml
- 安装Knative Serving的核心组件:
kubectl apply -f https://raw.githubusercontent.com/AliyunContainerService/asm-labs/kserve/kserve-0.7/serving-core.yaml
- 安装Knative Istio controller
在KServe中,可以使用Istio用作调用入口,并提供模型的蓝/绿和金丝雀部署能力。
执行以下命令,将安装net-istio-controller用于Istio的Knative入口控制器,以及istio Gateway和PeerAuthentication资源。PeerAuthentication是用于在服务网格环境中为knative webhook设置PERMISSIVE来避免mTLS认证问题。由于已经启用了数据面KubeAPI访问能力,可以直接使用数据面的kubeconfig进行创建。
kubectl apply -f https://raw.githubusercontent.com/AliyunContainerService/asm-labs/kserve/kserve-0.7/net-istio.yaml
2. 安装Cert Manager
KServe依赖Cert Manager组件。此组件的最低版本要求为v1.3.0。
以v1.3.0版本为例,使用如下命令安装:
3. 安装KServe
kubectl apply -f https://raw.githubusercontent.com/AliyunContainerService/asm-labs/kserve/kserve-0.7/kserve.yaml
创建ASM网关
在ASM网关点击创建。
注意,协议需要选择TCP,我们设置端口为80。
创建第一个推理服务
使用scikit-learn的训练模型进行测试。
创建命名空间
首先,创建用于部署KServe资源的命名空间。
kubectl create namespace kserve-test
创建 InferenceService
kubectl apply -n kserve-test -f - <
apiVersion: "serving.kserve.io/v1beta1"
kind: "InferenceService"
metadata:
name: "sklearn-iris"
spec:
predictor:
model:
modelFormat:
name: sklearn
storageUri: "gs://kfserving-examples/models/sklearn/1.0/model"
EOF
检查创建状态。
使用数据面Kubeconfig,执行如下命令查询inferenceservices的sklearn-iris的安装状态。
kubectl get inferenceservices sklearn-iris -n kserve-test
安装完成后,会自动创建对应模型配置的虚拟服务和网关规则。
测试通过ASM网关进行访问
创建模型输入文件
cat < "./iris-input.json"
{
"instances": [
[6.8, 2.8, 4.8, 1.4],
[6.0, 3.4, 4.5, 1.6]
]
}
EOF
通过ASM网关进行访问
获取SERVICE_HOSTNAME:
SERVICE_HOSTNAME=$(kubectl get inferenceservice sklearn-iris -n kserve-test -o jsonpath='{.status.url}' | cut -d "/" -f 3)
测试HOST为sklearn-iris.kserve-test.example.com
使用前文创建的ASM网关地址
curl -H "Host: ${SERVICE_HOSTNAME}" http://{ASM网关地址}:80/v1/models/sklearn-iris:predict -d @./iris-input.json
总结
作为业内首个全托管Istio兼容的阿里云服务网格产品ASM,一开始从架构上就保持了与社区、业界趋势的一致性,控制平面的组件托管在阿里云侧,与数据面侧的用户集群独立。ASM产品是基于社区Istio定制实现的,在托管的控制面侧提供了用于支撑精细化的流量管理和安全管理的组件能力。通过托管模式,解耦了Istio组件与所管理的K8s集群的生命周期管理,使得架构更加灵活,提升了系统的可伸缩性。从2022年4月1日起,阿里云服务网格ASM正式推出商业化版本, 提供了更丰富的能力、更大的规模支持及更完善的技术保障,更好地满足客户的不同需求场景, 详情可见产品介绍:https://www.aliyun.com/product/servicemesh 。