新人指南-推理服务

想理解推理服务的服务名/域名/pod 命名规则、系统域名与自定义域名、流量分流与灰度、弹性伸缩、注入的环境变量时读这篇

平台使用 / 入门与权限
推理服务inference模型服务serving服务名deploymentservicehpa弹性伸缩域名泛域名自定义域名流量复制分流灰度升级环境变量

九、推理服务

版本 / 域名 / pod 的关系

服务名规则:$服务名 = $模型名-$模型版本(不含服务类型前缀)。其中模型名做字符替换(/:.-,并去掉首尾的 -),模型版本做归一化(去掉 v.:),最终拼接后截断到 60 字符。见 myapp/views/view_inferenceserving.py:608(版本归一化)、:764(拼接服务名)、:1954(灰度新建服务时的命名)。

服务名

$k8s-deployment-name = $服务名

deployment

$k8s-hpa-name = $服务名

在最大最小副本数不一致时创建 hpa。

补充(与代码核对):仅在未配置 cronhpa 时才定制 hpa(见 myapp/views/view_inferenceserving.py:1861-1862)。

hpa

$k8s-service-name = $服务名 用于域名的代理

$k8s-service-name = $服务名-external 用于 ip/L5 的代理(见 myapp/views/view_inferenceserving.py:857:1671

service

系统自带域名

自动配置域名需要泛域名支持。例如泛域名为 domain = *.kfserving.woa.com

生产域名:

http://$服务名.service.$domain

测试环境域名:

http://test.$服务名.service.$domain
http://debug.$服务名.service.$domain

自定义域名

用户可通过 host 字段配置服务的访问域名,但是必须与泛域名结尾。

多个服务可以配置相同的域名。

流量复制和分流

多个服务(可以是相同模型或者不同模型间)配置相同的域名:

  1. 分流属性字段控制分配多少流量到其他服务上,剩余流量归属于当前服务
  2. 流量镜像字段控制复制多少流量到其他服务上。但只会将当前服务的响应返回给客户端

流量分流

灰度升级

  1. 同一个服务灰度升级,只需要修改服务的配置,重新部署,服务会自动滚动升级 pod
  2. 不同服务进行灰度升级。比如同一个模型的不同版本之间,那么多个服务使用相同的域名,新部署的服务上线正常后,会自动下线同域名的旧服务

弹性伸缩容

弹性伸缩容的触发条件:可以使用自定义指标,可以使用其中一个指标或者多个指标,示例:cpu:50%,mem:50%,gpu:50%

环境变量

平台会自动为推理服务容器注入以下环境变量(与代码核对,见 myapp/views/view_inferenceserving.py:1122-1136):

KUBEFLOW_ENV=test            # 环境标识(test/prod 等)
KUBEFLOW_MODEL_PATH=         # 模型路径
KUBEFLOW_MODEL_VERSION=      # 模型版本
KUBEFLOW_MODEL_IMAGES=       # 服务镜像
KUBEFLOW_MODEL_NAME=         # 模型名
KUBEFLOW_INFERENCE_ID=       # 推理服务 id
KUBEFLOW_RUN_ID=             # 本次运行的随机 id
RESOURCE_CPU=                # 申请的 CPU
RESOURCE_MEMORY=             # 申请的内存
RESOURCE_MIN_REPLICAS=       # 最小副本数
RESOURCE_MAX_REPLICAS=       # 最大副本数
RESOURCE_GPU=                # 申请的 GPU 卡数
MODEL_PATH=                  # 模型路径(去尾部 /)
MODEL_NAME=                  # 模型名
INFERENCE_NAME=              # 推理服务名

此外,平台为所有 pod 统一注入以下 K8s 下行字段环境变量(见 myapp/utils/py/py_k8s.py:1122-1126):

K8S_NODE_NAME=               # spec.nodeName
K8S_POD_NAMESPACE=           # metadata.namespace
K8S_POD_IP=                  # status.podIP
K8S_HOST_IP=                 # status.hostIP
K8S_POD_NAME=                # metadata.name

注意:较早的文档里曾列出 KUBEFLOW_AREA=shanghai/guangzhou,但当前推理服务注入逻辑(myapp/views/view_inferenceserving.py:1121-1136)并不注入该变量,已从上面的列表中移除。

服务暴露

  • 域名暴露:依赖 SERVICE_DOMAIN(默认 service.svc.cluster.local,见 myapp/config.py:1378)与网关层泛域名解析 / 转发。
  • ip 暴露:依赖 SERVICE_EXTERNAL_IP(支持 内网|外网 写法,默认 [],见 myapp/config.py:837;可在项目组 expand 覆盖,见 myapp/views/view_serving.py:382)。

相关专题文档

本节为快速上手版,模型管理与推理服务发布、端口规则、各推理框架的完整说明见本段专题文档 模型服务推理服务-ml推理服务-tfserving推理服务-torchserve推理服务-triton

返回 指南目录

最后更新 2026-06-30完整文档以官方仓库为准:GitHub Wiki