跳到主要内容

Serverless

Alaya New为用户提供了运行自定义代码、管理数据及集成应用的能力,无需关注底层基础设施的运维与管理。该类云服务极大地简化了开发与部署流程,使开发者能够专注于核心业务逻辑,提升效率,降低运维复杂度。

用户只需提供一个标准的Kubernetes Manifests(清单),无需进行额外的安装与配置(除极少必要的依赖文件),即可高效部署GPU推理Serverless。在VKS(弹性容器集群)上使用标准的Kubernetes Manifests(清单)部署GPU推理实例时,内置高可用性,应用资源会根据流量自动扩缩容。缩容至零实例,意味着在空闲时不会消耗资源,不会计费,实现了推理态的GPU Serverless。

信息

Alaya New Serverless借助Knative实现了基于Manifests(清单)的应用部署能力,如需了解更多关于Knative的信息,请访问Knative

前提条件

用户已开通弹性容器集群,且集群可正常使用。如尚未开通,可参考开通弹性容器集群完成开通。

准备工作

  1. 下载Serverless依赖包,解压已下载压缩包,解压后的文件:kourier.yamlserving-core-v1.17.0.yamlserving-crds.yamlknative-nginx.yaml

  2. 下载示例文件,该文件Manifests(清单)用于部署Serverless服务,然后解压至对应目录下。

    提示

    上述文件仅作为示例,实际使用时请根据具体业务需求调整配置内容。

操作步骤

安装组件

  1. 运行如下所示的命令,连接弹性容器集群资源,用于后续组件及服务部署,更多信息请参考使用弹性容器集群

    export KUBECONFIG=[yourpath]
  2. 运行如下所示命令,在VKS(弹性容器集群)中应用serving-crds.yaml配置文件,该文件用于安装Knative所需的CRD。

    kubectl apply -f [serving-crds.yaml]
  3. 运行如下所示命令,在VKS(弹性容器集群)中应用serving-core-v1.17.0.yaml资源配置文件,该文件用于安装Knative所需的核心资源,然后运行kubectl get pod -n knative-serving,确保核心资源Pod状态为Running,例如下图绿色高亮所示。

    kubectl apply -f [serving-core-v1.17.0.yaml]
  4. 运行如下所示命令,在VKS(弹性容器集群)中应用kourier资源配置文件,该文件用于安装Knative所需的网络资源,然后运行下图高亮②、③命令,确保网关Pod状态为Running且网关服务已运行。 image

    kubectl apply -f [kourier.yaml]
    信息

    上图高亮②、③的命令为:

    kubectl get pod -n [kourier-system]
    kubectl get svc -n [kourier-system]
    提示

    上述依赖文件仅需在集群内部部署一次,即可在整个集群范围内生效。

  5. 运行如下所示命令,在VKS(弹性容器集群)中应用knative-nginx资源配置文件,该文件用户用于安装公网访问代理,然后运行kubectl get all -n knative-nginx,查看公网代理状态为Running,例如下图所示。 image

    kubectl apply -f [knative-nginx.yaml]

部署服务

上文提到通过Serverless部署服务时,用户只需提供一个标准的Kubernetes Manifests(清单),即可完成部署,下文以部署一个qwen7b模型,并且通过参数配置实现自动扩缩容为例。

  1. 在终端工具运行如下所示的命令,在VKS(弹性容器集群)中应用serverless.yaml配置文件,部署模型服务,例如下图所示。

    image

    kubectl apply -f [serverless.yaml]
    提示

    配置文件中注解部分参数及对应说明可参见附录,您可根据实际业务需求调整/修改各参数。

  2. 运行如下所示命令,查看在VKS中Knative Service(ksvc)资源对象,确保服务已经成功部署并准备好对外提供访问能力。

    kubectl get ksvc -n [knative-qwen7b]
  3. (可选)运行如下所示的命令,查看VKS集群中Knative Service(ksvc)Pod情况,验证参数配置(autoscaling.knative.dev/initial-scale: "1")是否生效,从图中可看出配置生效。

    image

    kubectl get pod -n [knative-qwen7b]
  4. (可选)等待一段时间,运行上步命令,查看Pod数量,由于配置文件中设置了autoscaling.knative.dev/min-scale,则如果没有调用一段时间后,pod数就缩减为0,如下图所示。 image

访问服务

服务部署完成后,可在集群内/集群外进行访问,详情如下所示。

  1. 运行如下所示的命令获取服务名称,使用服务名称+namespace名称+服务路径,即目标URL,例如下图高亮①所示。

    kubectl get svc -n [kourier-system]
  2. 运行如下所示的命令获取本地访问域名,例如下图高亮②所示。

    image

    kubectl get service.serving.knative.dev -n [knative-qwen7b]
  3. 获取上述信息后,运行kubectl exec -it [pod name] -- bash命令,进入集群内正在运行的Pod,例如下图高亮①所示;运行“查看服务状态脚本”,例如下图高亮②所示,查看服务运行情况,根据运行结果(下图绿色高亮所示),服务可以正常调用。

    image

    查看服务状态脚本
    curl -X POST http://kourier-internal.kourier-system/v1/chat/completions \
    -H "Content-Type: application/json" \
    -H "Host: knative-qwen7b-svc.knative-qwen7b.127.0.0.1.nip.io" \
    -d '{
    "model": "qwen7b",
    "messages": [
    {"role": "system", "content": "你是一个有用的助手."},
    {"role": "user", "content": "怎么计算1+1."}
    ]
    }'

卸载knative

  1. 删除通过Knative部署的所有服务资源。运行以下命令以清理your_deploy.yaml中定义的服务。

    kubectl delete -f [your_deploy.yaml]
  2. 按照依赖顺序依次卸载已安装的Knative组件。运行以下命令删除相关资源配置文件。

    kubectl delete -f [knative-nginx.yaml]
    kubectl delete -f [kourier.yaml]
    kubectl delete -f [serving-core-v1.17.0.yaml]
    kubectl delete -f [serving-crds.yaml]

附录

在Knative中,自动扩缩容(Autoscaling)是通过一系列自定义资源和注解来控制的。配置文件中自动扩缩容的参数说明(部分)如下所示。

参数Yaml文件配置全局配置默认值参数说明
扩缩容实现类autoscaling.knative.dev/classpod-autoscaler-classkpa.autoscaling.knative.dev扩缩容实现类
度量标准autoscaling.knative.dev/metric-concurrency监控的度量指标,concurrencyrps
维持百分比autoscaling.knative.dev/target-utilization-percentagecontainer-concurrency-target-percentage70维持concurrencyrps的设置目标的百分比
目标并发请求数/每秒请求数autoscaling.knative.dev/targetcontainer-concurrency-target-default/requests-per-second-target-default100/200根据配置生效*
服务启动时,初始副本数utoscaling.knative.dev/initial-scaleinitial-scale1服务刚启动时的副本数
最小副本数autoscaling.knative.dev/min-scalemin-scale0服务运行时的最小副本数
最大副本数autoscaling.knative.dev/max-scalemax-scale0最大可扩展的副本数
缩容延迟时间autoscaling.knative.dev/scale-down-delayscale-down-delay60流量下降后多久开始缩容
缩容到0时,最后一个Pod的最小等待(保留)时间autoscaling.knative.dev/scale-to-zero-pod-retention-periodscale-to-zero-pod-retention-period0s控制Pod被保留多久的时间窗口
恐慌窗口时长百分比autoscaling.knative.dev/panic-window-percentagepanic-window-percentage10.0控制恐慌窗口长度占稳定窗口长度的比例(%)
进入恐慌阈值百分比autoscaling.knative.dev/panic-threshold-percentagepanic-threshold-percentage200.0当实际负载达到目标容量的多少百分比时,触发恐慌模式
信息

*:当metrics为rps,全局配置中requests-per-second-target-default有效,默认值:200;当metrics为concurrency,全局配置中container-concurrency-target-default有效,默认值:100。文件配置中均对应参数autoscaling.knative.dev/target

总结

Serverless为用户提供了一种高效、灵活的方法来部署和管理现代云原生应用,极大地简化了开发与部署流程,使开发者能够专注于核心业务逻辑,提升效率,降低运维复杂度。